2013-02-25 3 views
3

В документации Google для OAuth2, построение GoogleCredential с токен аутентификации описано здесь:GoogleCredential не будет строить без GoogleCredential.Builder

Credential and Credential Store

В частности, этот фрагмент кода предлагается:

GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken); 
Plus plus = Plus.builder(new NetHttpTransport(), new JacksonFactory()) 
    .setApplicationName("Google-PlusSample/1.0") 
    .setHttpRequestInitializer(credential) 
    .build() 

Когда я пытаюсь построить на этом пути в GoogleCredential я сжато проинформировал:

Please use the Builder and call setJsonFactory, setTransport and setClientSecrets 

в поле сообщения об исключении. Я загрузил библиотеки на прошлой неделе, поэтому я не уверен, что происходит. Является ли документация просто устаревшей, и если да, то какой метод заменил ее как наилучшую практику для создания из существующего токена аутентификации и обновления токена?

Кстати, причина использования Builder не была в том, что там не было секретности клиента, предоставляемой консолью приложений Google; он говорит, что они больше не предоставляются для приложений Android и тому подобного. setClientSecrets(...), поэтому не может быть вызван.

+0

Вы поняли это? У меня такая же проблема. –

+0

Мы так и не сделали. Мы закончили тем, что разместили документы на управляемом пользователем графике Google, а затем * разделили их на чистый управляемый машиной привод Google, который дал нам тот же эффективный контроль. –

+0

Хорошо, что это сработало для меня в чем-то ... опубликует как ответ. Очевидно, теперь вам не поможет, но для некоторых других зрителей, таких как я .. :) –

ответ

-3

Проверьте образец Quickstart Android в документации Google Drive SDK шаг за шагом инструкции для правильной установки GoogleCredential:

https://developers.google.com/drive/quickstart-android

+0

Использует 'GoogleAccountCredential', который предназначен для учетной записи пользователя на телефоне. Я хочу сделать учетную запись, управляемую приложением, с помощью обычного диска, как описано здесь: https://developers.google.com/drive/service-accounts#use_regular_google_accounts_as_application-owned_accounts. У меня есть токен аутентификации и токен обновления, и теперь я имею проблема с получением «Credential» от них. –

+0

Фактически 'GoogleCredential' не отображается на этой странице * вообще *, просто' GoogleAccountCredential'. –

+0

Затем вы можете проверить быстрый запуск Java для этого: https://developers.google.com/drive/quickstart-java –

0

Я встретил эту проблему недавно и выяснили решение для моего дела.

Условия использования: программа работает на Android 4.0 и не использует SDK Google Диска, поскольку она не позволяет нашей программе читать файлы на Google Диске, которые не созданы нашей программой. Я использую com.google.api.services.drive. * И com.google.api.client.googleapis.auth.oauth2. * Библиотеки Java.

код возникла эта проблема, как показано ниже:

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
     httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE)) 
    .setAccessType("offline") 
    .setApprovalPrompt("auto").build(); 


GoogleTokenResponse response = null; 
try { 
    response = flow.newTokenRequest(authorizationCode).setRedirectUri(REDIRECT_URI).execute(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response); 

но выше код работает хорошо, если параметр setAccessType («онлайн»);

, и разрешение по этому вопросу зависит от того, какой тип доступа вы хотите.

Если вы хотите использовать «onLine» как тип доступа, то использовать setFromTokenResponse() должно быть нормально.

если вы хотите «автономный режим» в качестве AccessType, то вам нужно использовать код удара:

GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport) 
     .setJsonFactory(jsonFactory) 
     .setClientSecrets(CLIENT_ID, CLIENT_SECRET) 
     .build() 
     .setFromTokenResponse(response); 

Одно нужно отметить, это то, что вам нужно, чтобы сохранить настройки, чтобы быть последовательным для GoogleTokenResponse в AccessType и Создание GoogleAuthorizationCodeFlow.

0

Вам необходимо настроить свой Android-ключ приложения в Google Dev Console.

  1. Выберите проект, выберите API & Auth, затем выберите Учетные данные
  2. Создать новый идентификатор клиента (хотя есть и другие клиентские идентификаторы)
  3. Выберите установленное приложение -> Android
  4. Заполните ваше имя пакета и SHA1 правильно
  5. Создать новый ключ (хотя есть и другие клиентские ключи)
  6. Выбор Android ключа
  7. заливку в SHA1; р ackageName вот так: 45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0;com.example

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

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