GoogleSignInOptions中的requestIdToken获取空指针异常

时间:2016-08-11 16:37:37

标签: android firebase-authentication google-signin

我正在尝试使用以下说明将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回调中获取用户名,电子邮件等,但令牌为空。

我确保我的网络控制台中的两个OAuth 2.0客户端ID与我在应用中使用的ID相匹配:

OAuth 2.0 client IDs in my web console

我还下载了google-services.json,新的更改并将其复制到我项目的“mobile”文件夹中。

google-services.json I downloaded from firebase console

我已尝试过以下链接中的所有答案,但没有解决我的问题。

请帮助!

链接:

  1. Google Sign-In requestIdToken returns null
  2. New Google sign in Android
  3. Error 12501 authenticating with google sign-in

4 个答案:

答案 0 :(得分:3)

我明白了。

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()方法中 现在它有效!

答案 1 :(得分:1)

抱歉,我没有足够的代表发表评论,但你可以做点什么吗

mSignInOpt = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                 .requestIdToken(getString(R.string.default_web_client_id))
                 .requestEmail()
                 .build();

它给出了有效的回复?或者它根本不起作用?

我会尝试查看this以获得更多帮助。

答案 2 :(得分:0)

您在build.gradle中缺少此行 申请插件:'com.google.gms.google-services'

答案 3 :(得分:0)

   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();