问题描述
过去几天我一直在我的办公桌上敲我的头,试图弄清楚如何设置 Google Play 游戏服务的登录。
我可以为交互式登录启动 Activity,但窗口只是挂起并永远加载,没有错误:
这是我的代码。它会检查用户之前是否已登录,如果已登录,则尝试静默登录。如果没有,它会显示交互式登录:
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();
}
}
}
我尝试过/做过的事情
-
我已在应用的 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 ]
我已经坚持了一段时间;任何建议/帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)