API данных Youtube с OAuth2.0 на Android

Я пытаюсь использовать API YouTubeData с аутентификацией OAuth 2.0 на Android, и я немного борюсь с ним.

Я много искал в Интернете, но для реализации Android не так много.

Прежде всего, мне непонятно, что лучший способ получить токен OAuth. В документе они предполагают, что для Android лучше получить его с помощью сервиса Google Play. Это правда? Если да, это должно быть довольно тривиально после этого руководства: https://developers.google.com/android/guides/http-auth . Но в этот момент у меня будет токен в объекте String . Как я должен использовать его с API-интерфейсом YouTubeData? Должен ли я разместить его где-нибудь в YouTube.Builder ?

 YouTube youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, new HttpRequestInitializer() { public void initialize(HttpRequest request) throws IOException { } }).setApplicationName("AppName").build(); 

Если да, то кто-нибудь знает, где?

Поиск в StackOverflow я столкнулся с этим вопросом: что делать после получения Auth Token – API для Android Youtube . Здесь Ибрагим Улукая говорит, что лучше использовать GoogleAccountCredential . Для того, что я понял ( доступ к API Google – GoogleAccountCredential.usingOAuth2 vs. GoogleAuthUtil.getToken () ), версия GoogleAccountCredential для GoogleAccountCredential должна использовать GoogleAuthUtil предоставленную из GoogleAuthUtil сервисов Google Play, поэтому было бы очень полезно упростить процесс. Я рассмотрел образец проекта, предложенный Ибрагимом Улукая ( https://github.com/youtube/yt-direct-lite-android ), и я реализовал все так же, как и он. Но это не работает очень хорошо, поскольку я получаю это сообщение только в logcat: «Была ошибка IO: com.google.android.gms.auth.UserRecoverableAuthException: NeedPermission: null».
(Обратите внимание, что я включил все необходимые API в консоли Google и создал идентификатор клиента для своего приложения)

На данный момент я немного потерян.
Следует ли мне напрямую использовать GoogleAuthUtil из GoogleAuthUtil Google Play? В этом случае после получения маркера как String как я могу использовать его с API-интерфейсами YouTubeData?
Или я должен использовать GoogleAccountCredential ? В этом случае кто-то знает, как я могу решить ошибку «NeedPersmission: null»?

—- РЕДАКТИРОВАТЬ:

Подробно о том, что пытается сделать мое приложение: будучи моим первым опытом работы с такими API-интерфейсами, я начал с простых вещей: извлекать видеоинформацию и затем воспроизводить эти видео без какой-либо аутентификации пользователей. Мне удалось сделать это довольно легко, но для моего приложения мне нужно получить доступ к пользовательским данным, в частности пользователи должны иметь возможность любить и комментировать видео. Поэтому я начал внедрять OAuth2, пытаясь выполнить те же самые точные запросы, которые я делал раньше (получить информацию о видео).

Solutions Collecting From Web of "API данных Youtube с OAuth2.0 на Android"

Вау. Документация по этому вопросу очень запутанна. Полное раскрытие информации, я не разработчик Android, но я разработчик Java, который работал с приложениями Google и OAuth2.

Google Play или Google Play? Во-первых, службы Google Play будут доступны только на устройствах Android с установленными сервисами Google Play (а не на устройствах OUYA, Amazon и т. Д.). Google заявляет, что « библиотека Google Play даст вам наилучшую производительность и опыт ».

Существует множество дискуссий (например, здесь , здесь ) от реальных разработчиков Android, в которых перечислены различные достоинства Google Play, а также другие методы. Я бы предположил, что, как только вы сможете заставить приложение работать с использованием одного метода, тогда вам будет достаточно легко изменить, если вы этого желаете.

В большинстве примеров кода используется учетная запись Android AccountManager (Задачи и календари являются любимыми примерами), поэтому я буду показывать.

Ваш примерный код выглядит так, как будто это может быть простой поиск, я бы предположил, что многие из взаимодействий API YouTube не требуют OAuth2, в другом коде я видел эту пустую реализацию HttpRequestInitializer, называемую функцией no-op. (Например, GeolocationSearch.java ).

Похоже, вы хотите получить доступ к функциям API YouTube, которым необходимы учетные данные учетной записи. Вы можете сделать что-то подобное этому календарю Android Calendar ( CalendarSampleActivity.java ), за исключением YouTube, как пример ответа отсюда .

 // Google Accounts credential = GoogleAccountCredential.usingOAuth2(this, YouTubeScopes.YOUTUBE, YouTubeScopes.YOUTUBE_READONLY); SharedPreferences settings = getPreferences(Context.MODE_PRIVATE); credential.setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null)); // YouTube client service = new com.google.api.services.youtube.YouTube.Builder(transport, jsonFactory, credential) .setApplicationName("Google-YouTubeAndroidSample/1.0").build(); 

Надеюсь, это поможет.

В методе инициализации HttpRequestInitializer вы можете установить заголовки запроса. Согласно документу Googles для Oath2 для устройств https://developers.google.com/identity/protocols/OAuth2ForDevices, если у вас есть токен доступа, вы должны поместить его в HTTP-заголовок Authorization: Bearer.

 YouTube youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, new HttpRequestInitializer() { public void initialize(HttpRequest request) throws IOException { request.put("Authorization", "Bearer " + yourAccessTokenString); } }).setApplicationName("AppName").build(); 

Помните пробел после носителя в значении заголовка авторизации