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

Ama*_*lie 8 android oauth google-authentication firebase google-signin

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

我正在尝试使用Firebase对使用Google登录的用户进行身份验证.因此,按照他们的指南,我已设置Google登录以获取OAuth令牌,然后使用该功能对Firebase进行身份验证.所以我按照他们在这里的指南中所描述的那样设置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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jam*_*els 3

你设置了吗R.string.server_client_id

  1. 打开API 控制台中的凭据页面。
  2. Web 应用程序类型客户端 ID 是后端服务器的 OAuth 2.0 客户端 ID。

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

继 SHA-1 之后,这是我看到的下一个绊脚石。