【问题标题】:Google play game service error code 400谷歌玩游戏服务错误代码400
【发布时间】:2018-08-04 13:25:26
【问题描述】:

有一个应用程序使用玩游戏服务,但由于某种原因它停止工作。 看起来有时我可以成功登录,但通常 - 不。如果我检查 API 流量,大约有 10% 得到响应代码 = 200,其他 - 404。

获得 404 的方法:

  • games.applications.played
  • games.events.record

当我尝试检查日志中的错误时,我看到:

11705-13707/com.google.android.gms W/GamesServiceBroker: Client connected with SDK 12171000, Services 11975436, and Games 54390036
11705-9262/com.google.android.gms E/BoundService: No such BoundService for action: com.google.android.gms.auth.APP_CERT
11705-9262/com.google.android.gms E/BoundService: No such BoundService for action: com.google.android.gms.auth.APP_CERT
691-778/system_process E/PROXIMITY: ProximitySensor: unknown event (type=3, code=0)
8876-8890/com.agminstruments.drumpadmachine V/FA: Inactivity, disconnecting from the service
691-778/system_process E/PROXIMITY: ProximitySensor: unknown event (type=3, code=0)
2254-2269/? I/PerfService: PerfServiceNative_getPackName
11705-16860/com.google.android.gms E/Volley: [3966] BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/games/v1/players/me?language=ru-RU
11705-9262/com.google.android.gms E/PlayerAgent: Unable to load player g08394879143000804289
11705-9262/com.google.android.gms W/PlayerAgent: {"errors":[{"domain":"global","reason":"invalid","message":"Invalid applicationId with value . Reason: No application ids specified."}],"code":400}
3978-3978/com.google.android.play.games.ui I/SignInActivity: Transition from 8 to 11
3978-3978/com.google.android.play.games.ui W/SignInActivity: onSignInFailed()...
3978-3978/com.google.android.play.games.ui W/SignInActivity: Sign in failed during 8
3978-3978/com.google.android.play.games.ui W/SignInActivity: ==> Returning non-OK result: 10002

我不明白为什么消息“Invalid applicationId with value ”中没有 ID。因为我已将 id 添加到应用程序中。我也尝试更改 ID,在这种情况下,我收到一个错误,即 ID XXXXXXXXXXXX 未与应用程序 my.package.name 链接。

我还仔细检查了Application IDSHA 指纹,重新导入google-services.json 还尝试从链接的应用程序手动添加OAuth2 Client ID。检查播放服务说明,一切看起来都不错。 我还能检查什么?

更新:

尝试将播放服务更新到 11.8.0 并使用 GoogleSignInClient

 mGoogleSignInClient = GoogleSignIn.getClient(application, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
 activity.startActivityForResult(mGoogleSignInClient.getSignInIntent(), 312);

但也报错:

com.google.android.gms.common.api.ApiException: 4: 

【问题讨论】:

  • 只需尝试复制/粘贴“应用程序签名证书”“SHA-1 证书指纹” - 而不是来自您的密钥库的“上传证书”“SHA-1 证书指纹”,在 API ID 客户端 OAuth 2.0 中。希望这会有所帮助

标签: android google-api google-play-games google-play-services


【解决方案1】:

我的设备上也有“com.google.android.gms.common.api.ApiException: 4”。 更新 Google Play 游戏应用为我解决了这个问题。

然后我只需要手动点击我的应用程序中的 Google 登录按钮。 我希望这会有所帮助!

使用 gms_library_version '11.8.0' 和我正在使用的代码:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //...
    mGoogleSignInClient = GoogleSignIn.getClient(this, new GoogleSignInOptions
            .Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).build());
    //...
 }



// when the button gets clicked
public void startSignInIntent() {
    startActivityForResult(mGoogleSignInClient.getSignInIntent(), RC_SIGN_IN);
}


    @Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    if (requestCode == RC_SIGN_IN) {

        Task<GoogleSignInAccount> task =
                GoogleSignIn.getSignedInAccountFromIntent(intent);

        try {
            GoogleSignInAccount account = task.getResult(ApiException.class);
            onConnected(account);
        } catch (ApiException apiException) {
            String message = apiException.getMessage();
            if (message == null || message.isEmpty()) {
                message = getString(R.string.signin_other_error);
            }

            onDisconnected();

            new AlertDialog.Builder(this)
                    .setMessage(message)
                    .setNeutralButton(android.R.string.ok, null)
                    .show();
        }
    }

    //...
  }

【讨论】:

  • 感谢您的回答。不幸的是它对我没有帮助:(仍然有同样的错误
【解决方案2】:

清除缓存和数据也是这个错误的主要解决方案之一。

1.转到设置>>转到应用程序设置(在某些设备中,应用程序设置被命名为应用程序)。 2.转到,所有应用程序>>找到Google Play商店>>清除数据和缓存 3.一旦你清除了一切,接下来你需要强制停止应用程序。 另外,找到谷歌服务框架>>打开谷歌服务框架>>清除缓存和数据 现在,重新启动您的设备并尝试下载该应用程序。

【讨论】:

    【解决方案3】:

    如所述here.错误代码4的意思

    public static final int SIGN_IN_REQUIRED

    客户端试图连接到服务,但用户没有 已登录。客户端可以选择不使用 API 继续。 或者,如果 hasResolution() 返回 true,客户端可能会调用 startResolutionForResult(Activity, int) 提示用户登录。 在登录活动返回 RESULT_OK 后,进一步尝试 应该成功。

    常数值:4

    所以请确保您的应用在 Google 开发者控制台中的 SHA-1 signing-certificate 指纹属于用于签署您正在测试的 APK 的同一密钥。

    在组装调试版本 Android Studio 时使用自己的调试密钥。您可以将其更改为

    右键单击项目目录中的应用程序文件夹-> 选择"Open Module Settings"-> "Signing" 选项卡-> 配置您在谷歌开发控制台中提到的相同密钥。之后导航到“构建类型”选项卡并选择您的签名配置。

    结帐this answer too.

    【讨论】:

    • 您好,谢谢,好点子。但我已经使用了单一证书
    【解决方案4】:

    试试这个, 首先从调试播放服务开始,

    • 在代码中启用调试播放服务 > 制作 apk > 在设备上安装 > 从 android sdk 的“工具”文件夹中打开“监视器”> 将设备连接到 PC > 运行

    • 调试后,如果收到此消息

    "OAUth2相关配置错误,请检查。详细 错误; UNREGISTERED_ON_API_CONSOLE" "OnSignInFailed()..."

    • 转到

    只需复制/粘贴“应用程序签名证书”“SHA-1 证书指纹” - 而不是“上传证书”“SHA-1 证书指纹”,它来自您的密钥库,位于 API ID 客户端 OAuth 2.0 中.

    这将完成你的工作!

    截至目前,google play 游戏已不再在本地连接。但是当它被导入到 google play 商店时它连接成功(谷歌应用签名完全符合它的预期:它将你的 SHA1 从“上传证书”更改为“应用签名”)。

    注意: 上图取自 GitHub open issue。 希望这会有所帮助!

    【讨论】:

    • 您好,谢谢。我还没有找到如何在 11.8.0 的代码中启用调试播放服务。证书当前未上传,但之前有效。更改 OAuth 2.0 客户端 ID 后,它似乎停止工作。顺便说一句,谷歌云和游戏服务控制台中的应用程序 ID 可以不同吗?因此,存在不同的 OAuth2 客户端 ID。
    • 我已将证书添加到控制台,并将指纹添加到 firebase,但得到了同样的错误:(
    • @user5599807 没有你弄错了...明天会尝试澄清您的疑虑...对不起,我现在无能为力...我有一些截止日期要赶上...
    • 你好,@PN10,请帮忙,我还有一个问题。
    • @user5599807 您是否在 Google Play 控制台中启用了测试员帐户?您还在使用统一插件吗?如果没有,请将测试人员电子邮件地址添加到 Play 游戏控制台上游戏的测试部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多