java - 是否有一种官方方法可以使用 AccountManager 帐户在 Android 上对 Google Data API 进行身份验证?

标签 java android api authentication

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

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

能这么难吗?这确实阻碍了像 Google Reader 客户端这样的应用程序,这些应用程序必须向用户询问他们的 Google 凭据(希望没有人给他们)。

欢迎任何指点/建议。

最佳答案

是的,这是可能的。一旦您掌握了 Google 帐户(如您所述),您只需从 AccountManager 请求 GData 服务的授权 token 。

如果 Android 设备已经有一个授权 token (针对您尝试访问的特定 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");

}

希望对您有所帮助。

关于java - 是否有一种官方方法可以使用 AccountManager 帐户在 Android 上对 Google Data API 进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3492775/

相关文章:

java - 如何管理 API 中的异常?

java - 我的 Android Scrollview 在 tabhost 中消耗了太多内存

ruby-on-rails - 如何测试外部 API 调用,而无需将代码更改推送到 Ruby on Rails 应用程序?

java - 如何通过Java类在andoridmanifest.xml中添加权限?

java - 如何实现java tic tac toe游戏功能

java - 构建后在其他计算机上打开时不出现图标

java - 如何用梳状滤波器检测基频?

android - 使用 androidx 生物识别提示检查设备是否启用了生物识别

android - 当组扩展时,自动滚动到最后一个子项

javascript - Loopback 和 Stripe Webhooks