【问题标题】:Using Google Play services with Google Tasks API通过 Google Tasks API 使用 Google Play 服务
【发布时间】:2012-10-23 04:56:45
【问题描述】:

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

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

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

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

缺点是:

  • 身份验证对话框非常难看,并且让用户感到困惑(如 Google IO Play 服务会话中所述)
  • 我需要为应用添加各种权限。

我猜“Google Play 服务”改变了这一切:

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

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

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

【问题讨论】:

    标签: android google-api-java-client google-play-services


    【解决方案1】:

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

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

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

    ...
    // 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();
    ...
    

    【讨论】:

    • 谢谢它的工作,我不得不做一些其他的改变,所以我会修改这个例子并尽快发布它
    猜你喜欢
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多