简体   繁体   中英

Authentication Problem when logging through facebook using firebase

After clicking on login button through facebook it successfully gets logged in but then it shows authentication error.It is unable to store the user in firebase.I am using this library implementation 'com.facebook.android:facebook-login:4.42.0' also i have tried using below library as it says in the documentation implementation 'com.facebook.android:facebook-android-sdk:[4,5)

I am unable to open new activity after login through facebook in handleFacebookAccessToken method the toast message prints and show the authentication error

Logcat

2019-04-26 11:28:09.091 29437-29437/com.sample.app.mysampleapp I/Choreographer: Skipped 3 frames!  The application may be doing too much work on its main thread.
2019-04-26 11:28:09.098 29437-29486/com.sample.app.mysampleapp V/FA: Recording user engagement, ms: 8070
2019-04-26 11:28:09.100 29437-29486/com.sample.app.mysampleapp V/FA: Connecting to remote service
2019-04-26 11:28:09.104 29437-29486/com.sample.app.mysampleapp V/FA: Activity paused, time: 1239980723
2019-04-26 11:28:09.115 29437-29486/com.sample.app.mysampleapp D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=8070, firebase_screen_class(_sc)=LoginActivity, firebase_screen_id(_si)=-7653191600035363065}]
2019-04-26 11:28:09.122 29437-29437/com.sample.app.mysampleapp V/FA: onActivityCreated
2019-04-26 11:28:09.146 29437-29486/com.sample.app.mysampleapp V/FA: Connection attempt already in progress
2019-04-26 11:28:09.161 29437-29486/com.sample.app.mysampleapp D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=LoginActivity, firebase_previous_id(_pi)=-7653191600035363065, firebase_screen_class(_sc)=FacebookActivity, firebase_screen_id(_si)=-7653191600035363064}]
2019-04-26 11:28:09.188 29437-29486/com.sample.app.mysampleapp V/FA: Connection attempt already in progress
2019-04-26 11:28:09.188 29437-29486/com.sample.app.mysampleapp V/FA: Connection attempt already in progress
2019-04-26 11:28:09.189 29437-29486/com.sample.app.mysampleapp V/FA: Activity resumed, time: 1239980786
2019-04-26 11:28:09.239 29437-29437/com.sample.app.mysampleapp I/Choreographer: Skipped 1 frames!  The application may be doing too much work on its main thread.
2019-04-26 11:28:09.240 29437-29486/com.sample.app.mysampleapp D/FA: Connected to remote service
2019-04-26 11:28:09.241 29437-29486/com.sample.app.mysampleapp V/FA: Processing queued up service tasks: 4
2019-04-26 11:28:09.704 29437-29437/com.sample.app.mysampleapp D/com.facebook.FacebookSdk: getGraphApiVersion: v3.2
2019-04-26 11:28:09.706 29437-29437/com.sample.app.mysampleapp D/com.facebook.GraphRequestAsyncTask: execute async task: {RequestAsyncTask:  connection: null, requests: [{Request:  accessToken: null, graphPath: me, graphObject: null, httpMethod: GET, parameters: Bundle[{access_token=EAAcpUSrdafkBAHlfFAh65ogbWq8grz7kZAVSr7SR8eRHOY3hHCUYWKMae8DxH0ocmf7IoobMBvlL0dtbBEKLeGZBeoOLvjNwlDxmXNjb3PnyosVHf8Xzf2GYNc9qoS1dV0bUJzLiNglpkg4OThnFJU1tbvloG8wRlsyOKqLlqyY2vrxbZB6sLZA2A9SHGOhZAFX6QjEz0VuEHVnZBBF9ikwWasoHdlSHcZD, fields=id,name,first_name,middle_name,last_name,link}]}]}
2019-04-26 11:28:09.729 29437-29512/com.sample.app.mysampleapp D/libc-netbsd: [getaddrinfo]:  hostname=graph.facebook.com;  servname=(null);  app_pid=29437;  app_uid=10257;  ai_flags=1024;  ai_family=0; ai_socktype=1 from prox result 0
2019-04-26 11:28:10.476 29437-29486/com.sample.app.mysampleapp V/FA: Recording user engagement, ms: 1318
2019-04-26 11:28:10.486 29437-29486/com.sample.app.mysampleapp V/FA: Activity paused, time: 1239982103
2019-04-26 11:28:10.495 29437-29486/com.sample.app.mysampleapp D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=1318, firebase_screen_class(_sc)=FacebookActivity, firebase_screen_id(_si)=-7653191600035363064}]
2019-04-26 11:28:10.522 29437-29437/com.sample.app.mysampleapp I/Choreographer: Skipped 1 frames!  The application may be doing too much work on its main thread.
2019-04-26 11:28:10.553 29437-29437/com.sample.app.mysampleapp I/loginactivity: HelloEAAcpUSrdafkBAHlfFAh65ogbWq8grz7kZAVSr7SR8eRHOY3hHCUYWKMae8DxH0ocmf7IoobMBvlL0dtbBEKLeGZBeoOLvjNwlDxmXNjb3PnyosVHf8Xzf2GYNc9qoS1dV0bUJzLiNglpkg4OThnFJU1tbvloG8wRlsyOKqLlqyY2vrxbZB6sLZA2A9SHGOhZAFX6QjEz0VuEHVnZBBF9ikwWasoHdlSHcZD
2019-04-26 11:28:10.554 29437-29437/com.sample.app.mysampleapp D/loginactivity: handleFacebookAccessToken:{AccessToken token:EAAcpUSrdafkBAHlfFAh65ogbWq8grz7kZAVSr7SR8eRHOY3hHCUYWKMae8DxH0ocmf7IoobMBvlL0dtbBEKLeGZBeoOLvjNwlDxmXNjb3PnyosVHf8Xzf2GYNc9qoS1dV0bUJzLiNglpkg4OThnFJU1tbvloG8wRlsyOKqLlqyY2vrxbZB6sLZA2A9SHGOhZAFX6QjEz0VuEHVnZBBF9ikwWasoHdlSHcZD permissions:[public_profile, email]}
2019-04-26 11:28:10.567 29437-29437/com.sample.app.mysampleapp W/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@e41d04e
2019-04-26 11:28:10.618 29437-29437/com.sample.app.mysampleapp D/AccessTokenTracker: AccessTokenChanged
2019-04-26 11:28:10.619 29437-29437/com.sample.app.mysampleapp I/Choreographer: Skipped 1 frames!  The application may be doing too much work on its main thread.
2019-04-26 11:28:10.630 29437-29486/com.sample.app.mysampleapp D/FA: Logging event (FE): screen_view(_vs), Bundle[{firebase_event_origin(_o)=auto, firebase_previous_class(_pc)=FacebookActivity, firebase_previous_id(_pi)=-7653191600035363064, firebase_screen_class(_sc)=LoginActivity, firebase_screen_id(_si)=-7653191600035363065}]
2019-04-26 11:28:10.720 29437-29486/com.sample.app.mysampleapp V/FA: Activity resumed, time: 1239982236
2019-04-26 11:28:12.865 29437-29524/com.sample.app.mysampleapp D/com.facebook.FacebookSdk: getGraphApiVersion: v3.2
2019-04-26 11:28:12.986 29437-29524/com.sample.app.mysampleapp D/libc-netbsd: [getaddrinfo]:  hostname=graph.facebook.com;  servname=(null);  app_pid=29437;  app_uid=10257;  ai_flags=1024;  ai_family=0; ai_socktype=1 from prox result 0
2019-04-26 11:28:13.533 29437-29437/com.sample.app.mysampleapp I/Choreographer: Skipped 1 frames!  The application may be doing too much work on its main thread.
2019-04-26 11:28:15.722 29437-29486/com.sample.app.mysampleapp V/FA: Inactivity, disconnecting from the service

LoginActivity.java

public class LoginActivity extends AppCompatActivity {
    ImageView imgV_close;
    TextView txtv_new_user,txtv_fb_signin,txtv_google_signin;
    Button btn_login;
    EditText input_email_login,input_password_login;

    private static final int RC_SIGN_IN = 234;
    private static final String TAG = "loginactivity";
    GoogleSignInClient mGoogleSignInClient;
    GoogleApiClient mGoogleApiClient;
    FirebaseAuth mAuth;


    private FirebaseAuth.AuthStateListener mAuthListener;
    LoginButton loginButton;
    CallbackManager mCallbackManager;
    String name;


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

        //first we intialized the FirebaseAuth object
        mAuth = FirebaseAuth.getInstance();
        mCallbackManager = CallbackManager.Factory.create();


        input_email_login=findViewById(R.id.input_email_login);
        input_password_login=findViewById(R.id.input_password_login);
        loginButton = (LoginButton) findViewById(R.id.login_button_fb);
        txtv_google_signin=findViewById(R.id.txtv_google_signin);
        imgV_close=findViewById(R.id.imgV_close);
        txtv_new_user=findViewById(R.id.txtv_new_user);
        btn_login=findViewById(R.id.btn_login);

        //Then we need a GoogleSignInOptions object
        //And we need to build it as below
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

        //Then we will get the GoogleSignInClient object from GoogleSignIn class
        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);



     imgV_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LoginActivity.this.finish();
            }
        });

        txtv_new_user.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent sign_up=new Intent(LoginActivity.this,SignupActivity.class);
                startActivity(sign_up);
            }
        });

        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                userLogin();
            }
        });

        txtv_google_signin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                googleSignIn();
            }
        });
        loginButton.setReadPermissions("email", "public_profile");
        loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

                Log.i(TAG,"Hello"+loginResult.getAccessToken().getToken());
                //  Toast.makeText(MainActivity.this, "Token:"+loginResult.getAccessToken(), Toast.LENGTH_SHORT).show();

                handleFacebookAccessToken(loginResult.getAccessToken());
            }

            @Override
            public void onCancel() {
                Log.d(TAG, "facebook:onCancel");
            }

            @Override
            public void onError(FacebookException error) {
                Log.d(TAG, "facebook:onError", error);
            }
        });

        mAuthListener = new FirebaseAuth.AuthStateListener(){


            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                FirebaseUser user = firebaseAuth.getCurrentUser();

                if (user!=null){
                    name = user.getDisplayName();
                    Toast.makeText(LoginActivity.this,""+user.getDisplayName(),Toast.LENGTH_LONG).show();
                }else {
                    Toast.makeText(LoginActivity.this,"something went wrong",Toast.LENGTH_LONG).show();
                }


            }
        };

    }

    private void handleFacebookAccessToken(AccessToken token) {
        Log.d(TAG, "handleFacebookAccessToken:" + token);

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

                        if (task.isSuccessful()) {
                            Log.w(TAG, "signInWithCredential", task.getException());
                            Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_SHORT).show();
                            Intent intent = new Intent(LoginActivity.this, DeleteActivity.class);
                            startActivity(intent);
                        }else{
                            Toast.makeText(LoginActivity.this, "Authentication error",
                                    Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }


    @Override
    protected void onStart() {
        super.onStart();
        //if the user is already signed in
        //we will close this activity
        //and take the user to profile activity
        if (mAuth.getCurrentUser() != null) {
            finish();
            startActivity(new Intent(this, MyAccountActivity.class));
        }
    }

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

        // Pass the activity result back to the Facebook SDK


        //if the requestCode is the Google Sign In code that we defined at starting
        if (requestCode == RC_SIGN_IN) {

            //Getting the GoogleSignIn Task
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                //Google Sign In was successful, authenticate with Firebase
                GoogleSignInAccount account = task.getResult(ApiException.class);

                //authenticating with firebase
                firebaseAuthWithGoogle(account);
            } catch (ApiException e) {
                Toast.makeText(LoginActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();

            }
        }
        else{
            mCallbackManager.onActivityResult(requestCode, resultCode, data);
        }
    }

    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
        Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());

        //getting the auth credential
        AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);

        //Now using firebase we are signing in the user here
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            Log.d(TAG, "signInWithCredential:success");
                            FirebaseUser user = mAuth.getCurrentUser();


                            Intent intent = new Intent(LoginActivity.this, MyAccountActivity.class);
                            startActivity(intent);
                            LoginActivity.this.finish();



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

                        }

                        // ...
                    }
                });
    }


    //this method is called on click
    private void googleSignIn() {
        //getting the google signin intent
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();

        /* Intent signInIntent=Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
        mGoogleApiClient.clearDefaultAccountAndReconnect();*/

        //starting the activity for result
        startActivityForResult(signInIntent, RC_SIGN_IN);

    }



    private void userLogin() {

        final String username = input_email_login.getText().toString().trim();
        final String password = input_password_login.getText().toString().trim();

        if (TextUtils.isEmpty(username)) {
            input_email_login.setError("Please enter your email or password");
            input_email_login.requestFocus();
            return;
        }

        if (TextUtils.isEmpty(password)) {
            input_password_login.setError("Please enter your password");
            input_password_login.requestFocus();
            return;
        }
    }

}

您是否已将“developers.facebook”中的APP ID添加到您的firebase项目身份验证中。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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