Google Plus GoogleApiClient connect()没有帐户选择对话框

时间:2014-10-06 17:52:13

标签: android google-plus

我正在努力将Google+登录整合到应用中,而我现在大部分都在使用它。按照这里的说明:

https://developers.google.com/+/mobile/android/sign-in

我可以添加“使用Google登录”按钮,整合Play服务中的GoogleApiClient,并允许用户登录自己选择的Google帐户。

但是,为了遵守Google服务条款,我还希望为他们提供一种方式(在不同的活动中),以完全断开他们的Google+帐户与应用的关联。根据Google的文档:

https://developers.google.com/+/mobile/android/sign-in#revoking_access_tokens_and_disconnecting_the_app

使用已连接的Plus.AccountApi.revokeAccessAndDisconnect()调用GoogleApiClient这是一件简单的事情。问题是,这要求我首先连接GoogleApiClient

第一个链接概述了获取此类对象的过程:使用GoogleApiClient.Builder构建客户端对象,在其上调用connect(),并使用适当的回调来检测连接成功或失败。但是,如果用户手机上有多个Google帐户,那么connect()会导致立即失败,要求我调用解析意图,这会弹出一个对话框,要求他们选择要使用的帐户。< / p>

但这不适用于此案例,因为他们已经登录Google+,因此我应该知道要使用哪个帐户。请记住,此时,我需要做的就是创建一个GoogleApiClient对象,该对象已登录到之前登录的帐户,因此我可以将其传递给Plus.AccountApi.revokeAccessAndDisconnect()。但我不知道该怎么做。

我查看了文档并搜索了我能想到的每一个单词组合来解释这个问题,但到目前为止我一无所获。是否有任何方法可以使用特定帐户实例化GoogleApiClient,而不是要求用户从现有帐户列表中进行选择?或者,如果没有,是否有一些信息保存到偏好设置,我可以访问这些信息以获取他们已在我的应用中授权的帐户的令牌?

1 个答案:

答案 0 :(得分:8)

当然,我发布这篇文章后,我偶然发现了答案。

对于任何好奇的人,请按照以下步骤操作:您只需向GoogleApiClient构建器添加一个步骤;调用setAccountName()方法来指定要为其构建api客户端对象的帐户。所以这个:

mGoogleApiClient = new GoogleApiClient.Builder(this)
                       .addConnectionCallbacks(this)
                       .addOnConnectionFailedListener(this)
                       .addApi(Plus.API)
                       .addScope(Plus.SCOPE_PLUS_PROFILE)
                       .build();

成为这个:

mGoogleApiClient = new GoogleApiClient.Builder(this)
                       .addConnectionCallbacks(this)
                       .addOnConnectionFailedListener(this)
                       .addApi(Plus.API)
                       .addScope(Plus.SCOPE_PLUS_PROFILE)
                       .setAccountName(<gmail address>)
                       .build();

然后它有效。