如何解决在登录期间应用程序进入后台运行后,不会调用onActivityResult
我们已经按照guide中所述的相同方式实施了google sing。除一种情况外,其他所有操作均按预期进行。 用户选择一个用于登录的帐户,然后显示权限对话框。用户将应用移至后台。用户从后台还原应用程序,并且在权限对话框上允许单击。此时,预计将调用onActivityResult(),但再次显示权限对话框。从这一点来看,这是无限循环。 下次用户决定使用google登录时,无需将应用移至后台,因为在允许权限后,仍然存在无限循环。在关闭应用程序/重新启动电话后,用户仍然处于循环中。解决此问题的唯一方法是清除缓存和数据。
private void googleSignIn(String[] scopeStrings) {
Scope firstScope = new Scope(scopeStrings[0]);
Scope[] scopes = new Scope[scopeStrings.length - 1];
for (int i = 1; i < scopeStrings.length; i++) {
scopes[i - 1] = new Scope(scopeStrings[i]);
}
Boolean offline = false;
if (access_type != null && access_type.equals("offline")) {
offline = true;
}
gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestServerAuthCode(this.getString(R.string.auth_client_id),offline)
.requestScopes(firstScope,scopes)
.build();
mSignInClient = GoogleSignIn.getClient(this,gso);
Intent intent = mSignInClient.getSignInIntent();
startActivityForResult(intent,9001);}
public void onActivityResult(int requestCode,int resultCode,Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if (requestCode == 9001) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
handleSignInResult(task);
}}
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
if (account != null) {
String code = account.getServerAuthCode();
webView.loadUrl(redirect_uri + "?code=" + code + "&state=" + state);
} else {
Log.e(TAG,"No Account data received");
}
} catch (ApiException e) {
Log.w(TAG,"signInResult:failed code=" + e.getStatusCode());
}}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。