GoogleSignInOptions 中的 requestIdToken 获取空指针异常
Posted
技术标签:
【中文标题】GoogleSignInOptions 中的 requestIdToken 获取空指针异常【英文标题】:requestIdToken in GoogleSignInOptions gets null pointer exception 【发布时间】:2016-12-18 12:26:00 【问题描述】:我正在尝试使用以下说明将 google 登录添加到我的应用中: https://developers.google.com/identity/sign-in/android/start-integrating
在我的 signInActivity 中,requestIdToken() 出现空指针异常 在命令中
mSignInOpt = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.build();
当我在没有 requestIdToken() 的情况下使用此命令时,它运行良好,我在 onActivityResult 回调中获取用户名、电子邮件等,但令牌为空。
我确保我的 Web 控制台中的两个 OAuth 2.0 客户端 ID 都与我在应用中使用的 ID 相匹配:
我还下载了新更改的 google-services.json 并将其复制到项目的“移动”文件夹中。
我已经尝试了以下链接中的所有答案,但没有解决我的问题。
请帮忙!
链接:
-
Google Sign-In requestIdToken returns null
New Google sign in Android
Error 12501 authenticating with google sign-in
【问题讨论】:
【参考方案1】:对不起,我没有足够的代表发表评论,但你能做类似的事情
mSignInOpt = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
并且它给出了有效的响应?还是根本不起作用?
我会尝试查看this 以获得更多帮助。
【讨论】:
我试过了。我在 .requestIdToken(getString(R.string.default_web_client_id)) 上得到了同样的异常 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestProfile() .requestEmail() .requestIdToken(getString(R.string.default_web_client_id)) .build();这就是我添加的方式,效果很好【参考方案2】:我想通了。
mSignInOpt = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.build();
在OnCreate()
方法之外,这意味着 mSignInOpt 是该活动的全局成员,并且在创建活动时进行配置。
由于某种原因,.requestIdToken(getString(R.string.default_web_client_id))
在这种情况下不能被调用(没有 requestIdToken() 它可以正常工作)。
为了修复错误,我将那几行代码移到 OnCreate()
方法中
现在它可以工作了!
【讨论】:
【参考方案3】:您在 build.gradle 中缺少这一行 应用插件:'com.google.gms.google-services'
【讨论】:
【参考方案4】: googleSignInButton = findViewById(R.id.sign_in_button);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
【讨论】:
说明和解释同样是一个好的答案的一部分。以上是关于GoogleSignInOptions 中的 requestIdToken 获取空指针异常的主要内容,如果未能解决你的问题,请参考以下文章
将 GoogleSignInOptions.requestScopes() 用于 Gmail API 时如何定义范围?
无法解析符号 default_web_client_id GoogleSignInOptions Android Firebase