我们为 Google Health 开发并发布了一款应用。现在我们想避免每次通过询问用户名和密码登录 gmail 帐户。 为了做到这一点,我听说我可以有以下选择。 1.OAuth 2.客户经理 3.
OAuth 的问题在于它将通过 Android -> Web App -> Health 路径进行,因此我还需要开发一个 Web 应用程序,我们现在不希望这样做。
所以我正在尝试使用客户管理器,这是我的代码,我可以使用它获取所选帐户的帐户列表和有效的 authToken。
AccountManager mgr = AccountManager.get(getApplicationContext());
System.out.println("Got account manager");
Account[] accts = mgr.getAccounts();
}
Account acct = accts[0];
AccountManagerFuture<Bundle> accountManagerFuture = mgr.getAuthToken(acct, "android", null, this, null, null);
Bundle authTokenBundle = accountManagerFuture.getResult();
System.out.println("Account name "+accts[0].name);
String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();
System.out.println("Got token:"+authToken);
但现在我对如何使用此 token 访问健康数据感到困惑。 为了获取人口统计提要,我们使用了以下代码,我们在其中明确让用户登录到我们的应用程序。
String queryURL = "https://www.google.com/health/feeds/profile/ui/" + profileId +"/-/DEMOGRAPHICS";
getDemoGrInfoQuery = new Query(new URL(queryURL));
Feed dempGrResultFeed;
globals = new Globals();
dempGrResultFeed = healthService.query(getDemoGrInfoQuery, Feed.class);
因此我们过去常常使用 URL 获取 Feed。
现在我想跳过登录过程并使用上面的 authToken 来检索提要。如何做到这一点?
任何帮助将不胜感激!!! 提前致谢,
最佳答案
由于标准的 OAuth 程序应该有效,您在 WebView(或任何类似的)中打开带有所有必需参数的 OAuth URL,用户向 Google(而不是您的应用程序)提供他们的用户名和密码,然后 google 提供你是一个可以用于 future 通信的 token 。
这样用户就不必向您提供他们的登录凭据。他们只将它提供给谷歌,而谷歌会为您提供一个 token ,在您每次使用它时都会对您的应用进行身份验证。
我认为您应该接受它,因为它只需要您打开 WebView 一次,除非用户使用您的应用程序注销 google 或拒绝访问您的应用程序。
获得 token 后,您只需开始使用该 token 轮询谷歌,而不会向用户询问他们的登录凭据。非常无缝。
更新
在我们聊天之后,让我告诉你,你必须向谷歌注册一个应用程序,它会给你一个 appID,这个 appID 将被你的 Android 应用程序用来告诉谷歌它正在请求权限代表此 appID 所指的应用程序。
更新 2
- 使用所有参数打开 Google OAUth,google 会给你一个代码
- 使用该代码并再次向 google 创建 POST 请求,google 现在将返回一个持久的 AccessToken
然后您可以在以后的所有通信中使用此 AccessToken
关于android - 将 authToken 用于 Google 健康数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5547690/