gpt4 book ai didi

android - GoogleSignInClient.signOut 崩溃并显示 : "Call connect() and wait for onConnected() to be called"

转载 作者:行者123 更新时间:2023-11-29 00:56:04 28 4
gpt4 key购买 nike

  • Google Play 服务版本 11.6.2
  • 目标 Android SDK 27

我已通过引用 Google 在以下存储库中提供的 TypeANumber 项目实现了建议的新 GoogleSignIn 流程:

https://github.com/playgameservices/android-basic-samples/blob/master/TypeANumber/src/main/java/com/google/example/games/tanc/MainActivity.java

崩溃场景:

  • 用户通过身份验证并成功登录。
  • 应用暂停和恢复。
  • 用户尝试通过调用下面的注销方法从 Google 注销。

这是我的初始化代码:

public void initialize(Activity activity, View viewForGamePopups) {
this.activity = activity;
this.viewForGamePopups = viewForGamePopups;
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN).
requestServerAuthCode(backendClientId).
requestProfile().
build();
googleSignInClient = GoogleSignIn.getClient(activity, googleSignInOptions);
}

登录:

public void signIn() {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if(isSignedIn()) {
silentSignIn();
} else {
activity.startActivityForResult(googleSignInClient.getSignInIntent(), RC_SIGN_IN);
}
}
});
}

public boolean isSignedIn() {
return GoogleSignIn.getLastSignedInAccount(activity) != null;
}

public void onActivityResult(int requestCode, int responseCode, Intent intent) {
if (requestCode == RC_SIGN_IN) {
try {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(intent);
GoogleSignInAccount account = task.getResult(ApiException.class);
setViewForGamePopups(account);
onConnected(account);
} catch (ApiException apiException) {
String message = apiException.getMessage();
if (message == null || message.isEmpty()) {
message = "Unexpected error!";
}
onDisconnected();
}
}
}

private void silentSignIn() {
googleSignInClient.silentSignIn().addOnCompleteListener(activity,
new OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
if (task.isSuccessful()) {
GoogleSignInAccount googleSignInAccount = task.getResult();
setViewForGamePopups(googleSignInAccount);
} else {
signOut();
}
}
}
);
}

唱出来:

public void signOut() {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (!isSignedIn()) {
return;
}
googleSignInClient.signOut().addOnCompleteListener(activity,
new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
...
}
}
);
}
});
}

以下堆栈跟踪发生崩溃:

Fatal Exception: java.lang.IllegalStateException: Not connected. Call connect() and wait for onConnected() to be called. at com.google.android.gms.common.internal.zzd.zzaka(Unknown Source:10) at com.google.android.gms.common.internal.zzd.zzakb(Unknown Source:17) at com.google.android.gms.games.internal.GamesClientImpl.zzg(Unknown Source:5) at com.google.android.gms.games.internal.GamesClientImpl.zza(Unknown Source:5) at com.google.android.gms.common.api.internal.zzbr.signOut(Unknown Source:77) at com.google.android.gms.common.api.internal.zzbp.zzaih(Unknown Source:26) at com.google.android.gms.common.api.internal.zzbp.handleMessage(Unknown Source:507) at android.os.Handler.dispatchMessage(Handler.java:101) at android.os.Looper.loop(Looper.java:164) at android.os.HandlerThread.run(HandlerThread.java:65)

我已按照 TypeANumber 示例中的建议为 onResume 案例添加静默登录。

public void onResume() {
logD("Silent sign in onResume called!");
googleSignInClient.silentSignIn().addOnCompleteListener(new OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
if(task.isComplete()) {
logD("Google Connection completed!");
}
if(task.isSuccessful()) {
logD("Google Connection success!");
} else {
logD("Google Connection failed!");
}
}
});
logD("Silent sign in onResume ended!");
}

即使我在静默登录完成后按下退出按钮 (onResume),我仍然遇到此崩溃。

这个问题有解决办法吗?

最佳答案

正如我在博文中所说,在 Activity 的“onResume”回调中调用 silentSignIn 无助于修复 Google Play 服务版本 11.6.2 的崩溃。将Google Play服务版本升级到12.0.1后,无法再次重现崩溃。即使在“onResume”方法中删除 silentSignIn 调用后,应用程序也不再崩溃。

关于android - GoogleSignInClient.signOut 崩溃并显示 : "Call connect() and wait for onConnected() to be called",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54665343/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com