2

我们为 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);

但是现在我对如何使用这个令牌来访问健康数据感到困惑。为了获取人口统计信息,我们使用了以下代码,我们明确地让用户登录到我们的应用程序。

    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 来检索提要。如何才能做到这一点?

任何帮助将非常感激!!!提前致谢,

4

1 回答 1

1

由于标准的 OAuth 程序应该可以工作,您在 WebView(或任何类似的)中使用所有必需的参数打开 OAuth URL,用户向 Google(而不是您的应用程序)提供他们的用户名和密码,然后 google 给您一个令牌您可以将其用于未来的通信。

这样用户就不必给你他们的登录凭据。他们只给谷歌,谷歌给你一个令牌,每次你使用它时都会验证你的应用程序。

我认为你应该很好,因为它只要求你打开一个 WebView 一次,除非用户使用你的应用程序退出谷歌或拒绝访问你的应用程序。

获取令牌后,您只需开始使用该令牌轮询谷歌,并且永远不会向用户询问他们的登录凭据。相当无缝。

更新

在我们聊天之后,让我告诉你,你必须向 google 注册一个应用程序,它会给你一个 appID,这个 appID 将被你的 Android 应用程序用来告诉 google 它正在代表请求权限此 appID 引用的应用程序。

更新 2

  • 用所有参数打开谷歌 OAUth,谷歌会给你一个代码
  • 使用该代码并再次向谷歌创建一个 POST 请求,谷歌现在将返回一个持久的 AccessToken

然后,您可以在以后的所有通信中使用此 AccessToken

于 2011-04-06T09:18:33.510 回答