首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android中的新Google登录

Android中的新Google登录
EN

Stack Overflow用户
提问于 2015-11-07 21:34:29
回答 32查看 53.7K关注 0票数 79

我正在尝试使用新的Google play服务8.3获取用户令牌ID,并根据文档传递服务器ID:

代码语言:javascript
复制
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestIdToken(getString(R.string.server_client_id))
    .requestEmail()
    .build();

但我仍然没有成功的结果,如下所示:

代码语言:javascript
复制
{statusCode=unknown status code: 12501, resolution=null}

并在此处记录了GoogleSignInStatusCodes

用户已取消登录。例如,用户取消了一些登录解决方案,例如帐户挑选或OAuth同意。

常量值: 12501

这不是我的情况,因为我已经选择了一个帐户。你知道原因是什么吗?

EN

回答 32

Stack Overflow用户

发布于 2015-11-13 17:08:40

我遇到了完全相同的问题,我已经找到了解决方案。

如果您遵循此处提供的文档:https://developers.google.com/identity/sign-in/android/start-integrating

第一步是创建配置文件(它为您创建一个OAuth 2.0客户机ID并将其插入到google-services.json文件中)

然后,它再次提到要创建Web2.0客户机ID,但这一次它说您必须为 OAuth应用程序执行此操作

这就是令人困惑的部分!(至少对我来说是这样),因为我只是采用了为android OAuth创建的客户端id,而不是为Web应用程序创建一个新的客户端id(我认为文档只是多余的或者别的什么)

正如它所说的,它就是这个,而且只有这个才是您必须用作requestIdToken或requestServerAuthCode方法的参数的那个。

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

我认为主要的问题是文档对此有点混乱。或者可能是因为您必须创建两个OAuth is这一事实有点奇怪。

总之,您需要两个OAuth ID,一个用于安卓,另一个用于web应用程序,并且您必须将每个ID设置在正确的位置。

票数 115
EN

Stack Overflow用户

发布于 2016-06-06 20:49:11

我在这件事上苦苦挣扎,几乎浪费了一个星期。

这就是我让它工作的方式。

AndroidStudio

  • Create调试密钥库中的project.

  • Create keystore.

  • Using导入项目对于使用debug Console.

  • Generate Project.

  • Now,签名的项目,请在 Developer Console.
  1. Generate a Google配置文件中注册您的应用程序以进行SHA1登录。(放在安卓工作室的应用程序文件夹中)
  2. 在安卓Project.
  3. Now,中使用来自
  4. 2.0凭据的OAuth客户端ID,生成项目的调试版本( APK )。复制此签名的调试版本的APK并安装it.

,然后对系统中的设备进行

  • Mount。

最后三个步骤6、7和8,是您实际需要注意的。如果你直接运行项目,那么实际上并没有用调试密钥库签名,谷歌根本不会识别它。

票数 20
EN

Stack Overflow用户

发布于 2015-11-16 01:23:49

我也遇到过同样的问题,在研究解决方案后,发现server_client_id包含了一些不正确的值,或者您的google_services.json没有包含注册到您的密钥库的oauth_client和client_id。

代码语言:javascript
复制
requestIdToken(getString(R.string.server_client_id))

R.string.server_client_id将OAuth 2.0客户端ID用于网络应用程序。和安卓在google_services.json中使用的OAuth客户端ID

通常我们使用2个keystore,1个使用debug keystore,1个使用签名keystore进行发布。因此,如果我们想在调试和发布模式下需要,为安卓注册两次OAuth客户端ID,一次使用调试密钥库中的SHA1,另一次使用签名密钥库中的发布。

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

代码语言:javascript
复制
  "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"
      }
    }
  ],
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33583326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档