首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个活动的Google登录流程

具有多个活动的Google登录流程
EN

Stack Overflow用户
提问于 2016-03-25 08:20:09
回答 2查看 875关注 0票数 3

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

登录活动使用Google登录来获取用户的帐户(令牌id和电子邮件)。主活动和详细活动都需要GoogleSignInAccount

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

我不想在共享首选项中存储令牌id和用户电子邮件,我更喜欢在我的应用程序中直接操作GoogleSignInAccount

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

EN

回答 2

Stack Overflow用户

发布于 2016-03-26 06:14:30

是的,您可以使用silentSignIn来实现此目的。

如果您正在寻找UI线程上的GoogleSignInAccount,下面是异步版本:

代码语言:javascript
复制
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线程上,您可以使用以下示例代码:

代码语言:javascript
复制
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令牌进行后端身份验证或应用编程接口调用。

票数 2
EN

Stack Overflow用户

发布于 2017-11-17 04:40:41

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

代码语言:javascript
复制
GoogleSignInAccount acct = result.getSignInAccount();
Intent intent = new Intent(this, AnotherActivity.class);
intent.putExtra("singedInAccount", acct);
startActivity(intent);

并在onCreate()另一个活动方法中接收它,如下所示:

代码语言:javascript
复制
getIntent().getParcelableExtra("singedInAccount");

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36212195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档