2016-06-08 215 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提供這種能力。我認爲通過關鍵詞篩選搜索的能力對於減少請求大小非常重要。