是否有使用AccountManager帐户在Android上对Google Data API进行身份验证的官方方法?

时间:2010-08-16 11:46:33

标签: java android api authentication

我正在尝试将Google Data API用于Android 2.1上已安装的应用程序。如果用户已在设备上配置了帐户,我不希望用户必须输入凭据。因此,我使用帐户类型为“com.google”的AccountManager。

但是去哪里? Google没有关于如何进行Google身份验证(authTokenType等)的示例。有一个项目试图以一般的方式(http://code.google.com/p/google-authenticator-for-android),但没有任何成功。

难道这么难吗?这实际上是为了阻止像谷歌阅读器客户端这样的应用程序,这些应用程序必须要求用户提供他们的Google凭据(希望没有人给他们)。

任何指针/建议都表示赞赏。

3 个答案:

答案 0 :(得分:4)

是的,这是可能的。一旦掌握了Google帐户(如您所述),您只需要从AccountManager请求GData服务的身份验证令牌。

如果Android设备已经有一个身份验证令牌(对于您尝试访问的特定GData服务),它将返回给您。如果没有,AccountManager将请求一个并将其返回给您。无论哪种方式,您都不需要担心这一点,因为AccountManager会处理它。

在以下示例中,我使用的是Google Spreadsheets API:

ArrayList<Account> googleAccounts = new ArrayList<Account>();

// Get all accounts 
Account[] accounts = accountManager.getAccounts();
  for(Account account : accounts) {
    // Filter out the Google accounts
    if(account.type.compareToIgnoreCase("com.google")) {
      googleAccounts.add(account);
    }
  }
AccountManager accountManager = AccountManager.get(activity);

// Just for the example, I am using the first google account returned.
Account account = googleAccounts.get(0);

// "wise" = Google Spreadheets
AccountManagerFuture<Bundle> amf = accountManager.getAuthToken(account, "wise", null, activity, null, null);

try {
  Bundle authTokenBundle = amf.getResult();
  String authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN);

  // do something with the token
  InputStream response = sgc.getFeedAsStream(feedUrl, authToken, null, "2.1");

}

我希望这会有所帮助。

答案 1 :(得分:1)

请查看google data api中的sample code。身份验证后要做的重要事情是调用GoogleHeaders.setGoogleLogin(String)。

答案 2 :(得分:1)

确保在身份验证后致电GoogleHeaders.setGoogleLogin。然后,如有必要,您可以查看此sample code以获得进一步的帮助。