新的Google登录Android

Jam*_*mal 78 android google-play-services google-identity

我正在尝试使用新的Google Play服务8.3获取用户令牌ID,并且如我所述,我传递了服务器ID:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestIdToken(getString(R.string.server_client_id))
    .requestEmail()
    .build();
Run Code Online (Sandbox Code Playgroud)

但是我仍然得到如下结果:

{statusCode=unknown status code: 12501, resolution=null}
Run Code Online (Sandbox Code Playgroud)

并记录在这里 GoogleSignInStatusCodes

登录已被用户取消.即,用户取消了一些登录决议,例如,帐户选择或OAuth同意.

常数值:12501

这不是我的情况,因为我已经选择了一个帐户.任何想法可能是什么原因?

Kai*_*zie 112

我有完全相同的问题,我找到了解决方案.

如果您按照此处的文档操作:https: //developers.google.com/identity/sign-in/android/start-integrating

第一步告诉您创建配置文件(为您创建OAuth 2.0客户端ID并将其插入google-services.json)

然后,它再次说明了创建OAuth 2.0客户端ID,但这次它表示你必须为Web应用程序执行此操作

这是令人困惑的部分!(至少对我而言)因为我只是为Android OAuth创建了客户端ID,而没有为Web应用程序创建一个新的(我认为文档只是冗余或其他)

正如它所说的那样,只有这一个,你必须使用它作为方法requestIdTokenrequestServerAuthCode的参数.

忘记在此方法中使用Android OAuth ID,因为这样您将始终获得丑陋的状态代码响应12501.

我认为主要问题是文档对此有点混乱.或者也许是因为你必须创建两个OAuth ID这一事实有点奇怪.

因此,作为摘要,您需要两个OAuth ID,一个用于android,一个用于Web应用程序,您必须将每个ID设置在正确的位置.

  • @Kaizie当你说'**并且你必须把每个人都放在正确的地方**'你到底意味着什么?我终于没有在任何地方使用Android客户端ID. (7认同)
  • @josealfonsomora Android客户端密钥将进入google-services.json,并且需要在requestIdToken或requestServerAuthCode方法中设置Web应用程序密钥. (6认同)
  • 这应该是正确的答案,救了我半天头痛. (2认同)

Mas*_*ter 19

我正在努力解决这个问题并浪费了将近一周的时间.

这就是我的工作方式.

  1. 在AndroidStudio中导入项目
  2. 为项目创建调试密钥库.
  3. 使用debug keystore为项目创建SHA1签名.
  4. 使用SHA1签名,在Google Developer Console上注册Google Signin应用.
  5. 在那里生成一个Google配置文件.(放入Android Studio的app文件夹)
  6. 在Android项目中使用OAuth 2.0凭据中的Web客户端ID.
  7. 现在,从Android Studio,生成项目的调试版本(APK).
  8. 将设备挂载到系统中 - >复制此签名的APK调试版并安装它.

最后三个步骤6,7和8是您实际需要照顾的.如果您直接运行该项目,那么APK实际上并未使用调试密钥库进行签名,并且Google根本无法识别它.


Rad*_*iet 17

我有同样的问题,在研究解决方案之后,它恢复了server_client_id包含一些不正确的值,或者你的google_services.json没有包含oauth_client,其中client_id已在你的密钥库中注册.

requestIdToken(getString(R.string.server_client_id))
Run Code Online (Sandbox Code Playgroud)

R.string.server_client_id将OAuth 2.0客户端ID用于Web应用程序.Android的 OAuth客户端ID 在google_services.json中使用

通常我们使用2个密钥库,1个使用调试密钥库,1个使用签名密钥库进行发布.因此,如果我们想要在调试和发布模式下,请为Android注册OAuth客户端ID两次,1使用调试密钥库中的SHA1和来自已签名密钥库的1来发布.

我的google_services.json中的一个小例子

  "oauth_client": [
    {
      "client_id": "xxx-client-id.com",
      "client_type": 1,
      "android_info": {
        "package_name": "com.app.android",
        "certificate_hash": "xxxhash"
      }
    },
    {
      "client_id": "yyy.client-id.com",
      "client_type": 1,
      "android_info": {
        "package_name": "com.app.android",
        "certificate_hash": "yyyhash"
      }
    }
  ],
Run Code Online (Sandbox Code Playgroud)


she*_*kar 15

我得到了同样的问题,这是因为我创建了Android应用程序类型的客户端ID

相反,我删除了它并创建了Web应用程序类型的客户端ID,我摆脱了这个问题.


Ram*_*les 8

只是弄清楚如何解决这个...我在尝试运行我的应用程序的调试版本时遇到此错误...要解决此问题,请在开发者控制台和google-services上为调试应用程序添加凭据以.json.

这为我修好了!


Maz*_*hry 8

我有同样的问题,我解决了以下解决方案:

  1. 此处所述创建配置文件(google-services.json)并放在/ app项目目录中
  2. (如其他答案中所述)使用Web应用程序客户端ID作为requestIdToken方法.
  3. [我的主要问题]如果您在以下调试模式下工作,请为您的应用签名:
 signingConfigs {
    release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
    }
 }

 buildTypes {
     release {
         ...
     }
     debug {
         ...
         signingConfig signingConfigs.release
     }
 }
Run Code Online (Sandbox Code Playgroud)


小智 2

我遇到了同样的问题,我注意到当我server_client_id包含一些不正确的值时,返回了 12501 代码。

由于没有详细的消息,并且该错误代码的文档相当差,我不知道您的问题是否与我的问题有相同的原因。


我的应用程序基于此示例中的 Android 代码(IdTokenActivity 类)。为了使其工作,我还需要将Google 登录集成到我的应用程序中:

  • 生成 json 配置文件并启用 Google 登录
  • 将 Google 插件和依赖项添加到我的 gradle 文件中
  • 为此应用程序创建了 OAuth 客户端 ID 并将其保存在我的项目中server_client_id

  • 我不认为servier_id不正确。我尝试了不同的。 (2认同)