我正在尝试使用新的Google play服务8.3获取用户令牌ID,并根据文档传递服务器ID:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.server_client_id))
.requestEmail()
.build();
但我仍然没有成功的结果,如下所示:
{statusCode=unknown status code: 12501, resolution=null}
并在此处记录了GoogleSignInStatusCodes
用户已取消登录。例如,用户取消了一些登录解决方案,例如帐户挑选或OAuth同意。
常量值: 12501
这不是我的情况,因为我已经选择了一个帐户。你知道原因是什么吗?
发布于 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设置在正确的位置。
发布于 2016-06-06 20:49:11
我在这件事上苦苦挣扎,几乎浪费了一个星期。
这就是我让它工作的方式。
AndroidStudio
,然后对系统中的设备进行
最后三个步骤6、7和8,是您实际需要注意的。如果你直接运行项目,那么实际上并没有用调试密钥库签名,谷歌根本不会识别它。
发布于 2015-11-16 01:23:49
我也遇到过同样的问题,在研究解决方案后,发现server_client_id包含了一些不正确的值,或者您的google_services.json没有包含注册到您的密钥库的oauth_client和client_id。
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中的一个小示例
"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"
}
}
],
https://stackoverflow.com/questions/33583326
复制相似问题