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

Firebase Google 登录开发人员错误

在 Firebase 登录上实施 Smart Lock 密码

python中的RE模块

re (Python) 中的俄语符号