删除 google play 游戏数据后卡住无法登录

Posted

技术标签:

【中文标题】删除 google play 游戏数据后卡住无法登录【英文标题】:Stuck and unable to sign in after deleting google play games data 【发布时间】:2018-12-08 00:30:59 【问题描述】:

我正在为我的 libgdx 游戏使用 Google Play 服务。我创建了一些虚拟成就来测试,后来想删除它们。在我的手机上,我去了 Google Play 游戏 -> 设置 -> 删除 Play 游戏数据 -> 从我的游戏中删除的数据。

回到我的游戏后,我注意到游戏认为我仍在登录。我使用以下代码检查用户是否已登录:

@Override
public boolean isSignedIn()
    return GoogleSignIn.getLastSignedInAccount(androidLauncher) != null;

如果用户没有登录,我会尝试让他们静默登录

private void signInSilently() 

    signedInClient.silentSignIn().addOnCompleteListener(androidLauncher,
        new OnCompleteListener<GoogleSignInAccount>() 
            @Override
            public void onComplete(@NonNull Task<GoogleSignInAccount> task) 
                if (task.isSuccessful()) 
                    signedInAccount = task.getResult();
                
            
        );

如果我不能让他们安静地签名。我创建了一个新意图并让他们手动登录并授予对应用的访问权限:

    GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
    if (result.isSuccess()) 
        signedInAccount = result.getSignInAccount();
        showSignedInDialog();
     

问题是,删除 Play 游戏数据后,我的方法 isSignedIn 始终返回 true。但是,当我尝试执行显示成就之类的操作时,出现以下错误:

com.google.android.gms.common.api.ApiException: 4: The user must be signed in to make this API call.

成就展示代码:

@Override
public void showAchievements()

    androidLauncher.runOnUiThread(new Runnable() 
        @Override
        public void run() 
            if (isSignedIn()) 
                loadingView.showLoadingView();
                Games.getAchievementsClient(androidLauncher, signedInAccount)
                    .getAchievementsIntent()
                    .addOnSuccessListener(new OnSuccessListener<Intent>() 
                        @Override
                        public void onSuccess(Intent intent)                                     
                             androidLauncher
                                    .startActivityForResult(intent, RC_ACHIEVEMENT_UI);
                        
                    )
                    .addOnFailureListener(new OnFailureListener() 
                        @Override
                        public void onFailure(@NonNull Exception e) 
                            Logger.error(e);
                        
                    )
             
        
    );

我很好奇为什么会这样。根据the documentation,我的isSignedIn 方法应该可以正常工作。但是,因为我在实际尝试进行 API 调用时遇到了错误,所以该方法似乎不起作用。我只能假设这一切都是因为我删除了我的 Play 游戏数据,因为在那之前一切正常。

我要注意的其他事项 - 我尝试让我的 isSignedIn 方法返回 false 以强制进行静默登录。我的静默登录返回以下错误:

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

我做了一些研究,发现了bug report。看起来状态码 8 是an Internal Error。谷歌至少看起来be aware of the issue。

更新:在我的 isSignedIn 方法返回 false 并禁用我的静默登录后,我强制手动登录。强制手动登录并登录后,现在作品。但是,如果用户遇到同样的问题,我将无法为他们这样做。他们会被卡住,因为 isSignedIn 方法在删除 Play 游戏数据后似乎总是返回 true。

【问题讨论】:

你可以尝试清除缓存吗? 【参考方案1】:

我遇到了类似的问题,对我有用的是为我的项目启用 Google Drive API。不知道为什么这有效,但确实有效。

转到https://console.developers.google.com/apis,然后打开“库”菜单选项。从那里搜索“Drive”并单击“Google Drive API”项。然后您应该会看到一个启用按钮。

【讨论】:

以上是关于删除 google play 游戏数据后卡住无法登录的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从 google play 游戏中删除保存的游戏

Google Play Developer Console - 删除游戏服务

Android 模拟器上的 Google Play 服务和 Google Play 游戏应用

Google Play 游戏服务 - 无法登录游戏中心

如何从 Google Play 应用或游戏列表页面中删除屏幕截图

Google Play 游戏服务 - 无法登录