2014-10-06 82 views
3

我正在努力将Google+登录集成到一个应用程序,我现在主要工作。这里的操作说明:谷歌Plus GoogleApiClient连接()没有帐户选择对话框

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

我可以添加一个“在与谷歌”按钮,整合来自播放服务GoogleApiClient,并允许用户登录到谷歌帐户,他们的选择。

但是,为了符合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()会导致立即失败,要求我调用解决方案意图,这将弹出一个对话框,要求他们选择要使用的帐户。

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

我已经通过文件看起来和搜查的话,我能想到的解释这个问题的每一个组合,但到目前为止,我没有发现任何。有没有办法在所有实例GoogleApiClient与特定账户,而不需要用户从现有帐户的列表中进行选择?或者,如果没有,是否有一些信息保存到首选项中,我可以访问它们以获取令牌给他们已经在我的应用中授权的帐户?

回答

6

当然,只要我发布这个,我偶然发现了答案。

对于任何人都好奇,这里是你怎么做:你只需要添加一个步骤到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(); 

然后它的作品。

+0

非常感谢我正在寻找这个方法好几个小时! – rekire 2015-07-29 07:59:20

+0

拯救了我的一天! – ssk 2016-07-28 22:46:48