Google登录包含多项活动的流程

时间:2016-03-25 00:20:09

标签: android google-signin

我有一个包含3项活动的应用程序:登录活动,主要活动和详细活动。

登录活动使用Google登录来获取用户的帐户(令牌ID和电子邮件)。 Main活动和Detail活动都需要GoogleSignInAccount

我不希望应用程序始终启动登录活动,并在用户启动应用程序时透明地重新登录。

我不想将令牌ID和用户电子邮件存储在共享偏好设置上,我更倾向于在我的应用中直接操作GoogleSignInAccount

处理此登录方案的正确流程是什么?我应该尝试在每个屏幕中执行silentSignIn,还是有更好的方法来存储和检索GoogleSignInAccount

2 个答案:

答案 0 :(得分:2)

是的,您可以将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了解更多详情,包括使用Google帐户ID令牌进行后端身份验证或API调用。

答案 1 :(得分:1)

您还可以将 GoogleSignInAccount 作为额外的意图输入传递:

GoogleSignInAccount acct = result.getSignInAccount();
Intent intent = new Intent(this, AnotherActivity.class);
intent.putExtra("singedInAccount", acct);
startActivity(intent);

并在 onCreate()中接收另一个的活动方法:

getIntent().getParcelableExtra("singedInAccount");

请注意,必须使用 getParcelableExtra()而不是 getSerializableExtra(),只要GoogleSignInAccount实现Parcelable而不是Serializable接口。