我们为Google Health开发并发布了一款应用。现在我们希望通过询问用户名和密码来避免每次登录gmail帐户。 为了做到这一点,我听说我可以有以下选项。 1. OAuth 2.客户经理 3.
OAuth的问题在于它将通过Android进行 - > Web App - >健康路径所以我需要开发一个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);
但现在我对如何使用此令牌访问运行状况数据感到困惑。 为了获取人口统计信息源,我们使用了以下代码,我们明确地让用户登录我们的应用程序。
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);
因此我们习惯使用网址获取Feed 现在我想跳过登录过程并使用上面的authToken来检索feed。怎么办呢?
任何帮助都会非常感激!!! 提前谢谢,
答案 0 :(得分:1)
由于标准OAuth程序可行,您可以使用所有必需参数在WebView(或类似内容)中打开OAuth URL,用户使用其用户名和密码向Google(而非您的应用)提供,然后google给出你是一个可用于未来通信的代币。
这样,用户无需向您提供登录凭据。他们只给谷歌,谷歌给你一个令牌,每次你使用它时都会对你的应用进行身份验证。
我认为你应该很好,因为它要求你只打开一次WebView,除非用户使用你的应用程序退出google或拒绝访问你的应用程序。
获取令牌后,您只需使用该令牌开始对Google进行投票,并且永远不会要求用户提供其登录凭据。非常无缝。
<强>更新强>
在我们的聊天对话之后,让我告诉你,你必须在谷歌注册一个应用程序,它会给你一个appID,这个appID将被你的Android应用程序用来告诉谷歌它正在请求许可代表此appID引用的应用程序。
更新2
然后,您可以在以后的所有通信中使用此AccessToken