简体   繁体   English

Firebase登录无法在较低的Android版本上运行

[英]Firebase SignIn not working on lower android versions

So i have integrated Google and Facebook SignIn in my android app using firebase, and so far its working great on higher android versions like 9.0 (android P), 8.0 (android oreo) and 7.0 (android nogut) but are not working on lower android devices like android kitkat (4.4) , lollipop (5.0) etc. 所以我已经使用firebase将Google和Facebook SignIn集成到了我的Android应用中,到目前为止,它在9.0(android P),8.0(android oreo)和7.0(android nogut)等较高的android版本上都可以正常工作,但在较低的android上却无法使用像android kitkat(4.4),棒棒糖(5.0)等设备。

I don't know what's wrong, also its not showing any logs,absolutely nothing. 我不知道怎么了,也没有显示任何日志,绝对没有。 I have also released my app in the play store, but later came to know that its not working on some devices. 我还在Play商店中发布了我的应用程序,但后来知道它在某些设备上不起作用。 Also i have already added the release SHA1 key on the firebase console. 另外,我已经在firebase控制台上添加了版本SHA1密钥。

Here is how i implemented the login, 这是我实施登录的方式,

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

        // Pass the activity result back to the Facebook SDK
        mCallbackManager.onActivityResult(requestCode, resultCode, data);

        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == G_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                GoogleSignInAccount account = task.getResult(ApiException.class);
                firebaseAuthWithGoogle(Objects.requireNonNull(account));
            } catch (ApiException e) {
                Tools.createSnackBar(LoginActivity.this,"Google sign in failed! " + e.getLocalizedMessage(),Snackbar.LENGTH_SHORT).show();
                Log.d(TAG, e.getLocalizedMessage());
                googleBtn.setEnabled(true);
                pb.hide();
            }
        }
    }






 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);


        googleBtn = findViewById(R.id.google_btn);
        facebookBtn =   findViewById(R.id.facebook_btn);
        pb = findViewById(R.id.pb);
        pb.hide();

        mAuth = FirebaseAuth.getInstance();
        functions = new FirebaseFunctions(LoginActivity.this);


        //Google SignIn
        final GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.clientId))
                .requestEmail()
                .build();
        final GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

        googleBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                googleBtn.setEnabled(false);
                pb.show();
                Intent signInIntent = mGoogleSignInClient.getSignInIntent();
                startActivityForResult(signInIntent, G_SIGN_IN);
            }
        });



        //Facebook SignIn
        mCallbackManager = CallbackManager.Factory.create();
        facebookBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                final LoginManager loginManager = LoginManager.getInstance();
                loginManager.logInWithReadPermissions(LoginActivity.this, Arrays.asList(EMAIL, PROFILE));
                facebookBtn.setEnabled(false);

                loginManager.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        handleFacebookSignIn(loginResult.getAccessToken());
                    }

                    @Override
                    public void onCancel() {
                        Tools.createSnackBar(LoginActivity.this,"Login cancelled",Snackbar.LENGTH_SHORT).show();
                        facebookBtn.setClickable(true);
                    }

                    @Override
                    public void onError(FacebookException error) {
                        Tools.createSnackBar(LoginActivity.this,error.getMessage(),Snackbar.LENGTH_SHORT).show();
                        Log.d(TAG,error.getLocalizedMessage());
                        facebookBtn.setClickable(true);
                    }
                });
            }
        });

    }







  private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {

        AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {

                            FirebaseUser user = mAuth.getCurrentUser();
                            //Add new user
                            if (user != null) {
                                functions.addNewUser(user.getDisplayName(),user.getEmail(), Objects.requireNonNull(user.getPhotoUrl()).toString(), false, pb);
                            }

                        } else {
                            Tools.createSnackBar(LoginActivity.this,"Authentication Failed " + task.getException(),Snackbar.LENGTH_SHORT).show();
                            if(task.getException()!=null) {
                                Log.e(TAG, task.getException().getLocalizedMessage());
                            }
                            googleBtn.setEnabled(true);
                            pb.hide();
                        }

                    }
                });
    }





    private void handleFacebookSignIn(AccessToken accessToken) {

        pb.show();
        final AuthCredential credential = FacebookAuthProvider.getCredential(accessToken.getToken());
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {

                            FirebaseUser user = mAuth.getCurrentUser();
                            //Add new user
                            if (user != null) {
                                String email = user.getEmail();
                                String photoUrl = Objects.requireNonNull(user.getPhotoUrl()).toString();
                                photoUrl = photoUrl + "?height=500";
                                if(email==null){ email = "Email not found";}

                                functions.addNewUser(user.getDisplayName(),email, photoUrl, false, pb);
                            }

                        } else {
                            Tools.createSnackBar(LoginActivity.this,"Authentication failed "+task.getException(),Snackbar.LENGTH_SHORT).show();
                            if(task.getException()!=null) {
                                Log.e(TAG, task.getException().getLocalizedMessage());
                            }
                            facebookBtn.setEnabled(true);
                            pb.hide();
                        }
                    }
                });
    }

So i finally made it work, the issue was not related to firebase or authentication at all. 所以我终于使它工作了,这个问题根本与firebase或身份验证无关。 Actually in the manifest my activity was set to singleInstance = "true" and noHistory = "true", So after i removed them, it worked fine. 实际上,在清单中,我的活动设置为singleInstance =“ true”和noHistory =“ true”,因此在删除它们后,它可以正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM