所以我现在已经搞乱了几天,我无法弄清楚它为什么不起作用。我真的希望有人可以帮助我。
我正在尝试使用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登录。有人可以告诉我我需要做些什么来使它工作吗?
答案 0 :(得分:2)
您是否设置了R.string.server_client_id
?
- 在API控制台中打开Credentials page。
- Web应用程序类型客户端ID是您的后端服务器的OAuth 2.0客户端ID。
醇>
在SHA-1之后,这是我见过的下一个绊脚石。