使用Google Play服务与Google Tasks API

3
我正在尝试将我的应用与Google API集成,比如Google Tasks。
Google Play服务之前,我会使用Java Google API客户端库AccountManager来检索和访问API的OAUTH令牌。
这种方法的优点是我可以顺利地使用Java客户端API来访问应用程序可能需要的所有API方法。
缺点是:
- 认证对话框非常难看且容易混淆用户(如在Google IO Play服务会议中所述)。 - 我需要向应用程序添加各种权限。
我猜“Google Play服务”改变了一切。
  • 不需要应用程序权限,它直接从Play服务获取,最终从用户那里获取。
  • 它还提供了新的漂亮的AccountPicker,使认证对用户更加清晰。

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

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

1个回答

3
您应该能够直接将来自Google Play服务的 GoogleAuthUtil.getToken 结果传递给Google APIs客户端库中的 GoogleCredential.setAccessToken 。您可以在TasksSample.java中找到后者的示例。实际上,由于 AccountManager.getAuthToken GoogleAuthUtil.getToken API非常相似,除了异步与同步之间的区别外,您应该能够轻松修改该任务示例以使用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();
...

1
谢谢,它起作用了。我还需要进行一些其他更改,所以我将修改示例并很快发布。 - Hazem Farahat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接