首页 > 解决方案 > handleFacebookAccessToken 对测试用户返回错误

问题描述

此代码适用于所有现实生活中的 Facedbook 测试人员,并且 mAuthNew.getCurrentUser() 返回有效用户。

但是使用 FAcedbook 生成的测试用户,使用 v8.0 创建 - user_friends、email、public_profile 权限,signInWithCredential 总是失败,并显示“提供的身份验证凭据格式错误或已过期..”

Profile profile = Profile.getCurrentProfile() 返回正确的配置文件。isLoggedIn 为真。

我可能遗漏了一些简单的东西,但大脑现在已经混乱了,只是看不到它。

问题是为什么/什么?

 private void doFBLogin() {
        if (FBuser == null) {
                LoginManager.getInstance().registerCallback(mCallBackManager, new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    Profile profile = Profile.getCurrentProfile();
                    Boolean hasExpired = AccessToken.getCurrentAccessToken().isExpired();
                    boolean isLoggedIn = AccessToken.getCurrentAccessToken() != null && !AccessToken.getCurrentAccessToken().isExpired();
                    //True for ALL logins
                    if (isLoggedIn) {
                        handleFacebookAccessToken(AccessToken.getCurrentAccessToken());
                    }
                }

               @Override
                public void onCancel() {
                    doFBLoginCB(-2, "Cancelled");
                }

                @Override
                public void onError(FacebookException exception) {
                    doFBLoginCB(-1, exception.getMessage());
                }
            });

            List<String> permissionNeeds = Arrays.asList("public_profile", "email", "user_friends");
            LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, permissionNeeds);
        } else {
            handleFacebookAccessToken(AccessToken.getCurrentAccessToken());
        }
    }
    
     private void handleFacebookAccessToken(AccessToken token) {
        AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
        mAuthNew.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success
                           
                           // Through here ONLY for all real life Facedbook Testers
                           
                            FBuser = mAuthNew.getCurrentUser();
                        } else {
                            if (task.getException().getMessage().contains("invalid access_token")) {
                               
                            } else if (task.getException().getMessage().contains("The supplied auth credential is malformed or has expired")) { 
                            // Through here for all  Facedbook generated Test Users profiles
                               
                            } else {
                               doFBLoginCB(-3, "Sign In failed");
                            }

                        }


                    }
                });

    }
    }

标签: androidfirebasefacebook

解决方案


推荐阅读