2015-10-20 6 views
1

У меня проблема с API контактов Google v3. Я проиллюстрирую ниже шаги, которые я сделал.API контактов Google v3, JAVA GET ALL CONTACT «contactFeed.getEntries() пуст»!

  1. Создание client_id, file.p12 через консоль Google.
  2. Реализация механизма аутентификации:

    общественного ContactsExample() {

    File p12 = new File("exampleContacts.p12"); 
    
        HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
        GoogleCredential credential = new GoogleCredential.Builder() 
          .setTransport(httpTransport) 
          .setJsonFactory(JacksonFactory.getDefaultInstance()) 
          .setServiceAccountId("[email protected]") 
          .setServiceAccountPrivateKeyFromP12File(p12) 
          .setServiceAccountScopes(Collections.singleton("https://www.google.com/m8/feeds/")) 
          .build(); 
    
    
        if (!credential.refreshToken()) { 
         throw new RuntimeException("Failed OAuth to refresh the token"); 
        } 
        service.setOAuth2Credentials(credential); 
    
        printAllContacts(service); 
    

    }

  3. индексирование моих контактов:

Запрос cQuery = новый запрос (новый Java .net.URL ("https://www.google.com/m8/feeds/contacts/default/full")); cQuery.setMaxResults (10);

  ContactFeed feed = service.getFeed(cQuery, ContactFeed.class); 

      for (ContactEntry contact : feed.getEntries()) { 
       System.out.println("name: " + contact.getTitle().getPlainText()); 
      } 

Когда я выполнить ContactFeed подача = service.getFeed (cQuery, ContactFeed.class) ;, этот метод возвращает пустой список. Чего не хватает?

Я бы добавил, что я выполнил ту же процедуру, используя api JavaScript v3 на стороне клиента, и работает отлично.

Спасибо!

+0

Это не ясно в вашем коде, так что просто дважды проверьте: вы планируете использовать готовые к использованию библиотеки, такие как https://github.com/google/gdata-java-client или http: // cloudsponge .com/contact-importers/gmail? –

+0

Я использую первый: github.com/google/gdata-java-client – emilio86

ответ

0

В этом случае вы используете Oauth с учетной записью службы. У учетной записи службы есть две функции. 1.- Учетная запись, связанная с приложением, вы можете использовать ее для управления информацией, относящейся к приложению, например, календарю накопителей и т. Д.

2. -Использовать пользователей и действовать от их имени. Это возможно только для учетных записей домена и только после того, как администратор домена предоставил разрешения учетной записи службы для домена wide delegation of authority.

В вашем коде вы выполняете аутентификацию как учетную запись службы, а не как свою учетную запись. Даже если вы создали учетную запись службы в своей собственной консоли разработчика, учетная запись службы не имеет доступа к вашей информации.

Итак, в этом случае вы пытаетесь получить все контакты, которые есть у вашей учетной записи службы, а это нет (если вы не добавите их).

Чтобы получить все ваши контакты, вам придется использовать «нормальный» Oauth, а не учетную запись службы. Аналогично тому, как вы делали это при использовании javascript, но для installed applications.

+0

Для получения разрешения я использовал следующий метод: GoogleAuthorizationCodeRequestUrl authorizationCodeURL = новый GoogleAuthorizationCodeRequestUrl (.......). Спасибо за поддержку. – emilio86

 Смежные вопросы

  • Нет связанных вопросов^_^