我有一个有3个活动的应用程序:一个登录活动,一个主活动和一个详细活动。
登录活动使用Google登录来获取用户的帐户(令牌id和电子邮件)。主活动和详细活动都需要GoogleSignInAccount。
我不希望应用程序总是在登录活动时启动,并在用户启动应用程序时透明地重新登录。
我不想在共享首选项中存储令牌id和用户电子邮件,我更喜欢在我的应用程序中直接操作GoogleSignInAccount。
处理此登录场景的正确流程是什么?我应该尝试在每个屏幕上执行silentSignIn,还是有更好的方法来存储和检索GoogleSignInAccount?
发布于 2016-03-26 06:14:30
是的,您可以使用silentSignIn来实现此目的。
如果您正在寻找UI线程上的GoogleSignInAccount,下面是异步版本:
Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient).setResultCallback(
new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(@NonNull GoogleSignInResult result) {
if (googleSignInResult.isSuccess() {
GoogleSignInAccount gsa = googleSignInResult.getSignInAccount();
}
}
});注意:如果您的mGoogleApiClient不是使用enableAutoManage构建的,则必须手动调用mGoogleApiClient.connect()和mGoogleApiClient.disconnect()才能使上述代码示例工作。有关更多详细信息,请参阅关于managing the GoogleApiClient connection lifecycle的更多信息。
或者在非UI线程上,您可以使用以下示例代码:
try {
ConnectionResult result = mGoogleApiClient.blockingConnect();
if (result.isSuccess()) {
GoogleSignInResult googleSignInResult =
Auth.GoogleSignInApi.silentSignIn(googleApiClient).await();
if (googleSignInResult.isSuccess() {
GoogleSignInAccount gsa = googleSignInResult.getSignInAccount();
}
}
} finally {
mGoogleApiClient.disconnect();
}有关更多详细信息,请查看documentation,包括使用谷歌帐户ID令牌进行后端身份验证或应用编程接口调用。
发布于 2017-11-17 04:40:41
您还可以将GoogleSignInAccount作为额外的意图输入进行传递:
GoogleSignInAccount acct = result.getSignInAccount();
Intent intent = new Intent(this, AnotherActivity.class);
intent.putExtra("singedInAccount", acct);
startActivity(intent);并在onCreate()另一个活动方法中接收它,如下所示:
getIntent().getParcelableExtra("singedInAccount");请注意,只要GoogleSignInAccount实现了Parcelable而不是Serializable接口,就必须使用getParcelableExtra()而不是getSerializableExtra()。
https://stackoverflow.com/questions/36212195
复制相似问题