我正在整合Google登录Android,我希望将id_token返回,以便我可以通过我的服务器进行身份验证。我按照https://developers.google.com/identity/sign-in/android/backend-auth
中的所有步骤进行了操作如果我仅请求requestEmail()
,那么我将收回个人资料信息,但如果我添加.requestIdToken(getString(R.string.server_client_id))
,则result.isSuccess()
为假,我没有收到任何帐户信息。有什么想法吗?
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestIdToken(getString(R.string.server_client_id))
.build();
onActivityResult:
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
GoogleSignInAccount acct = result.getSignInAccount();
String idToken = acct.getIdToken();
mIdTokenTextView.setText("ID Token: " + idToken);
// TODO(user): send token to server and validate server-side
} else {
mIdTokenTextView.setText("ID Token: null");
}
如果我尝试在"结果"上调用任何方法然后我得到一个Null指针错误......
java.lang.RuntimeException:将结果ResultInfo {who = null,request = 9001,result = 0,data = Intent {(has extras)}}传递给activity {com.test.LoginActivity}:java.lang。的NullPointerException
答案 0 :(得分:4)
解决!
所以在经过6个小时的打破之后,发现了这个问题。显然,当您使用SSH1创建config.json时,Google会自动创建与此项目关联的Web OAuth2密钥。我注意到谷歌创建了3个同名项目(一个用于firebase,一个用于Web,另一个用于不确定)
因此,抓住与同一Android项目链接的Web客户端ID。哦谷歌!
答案 1 :(得分:0)
我在研究了这个问题后发现,结果是因为抛出空指针Exception
活动清单中的android:launchMode="singleInstance"
。
因此,请确保将launchmode更改为'singleTop',或者不要为您的活动提供任何启动模式,例如:signinActivity;