3

我正在尝试将我的应用与 Google API 集成,例如 Google Tasks,

在使用Google Play 服务之前,我会使用Google APIs Client Library for Java 和AccountManager来检索和访问 API 的 OAUTH 令牌。

这种方法的优点是我可以:

  • 流畅地使用 Java 客户端 API 来访问我的应用程序可能需要的所有 API 方法。

缺点是:

  • 身份验证对话框看起来很糟糕,并且让用户感到困惑(如 Google IO Play 服务会话中所述)
  • 我需要向应用程序添加各种权限。

我猜“谷歌播放服务”改变了这一切:

  • 不需要应用程序许可,因为它直接取自播放服务,然后最终取自用户
  • 它还提供了新的漂亮的AccountPicker,使用户的身份验证更加清晰。

但是访问 Java 客户端库 API 方法的便利性丢失了!!!我必须自己创建所有请求。

问题是使用播放服务对 OAUTH 令牌进行身份验证和请求的最佳方法是什么,然后继续使用客户端库 APIS 访问实际的 API 方法?

4

1 回答 1

3

您应该能够将GoogleAuthUtil.getToken(来自 Google Play 服务)的结果直接传递给GoogleCredential.setAccessToken(来自 Google API 客户端库)。

后者的示例可以在TasksSample.java中找到。事实上,由于AccountManager.getAuthTokenGoogleAuthUtil.getTokenAPI 非常相似,除了异步与同步的区别外,您应该能够修改 Tasks 示例以使用 Google Play 服务,而不会有太大的困难。

一些非常粗略的伪代码是:

...
// this should all be in a separate thread (e.g. AsyncTask)
final String token = GoogleAuthUtil.getToken(context, email, scope);
GoogleCredential credential = new GoogleCredential();
credential.setAccessToken(token);

Tasks service = new Tasks.Builder(transport, jsonFactory, credential)
    .setApplicationName("Google-TasksAndroidSample/1.0")
    .setJsonHttpRequestInitializer(new GoogleKeyInitializer(ClientCredentials.KEY))
    .build();

List<String> result = new ArrayList<String>();
Tasks.TasksOperations.List listRequest = service.tasks().list("@default");
listRequest.setFields("items/title");
List<Task> tasks = listRequest.execute().getItems();
...
于 2012-11-02T14:26:38.223 回答