Firebase - Facebook информация не отображается при первом входе в систему - PullRequest
0 голосов
/ 23 апреля 2020

Поэтому, когда я загружаю свое приложение в эмуляторе в студии android и выбираю опцию «Войти через Facebook» или «Войти через электронную почту», тогда я не вижу информацию о пользователе, отображаемую на моем mainactivity . Информация реализована в firebase auth, и просматривается только второе время входа в систему? Это происходит только после переустановки приложения и первого входа в систему.

public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
    private static int RC_SIGN_IN = 1337;
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    FirebaseFirestore firebaseFirestore= FirebaseFirestore.getInstance();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        List<AuthUI.IdpConfig> providers = Arrays.asList(
                new AuthUI.IdpConfig.EmailBuilder().build(),
                new AuthUI.IdpConfig.FacebookBuilder().build());

        startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().setLogo(R.drawable.menolonely).setAvailableProviders(providers).build(), RC_SIGN_IN);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RC_SIGN_IN){
            IdpResponse response = IdpResponse.fromResultIntent(data);
            if(resultCode == RESULT_OK){
                if (user != null) {
                    Log.d(TAG, user.getUid());
                    ((TextView)findViewById(R.id.userId)).setText(user.getUid());
                    DocumentReference documentReference = firebaseFirestore.collection("users").document(user.getUid());
                    Map<String, Object> userMap = new HashMap<>();
                    userMap.put("fname", user.getDisplayName());
                    userMap.put("email", user.getEmail());
                    documentReference.set(userMap).addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            Log.d(TAG, "onSuccess: user profile is created for "+ user.getUid());
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.d(TAG, "onFailure: "+ e.toString());
                        }
                    });
                    for (UserInfo userInfo : user.getProviderData()) {
                        if (userInfo.getProviderId().equals("facebook.com")) {
                            Log.d("TAG", "User is signed in with Facebook");
                            String photoUrl = user.getPhotoUrl().toString();
                            photoUrl = photoUrl + "?height=500";
                            Picasso.with(this).load(photoUrl).into((ImageView)findViewById(R.id.picture));
                        }else{
                            ImageView imV = findViewById(R.id.picture);
                            imV.setImageResource(R.drawable.pbstd);
                        }
                    }
                }
            }else{
                Log.d(TAG, response.getError().getMessage());
            }
        }
    }
}

Не удается найти проблему?

1. EDIT : выглядит как protected void onActivityResult (int requestCode, int resultCode, @Nullable Intent data) не запускается в первый раз после установки.

2. EDIT : Таким образом, он запускает OnActivityResult , но пользователь null , поэтому оператор if (user! = Null) не выполняется. Так FirebaseUser user = FirebaseAuth.getInstance (). GetCurrentUser (); возвращает ноль в первый раз.

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ НА МОЙ ВОПРОС:

Так что FirebaseAuth.getInstance (). GetCurrentUser () возвращает значение null при первой установке приложения на эмуляторе, в результате оператор if не запустится. Если я закрою и открою свое приложение, User = FirebaseAuth.getInstance (). GetCurrentUser () больше не будет иметь значение null, и все будет работать. Так почему же это так?

Нашли решение, но это нормально?:

Итак, я переехал FirebaseUser user = FirebaseAuth.getInstance (). GetCurrentUser ( ); , прямо перед оператором if - if (user! = Null) , и это решает мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...