accountmanager刷新令牌(离线访问)

时间:2013-03-26 16:02:43

标签: android oauth-2.0 google-plus google-oauth

我在Android应用中通过帐户管理器使用谷歌登录。我可以获得accessstoken,我发送到服务器和服务器可以创建/登录新用户。 Accesstoken仅有效3600秒。问题是服务器在此时间到期后无法更新用户的信息。 Web应用程序需要定期检查用户信息。

如何从android客户经理获取身份验证令牌和刷新令牌,以便服务器可以使用刷新令牌定期更新数据?我不想在Android应用程序中通过webview登录。

由于

3 个答案:

答案 0 :(得分:5)

现在可以:https://developers.google.com/+/mobile/android/sign-in#server-side_access_for_your_app

您请求一次性授权码,将其发送到您的服务器,您的服务器会将其换成访问令牌并刷新令牌。

答案 1 :(得分:3)

目前你不能,我肯定不是你希望的答案,对不起!如果您有Web登录,您也可以使用混合流程来获取服务器上的刷新令牌(请参阅https://developers.google.com/+/web/signin/server-side-flow),但无法在Android或iOS流程中检索代码。

如果这是您使用案例所需的内容,您是否可以在此处提交功能请求:https://code.google.com/p/google-plus-platform/issues - 我们正在积极查看其中的星数,以衡量对各种功能的需求。

答案 2 :(得分:0)

通过客户经理进行Google授权流程:

可以从

获取电子邮件ID
AccountManager accountManager = AccountManager.get(getApplicationContext());
Account[] accounts = accountManager.getAccountsByType("com.google");
String emailID = accounts[0].name; // you can retrieve using google account chooser way also

这些行应该在单独的标记中运行(不在UI线程中)。

String scope = "oauth2:https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com";
String accessToken = GoogleAuthUtil.getToken(mContext, emailID, scope); 

保存accessToken并用于api访问。

一小时(即3600秒)后,我们需要刷新访问令牌。但现在谷歌在一小时后不支持访问。我们必须重新启动应用程序并使用以下行来获取访问令牌。

String scope = "oauth2:https://www.googleapis.com/auth/userinfo.profile https://gdata.youtube.com";
String accessToken = GoogleAuthUtil.getToken(mContext, emailID, scope);

此后台线程将始终在while循环中以后台运行