为什么我部署的 Android 应用无法登录 Google Play 服务,而我的调试应用却可以?

Joh*_*rry 0 android login google-play-games

我的 Android 应用登录 Google Play 游戏服务似乎无声无息地失败:在登录活动中选择用户后,onActivityResult()收到的resultCode值为 10002。Android API 将这些消息存放在 logcat 中:

W/SignInActivity(16216): onSignInFailed()...
W/SignInActivity(16216): Sign in failed during 6
W/SignInActivity(16216): ==> Returning non-OK result: 10002
Run Code Online (Sandbox Code Playgroud)

而我放置的 Log.w() 命令onActivityResult()存放这些消息:

W/Main activity(16167): In activity result with code 10002
W/Main activity(16167): activity result requests sign in
W/Main activity(16167): unsolved resolution
Run Code Online (Sandbox Code Playgroud)

奇怪的是它曾经可以工作,当我尝试从Android Studio调试它每次登录都完美无缺,所以我什至无法调试应用程序!

我可以从哪里开始调试这个?

Joh*_*rry 6

由于出现相同错误但原因完全不同的问题,我找到了解决方案,但这种情况不同,因为它是由激活 Google Play Developer Console 中的功能引起的。

这个特定错误的关键是:

  1. 生产应用程序曾经可以正常工作,但现在不能了。
  2. 调试版本仍然可以正常工作。

早在 5 月,谷歌就推出了一项功能,他们可以在 Play 商店中签署您的应用程序。我原来的应用程序是用 Android Studio 生成的证书签名的,但谷歌似乎对他们的签名很感兴趣,所以我没有仔细阅读细则就切换到了那个。其结果:

  • 对于调试应用程序,Google Play Games API 需要调试证书,而 Android Studio 仍然使用该证书生成调试 apk,因此 Games API 在调试时通常接受登录。
  • 对于生产应用程序,API 期望 Android Studio 生成的生产证书,Android Studio 很乐意提供,但 Google Play 替换为自己的证书,因此游戏 API 经常拒绝登录。

解决办法是:

  • 停止诅咒;
  • 通常的 Play 商店开发者控制台中访问发布管理下的应用签名选项;
  • 复制“应用签名证书”下的 SHA-1 指纹(不是指纹“上传证书”——这就是让你陷入困境的原因);
  • 访问Google 开发人员站点上的凭据页面
  • 选择您的应用
  • 将您刚刚复制的证书粘贴到标有“签名证书指纹”的文本字段中。(该字段本身在一些关于如何从您的密钥库中提取它的说明下方——当 Google 签署您的应用程序时不要使用这些说明!)

在这一点上,部署的版本对我来说就像魔法一样。无需编程!