Google Play 游戏服务登录问题

时间:2021-02-09 06:41:00

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

过去几天我一直在我的办公桌上敲我的头,试图弄清楚如何设置 Google Play 游戏服务的登录。

我可以为交互式登录启动 Activity,但窗口只是挂起并永远加载,没有错误:

enter image description here

这是我的代码。它会检查用户之前是否已登录,如果已登录,则尝试静默登录。如果没有,它会显示交互式登录:

final GoogleSignInOptions signInOption =
    new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
    // Add the APPFOLDER scope for Snapshot support.
    .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)
    .requestIdToken(activity.getString(R.string.debug_client_id))
    .requestEmail()
    .build();

signInClient = GoogleSignIn.getClient(this, signInOption);

GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
if (account != null) {
    // The user has signed in before

    signInClient.silentSignIn().addOnCompleteListener(new OnCompleteListener < GoogleSignInAccount > () {
        @Override
        public void onComplete(@NonNull Task < GoogleSignInAccount > task) {
            if (task.isSuccessful()) {
                // Silent signin successful
                onConnected(task.getResult());
            } else {
                // Player will need to sign-in explicitly using via UI    
                // Interactive sign-in
                activity.startActivityForResult(signInClient.getSignInIntent(), AndroidLauncher.RC_SIGN_IN);
            }
        }
    });

} else {
    //The user has never signed in
    // Interactive sign-in
    this.activity.startActivityForResult(signInClient.getSignInIntent(), AndroidLauncher.RC_SIGN_IN);
}

我也有 onActivityResult() 处理程序:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            signedIn = true;
            // The signed in account is stored in the result.
            GoogleSignInAccount signedInAccount = result.getSignInAccount();
        } else {
            signedIn = false;
            String message = result.getStatus().getStatusMessage();
            if (message == null || message.isEmpty()) {
                message = "Sign in error!";
            }
            new AlertDialog.Builder(this).setMessage(message)
                    .setNeutralButton(android.R.string.ok, null).show();
        }
    }
}

我尝试过/做过的事情

  • 我在 AndroidManifest.xml 文件中添加了所需的元数据标签(具有正确的值)

  • 我已在应用的 Google Play 控制台、Google Play 服务以及 Google Cloud Platform 上 API 的 OAuth 同意屏幕上添加了 Google Play 游戏帐户作为测试人员。

  • 我已检查应用程序签名的 SHA-1 哈希值是否与 Google Play 游戏中使用的 OAuth 凭据的 SHA-1 哈希值匹配,并且客户端 ID 正确且属于选定的 OAuth 凭据。

  • 我已在 Google Cloud Platform OAuth 同意屏幕上启用所有非敏感数据范围(这是我所需要的)

更多信息

如果我在交互式登录之前尝试调用 signInSilently(...),我会收到 API 异常代码 4 (SIGN_IN_REQUIRED)。当我执行交互式登录时,它就像上面一样挂起。 我实际上能够使登录工作,但前提是我使用这样的登录选项

final GoogleSignInOptions signInOption = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).build();

(没有快照权限,也没有传递的客户端 ID。但我需要能够访问快照)

运行交互式登录时,我在 Logcat 中看到的唯一可能相关的异常是:

E/ExecutionCriteria: Package unavailable for task: com.google.android.apps.tachyon/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="duo-analytics-summary-report" trigger=window{start=82080s,end=86401s,earliest=-97027894s,latest=-97023574s} requirements=[NET_ANY] attributes=[PERSISTED,RECURRING] scheduled=-97109975s last_run=N/A exec_window_multiplier=1.0000 jid=N/A status=PENDING retries=0 client_lib=FIREBASE_JOB_DISPATCHER-1} [CONTEXT service_id=218 ]

...但它似乎可能是一个良性错误。

我已经坚持了一段时间;任何建议/帮助将不胜感激。

0 个答案:

没有答案