GoogleSignInResult使用Firebase在Android应用中返回DEVELOPER_ERROR

时间:2016-06-09 21:42:08

标签: android oauth firebase google-signin google-authentication

所以我现在已经搞乱了几天,我无法弄清楚它为什么不起作用。我真的希望有人可以帮助我。

我正在尝试使用Firebase对使用Google登录的用户进行身份验证。因此,按照他们的指南here,我已设置Google登录以获取OAuth令牌,然后使用该功能对Firebase进行身份验证。所以我按照他们在导游here中描述的那样设置Google,但就我而言。我从Google获取的OAuth令牌始终为null,结果代码为Status {statusCode = DEVELOPER_ERROR,resolution = null}。

到目前为止,我的活动看起来像这样:

public static final int RC_GOOGLE_LOGIN = 1;
private GoogleApiClient mGoogleApiClient;
final Context context = this;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Firebase.setAndroidContext(this);

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestIdToken(this.getResources().getString(R.string.server_client_id))
            .build();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this, this)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();

    SignInButton signInButton = (SignInButton) findViewById(R.id.googlebtn);
    signInButton.setSize(SignInButton.SIZE_WIDE);
    signInButton.setScopes(gso.getScopeArray());
    signInButton.setOnClickListener(this);

}

@Override
public void onClick (View v) {

    switch (v.getId()) {
        case R.id.googlebtn:
            signIn();
            break;
    }
}

private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_GOOGLE_LOGIN);
}

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

    if (requestCode == RC_GOOGLE_LOGIN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        handleSignInResult(result);
    }
}

private void handleSignInResult(GoogleSignInResult result) {
    if (result.isSuccess()) {
        // Signed in successfully, show authenticated UI.
        GoogleSignInAccount acct = result.getSignInAccount();

        String idToken = acct.getIdToken();
    }
}

我一直在谷歌上搜索一段时间,并认为我已经尝试过所有已经提出的建议。当然,我已经完成了指南中的所有内容,添加了依赖项(' com.google.android.gms:play-services-auth:8.4.0')并在开发人员控制台中创建了必要的客户端。

我还检查过(多次)我正在使用的服务器客户端ID是开发人员控制台中正确的服务器客户端ID,并且它与我的gradle文件和Manifest文件中的包名称相匹配。我已将google-services.json文件添加到我的/ app目录中,甚至重新生成它以确保它匹配。我还检查过SHA1键是否正确,它仍然会出现同样的错误。

如果我从Google登录选项中移除了requestIdToken,它可以正常工作,但这对我没有帮助,因为我无法使用Firebase登录。有人可以告诉我我需要做些什么来使它工作吗?

1 个答案:

答案 0 :(得分:2)

您是否设置了R.string.server_client_id

  
      
  1. 在API控制台中打开Credentials page
  2.   
  3. Web应用程序类型客户端ID是您的后端服务器的OAuth 2.0客户端ID。
  4.   

https://developers.google.com/identity/sign-in/android/start-integrating#get_your_backend_servers_oauth_20_client_id

在SHA-1之后,这是我见过的下一个绊脚石。