Google Play Games Android 登录出现错误代码 4
Posted
技术标签:
【中文标题】Google Play Games Android 登录出现错误代码 4【英文标题】:Google Play Games Android Sign In Getting Error Code 4 【发布时间】:2019-05-29 08:44:48 【问题描述】:我目前正在开发一个 android 应用程序,我想在其中使用 Google Play 游戏服务(成就、排行榜等)。经过多次迭代,我终于得到了能够显示 Google Play 游戏登录提示 的代码。现在的问题是,用户登录后需要一段时间,然后抛出错误代码 4,错误消息为空。经过大量研究后,并没有真正帮助我解决这个问题。
我曾尝试直接从 Android Studio 中启动它,手动或通过 Google Play 安装应用程序,都在多台设备上,但没有任何效果。
如果需要,这里有一些代码:
private static GoogleSignInClient mGoogleSignInClient;
...
@Override
protected void onCreate(Bundle savedInstanceState)
...
mGoogleSignInClient = GoogleSignIn.getClient(this, new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).requestIdToken(getResources().getString(R.string.app_id)).build());
signInSilently(); // Can't be tested yet.
// isSignedIn() and loginDeclined are both false
if(!isSignedIn() && !loginDeclined) startSignInIntent();
...
private void startSignInIntent()
startActivityForResult(mGoogleSignInClient.getSignInIntent(), RC_SIGN_IN);
loginDeclined = true;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
super.onActivityResult(requestCode, resultCode, intent);
// resultCode = 0
if (requestCode == RC_SIGN_IN)
Task<GoogleSignInAccount> task =
GoogleSignIn.getSignedInAccountFromIntent(intent);
try
GoogleSignInAccount account = task.getResult(ApiException.class);
// Now this never happens :(
System.out.println("SUCCESS!");
catch (ApiException apiException)
System.out.println(apiException.getStatusCode() + " + " + apiException.getMessage());
// statusCode is 4, message is "4: "
String message = apiException.getMessage();
if (message == null || message.isEmpty())
message = "Error signing in to Google Play Games";
new android.app.AlertDialog.Builder(this)
.setMessage(message)
.setNeutralButton(android.R.string.ok, null)
.show();
【问题讨论】:
我遇到了同样的错误,我检查了我的 google playconsole gameservices 项目是否使用相同的 SHA1,这就是罪魁祸首。确保您的应用 SHA1 和 playconsole gameservices 项目具有相同的 SHA1 【参考方案1】:确保您使用 SHA1 密钥。
命令“keytool -list -keystore [调试密钥库的路径]”可能会显示 SHA-256 密钥。
要获取您的 SHA1 密钥,您可以按照以下步骤操作:
-
打开您的项目
点击“Gradle”(右侧)
选择您的模块
任务 -> android ->(双击)signingReport
image: get your SHA1 key
【讨论】:
【参考方案2】:在互联网上搜索了几个小时并检查了 google play 游戏服务文档 (https://developers.google.com/games/services/android/troubleshooting) 中故障排除部分的每一步后,我填写了“OAuth 同意屏幕”表格,它终于奏效了。
-
登录 Google Play 控制台
转到游戏服务
去你的游戏
在“游戏详情”页面一直向下滚动到链接的 API 控制台项目
点击链接的 API 控制台项目的链接
点击左侧栏中的“OAuth 设置屏幕”
选择外部
填写表格并上传图标
发送验证
之后,我的 Google Play 游戏服务登录立即生效。
【讨论】:
【参考方案3】:请检查以下详细信息以了解 GPG 登录问题:
确保您已按照 instructions 创建您的客户端 ID 和 configure the games services.
清单中的元数据标签应与应用程序的数字 ID 匹配,并且应仅包含数字。还要仔细检查您的包裹名称。不要使用示例应用程序包名称。用你自己的。
您用来签署游戏的证书应与与您的客户端 ID 关联的证书指纹相匹配。
最后一件重要的事情,检查测试帐户是否已启用。我一直忘记这一步。
确保应用签名证书中的指纹与游戏服务中链接的应用相匹配。您还可以通过导航到您的 Google API 控制台 -> 选择您的应用程序 -> 凭据 -> OAuth 2.0 客户端 ID 来验证这些详细信息。
我注意到的另一件事是,如果应用程序已发布,那么您需要从 Play 商店安装应用程序才能使这些凭据正常工作。如果该应用尚未发布,请确保您使用的是调试指纹并且与您的游戏服务(调试指纹)匹配。
只要你有这些指纹,你应该没问题。如果您仍然遇到问题,我建议您通过代码实验室获得有关如何扩展现有 Unity 游戏以在 Android 设备上运行并集成 Play Game Services 的分步帮助。 https://codelabs.developers.google.com/codelabs/playservices_unity/index.html?index=..%2F..%2Findex#0
或者这里是帮助快速测试的示例应用程序 - https://github.com/playgameservices/android-basic-samples。
您还可以通过 logcat 帮助我们更好地理解问题。
【讨论】:
【参考方案4】:最近,当我尝试使用保存的游戏 api 将用户数据写入他的驱动器时,我遇到了这个问题。我发现了问题所在。以下是我的观察,希望对一般情况有所帮助:
-
您可以通过在 Play 控制台中添加测试人员,在调试版本中测试 Play Games api。
如果您想在签名的 apk 上进行测试,那么您需要使用“app.keystore”密钥库文件生成 SHA1 密钥,并将具有此 SHA1 密钥的 Android 应用程序添加到特定于该应用程序的玩游戏服务中。现在您将能够获得预期的结果。(这是我的问题)
如果要将数据存储在用户驱动器上,则需要在玩游戏服务中启用“已保存游戏”api。
【讨论】:
【参考方案5】:在我的情况下,一切看起来都很好,但得到错误代码,然后我检查 Google Play Console> Play Game Service 并发布更改。关键是发表我做的东西。
【讨论】:
以上是关于Google Play Games Android 登录出现错误代码 4的主要内容,如果未能解决你的问题,请参考以下文章
Google Play Games Android 登录出现错误代码 4
是否可以将 Google Play Games Services Realtime Multiplayer 集成到适用于 Android 和 iOS 的 LibGDX 中?
Google Play Games RealTime Multiplayer 添加图片
google play games:从邀请ID中获取请求的玩家总数
Google Play Games Services Leaderboard API,看不到其他玩家的分数
100% “google.play.games.games.v1.Applications.RecordApplicationActivity” 一个月以来