2013-03-26 116 views
6

我使用谷歌登录通过客户经理在我的Android应用程序。我可以得到accesstoken,我发送到服务器和服务器可以创建/登录新用户。 Accesstoken只有3600秒有效。问题是服务器在此时间过期后无法更新用户的信息。 Web应用程序需要定期检查用户的信息。accountmanager刷新令牌(离线访问)

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

感谢

回答

3

目前你不能,我敢肯定不是你希望的答案,我们对此深感抱歉!如果您有网络登录,则可以使用混合流在服务器上获取刷新令牌(请参阅https://developers.google.com/+/web/signin/server-side-flow),但无法将代码作为Android或iOS流的一部分进行检索。

如果这是你需要的东西,你可以在这里提交一个功能请求:https://code.google.com/p/google-plus-platform/issues - 我们正在积极寻找明星的数量来衡量对各种功能的需求。

+0

我刚听说 – 2013-05-14 17:44:42

0

通过客户经理谷歌授权的过程:

电子邮件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); 

这个后台线程会一直在后台运行,同时循环

+1

无论如何,您不应该在Android上的后台线程上使用Thread.sleep()。线程是一个昂贵的资源。 在由AlarmManager触发的处理程序或后台服务上安排您的代码。 – Renascienza 2014-12-13 15:39:48