6

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

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

谢谢

4

3 回答 3

5

现在这是可能的:https ://developers.google.com/+/mobile/android/sign-in#server-side_access_for_your_app

您请求一次性授权码,将其发送到您的服务器,然后您的服务器将其交换为访问令牌和刷新令牌。

于 2013-05-16T05:15:25.623 回答
3

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

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

于 2013-03-28T13:39:57.137 回答
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 循环中在后台运行

于 2014-10-10T06:00:04.763 回答