2012-11-02 155 views
3

我想我的应用程序与谷歌的API集成,说谷歌的任务,使用谷歌Play服务,与谷歌的任务API

Google Play Services之前,我会用Google APIs Client Library为Java和AccountManager检索和访问OAuth令牌为API。

这个methos的优点是我可以:

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

的缺点是:

  • 验证对话框是非常糟糕的前瞻性和混乱给用户(如谷歌IO Play服务,会议提到的)
  • 我将需要添加都挺对应用程序的权限。

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

  • 没有应用程序的权限,需要为它直接从游戏服务所,然后最终从
  • 它也提供给用户的新的美丽AccountPicker使认证更清晰的用户。

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

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

回答

3

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

后者的一个例子可以在TasksSample.java中找到。实际上,由于AccountManager.getAuthTokenGoogleAuthUtil.getToken API非常相似,除了异步与同步的区别之外,您应该可以修改该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(); 
... 
+1

由于它的工作,我不得不做出一些其他的变化,所以我会改变的例子,并很快发布 –