Как правильно использовать аутентификацию Firebase? - PullRequest
0 голосов
/ 21 ноября 2018

Я только начинаю работать с аутентификацией по электронной почте и паролю FirebaseUI.

Мое приложение очень простое, пока оно состоит из 1 действия, которое содержит 3 фрагмента с использованием TabLayout и выглядит так:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        TabsAdapter adapter = new TabsAdapter(this, getSupportFragmentManager());   
        viewPager.setAdapter(adapter);     
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

        }
    }

В помощнике Firebase он показывает, что мне нужно проверить, вошел ли пользователь в систему onStart:

@Override
public void onStart() {
    super.onStart();
    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    updateUI(currentUser);
}

Затем помощник показывает, как зарегистрироваться и войти в систему.пользователь, но он не показывает, в какую часть действия он должен идти: onCreate?onStart?

* Это код регистрации:

mAuth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "createUserWithEmail:success");
                    FirebaseUser user = mAuth.getCurrentUser();
                    updateUI(user);
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "createUserWithEmail:failure", task.getException());
                    Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show();
                    updateUI(null);
                }

                // ...
            }
        });

* Это код входа в систему

mAuth.signInWithEmailAndPassword(email, password)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithEmail:success");
                    FirebaseUser user = mAuth.getCurrentUser();
                    updateUI(user);
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInWithEmail:failure", task.getException());
                    Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show();
                    updateUI(null);
                }

                // ...
            }
        });

Я запутался, предполагая, что яв настоящее время есть рабочее приложение с кодом, приведенным выше, каков рабочий процесс сейчас?Нужно ли мне делать этот код регистрации / входа в Mainactivity, а затем вместо псевдокода updateUI(null);, предоставляемого помощником Firebase, я должен выполнить новое «основное действие» только с кодом авторизации firebase, а затемиспользовать намерения, чтобы отправить пользователя к тому, что в настоящее время является основным действием, которое будет переименовано во что-то вроде «SignedInActivity», или все будет выполнено в том же текущем действии?

** Редактировать: Чтобы уточнить, что я имею в виду: яВ настоящее время есть MainActivity.Нужно ли:

1) изменить текущую MainActivity на SignedInActivity, а затем заменить текущую MainActivity на активность Firebase, а затем при успешном входе отправить намерение в SignedInActivity

или

2) Изменить текущую MainActivity с помощью кода Firebase, чтобы у меня все еще была текущая MainActivity с дополнительным кодом Firebase?

Я тоже в замешательстве, так что, надеюсь, мой пост понятен

1 Ответ

0 голосов
/ 21 ноября 2018

Вы действительно должны посмотреть на Android Lifecycle .Важно знать, когда вызываются обратные вызовы (onCreate, onStart, onResume и т. Д.), И тогда вы сами можете решить, где реализовать код.

В вашем случае я бы сделал LoginActivity, где вы также можете зарегистрировать новый профиль с помощью createUserWithEmailAndPassword () и Войти с уже созданной учетной записью.Если это успешно, вы можете запустить MainActivity.

mAuth.signInWithEmailAndPassword(email, password)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
                // Sign in success, update UI with the signed-in user's information
               Log.d(TAG, "signInWithEmail:success");

               Intent intent = new Intent(this, MainActivity.class);
               startActivity(intent);

            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInWithEmail:failure", task.getException());
                Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                        Toast.LENGTH_SHORT).show();
            }

            // ...
        }
    });

Затем в обратном вызове onCreate MainActivity вы можете дважды проверить, вошел ли пользователь в систему с помощью:

@Override
public void onCreate() {
    super.onCreate();
    // Check if user is signed in (non-null) and update UI accordingly.
    FirebaseUser currentUser = mAuth.getCurrentUser();
    if(currentUser != null) {
        updateUI(currentUser);
    } else {
        //intent back to login screen
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...