2016-06-08 209 views
5

在尝试使用用户的Google帐户获取联系人时,我在使用人API后面临一些问题。它只返回列出的所有电子邮件地址中的几个。访问令牌和所有范围已经正确设置。 代码如下:谷歌与联系人的API API

People peopleService = new People.Builder(httpTransport, jsonFactory, credential) 
        .build(); 
ListConnectionsResponse response = peopleService.people().connections().list("people/me") 
        .setPageSize(500).setSortOrder("FIRST_NAME_ASCENDING") 
        .setAccessToken(tokenResponse.getAccessToken()) 
        .setAlt("json") 
        .setRequestMaskIncludeField("person.names,person.emailAddresses,person.phoneNumbers") 
        . execute(); 
    connections = response.getConnections(); 

取而代之的是,如果我使用谷歌的API接触,然后我越来越没有电子邮件地址,比对people.Code接触API的:

URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full"); 
    ContactFeed resultFeed = myService.getFeed(feedUrl, ContactFeed.class); 

    // Print the results 
    System.out.println(resultFeed.getTitle().getPlainText()); 
    for (ContactEntry entry : resultFeed.getEntries()) { 
      .... 
      ..... 
      ....... 
} 

我想知道如果他们之间有什么区别,哪一个我必须用于更好的结果,或者我错过了什么。请建议。谢谢..!!

+0

查看https://people.googleapis.com/$discovery/rest?version=v1为您提供支持的架构和方法。 – darewreck

回答

3

人API是最新的。 People API通过Google's blog announcement阅读,简化了对Google+ API和Contacts API进行单独调用所需的内容。现在你只需要使用一个。

“新人们API使用最新的协议和技术,并 最终将取代其使用的GData 协议联系人API”

当得到用户的list of connections,一定要指定correct scopes当使用它。

https://www.googleapis.com/auth/contacts - 要求为您的应用程序授予对已验证用户的Google通讯录中联系人的读写权限。 https://www.googleapis.com/auth/contacts.readonly - 请求向您的应用授予对经过身份验证的用户的Google通讯录中联系人的读取访问权限。

在People API和Contacts API之间检查此link for similarities and differences

+0

我已经正确添加了所有的范围,但人们api没有给予太多的不。作为联系人API的联系人的电子邮件地址。 – Ankur1994a

1

我不知道是否有与Java代码的任何问题,但如果你看一下将送出请求时,它应该是这样的:

网址:https://content-people.googleapis.com/v1/people/me/connections?pageSize=300&requestMask.includeField=person.names%2Cperson.email_addresses&sortOrder=FIRST_NAME_ASCENDING&key=

我能使用正确的电子邮件和名称获取所有联系人。如果你谷歌“管理谷歌联系人”,你会看到一个联系人列表。从那里取这个数字,并打印出应该匹配的连接数。您只需确保pageSize足够大或者您必须处理分页以获取所有联系人。

另外我意识到requestMask.includeField对于您放置的参数和空间非常敏感。 “person.name,person.email_addresses”工作和“person.name,person.email_addresses”没有。

使用旧的联系人API,你可以查询q参数,我不认为人api提供这种能力。我认为通过关键词筛选搜索的能力对于减少请求大小非常重要。