GoogleAuthProvider.getCredential方法对我不起作用

时间:2017-04-04 14:26:40

标签: android firebase firebase-authentication access-token google-signin

我正在尝试关注this tutorial

我创建了这个firebaseAuthWithGoogle函数:

 public void firebaseAuthWithGoogle(Activity context,FirebaseAuth mAuth, GoogleSignInAccount acct) {
    Log.i(TAG, "firebaseAuthWithGoogle:" + acct.getId());

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(context, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    Log.i(TAG, "firebase signInWithCredential:onComplete:" + task.isSuccessful());

                    // If sign in fails, display a message to the user. If sign in succeeds
                    // the auth state listener will be notified and logic to handle the
                    // signed in user can be handled in the listener.
                    if (!task.isSuccessful()) {
                        Log.i(TAG, "firebase signInWithCredential" + task.getException());
                    }
                    // ...
                }
            });
}

我从这里打来电话:

final GoogleSignInAccount acct = result.getSignInAccount();
        AsyncTask asyncTask = new AsyncTask() {
            @Override
            protected Object doInBackground(Object[] params) {
                try{
                    String scope =  "oauth2:" + Scopes.PROFILE;
                    Account account = new Account(acct.getEmail(), "com.google");
                    final String token  = GoogleAuthUtil.getToken(PSSignInFlowActivity.this, account, scope);                       PSSocialService.getInstance().firebaseAuthWithGoogle(PSSignInFlowActivity.this, PSApplicationClass.getInstance().mAuth, acct);
                }catch (Exception e){
                    Log.e("","firebase error trying to get client secret : " + e.getMessage());
                }
                return null;
            }
        };
        asyncTask.execute();

我的idToken是:firebaseAuthWithGoogle:1024xxxxxxxxxxxxxx956(所以它不是空的,添加它可能我也没有发送我也支持的内容吗?)

但是当我调试时,我收到此错误: Must specify an idToken or an accessToken.

我做错了什么?他们在教程中使用相同的逻辑 PS:如果重要的话我在compile 'com.google.firebase:firebase-auth:10.2.0'

编辑:我注意到acct.getIdToken()返回null,为什么会这样? GoogleSignInAccount不应该有idToken吗? 我正在退出acct.getId(),这是我写的上部的1024xxxxxxxxxxxxx956。

EDIT2:我在我的GSO中添加了这个选项:

 .requestIdToken(serverID)

现在我得到了idToken,但我得到了回复:

  04-05 10:34:16.388: I/PSSocialService(6285): firebase signInWithCredentialcom.google.firebase.FirebaseException: An internal error has occurred. [ Invalid Idp Response ]

serverID是:264xxxxxxxxxx27.apps.googleusercontent.com 这是我应该使用的正确值吗? 在教程中,他们使用:

 .requestIdToken(getString(R.string.default_web_client_id))

但是我试过了,它崩溃了,因为它说我需要使用相同的clientID。 我对.requestServerAuthCode(serverID)使用serverID,我猜这就是为什么

1 个答案:

答案 0 :(得分:0)

在firebase控制台中,对于Authentification / Providers / Google,需要添加所有外部cliend ID,以便将它们列入白名单。这就是为什么它对我不起作用