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 Youtube для Android. Здесь Ибрагим Улукая говорит, что лучше использовать GoogleAccountCredential
. Для того, что я понял (Доступ к API Google - GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken(), версия Android GoogleAccountCredential
должна использовать GoogleAuthUtil
из библиотеки сервисов Google Play, поэтому было бы очень полезно упростить процесс. Я посмотрел примерный проект, предложенный Ибрагимом Улукая (https://github.com/youtube/yt-direct-lite-android), и я реализовал все так же, как и он. Но это не работает очень хорошо, поскольку я получаю это сообщение только в logcat: "Была ошибка IO: com.google.android.gms.auth.UserRecoverableAuthException: NeedPermission: null".
(Обратите внимание, что я включил все необходимые API-интерфейсы в Google Консоль и создал идентификатор клиента для своего приложения)
В этот момент я потерял.
Должен ли я использовать непосредственно GoogleAuthUtil
из библиотеки сервисов Google Play? в этом случае после получения токена как String
, как я могу использовать его с API-интерфейсами YouTubeData?
Или я должен использовать GoogleAccountCredential
? в этом случае кто-то знает, как я могу решить ошибку "NeedPersmission: null"?
---- EDIT:
подробно о том, что пытается сделать мое приложение:, являясь тем самым моим первым опытом работы с такими API-интерфейсами, я начал с простых вещей: извлекать видеоинформацию и затем воспроизводить эти видео без какой-либо аутентификации пользователя, Мне удалось сделать это довольно легко, но для моего приложения мне нужно получить доступ к пользовательским данным, в частности пользователи должны иметь возможность любить и комментировать видео.
Поэтому я начал внедрять OAuth2, пытаясь выполнить те же самые точные запросы, которые я делал раньше (получение информации о видео).
Ответы
Ответ 1
Ого. Документация по этому вопросу очень запутанна. Полное раскрытие информации, я не разработчик Android, но я разработчик Java, который работал с приложениями Google и OAuth2.
Google Play или Google Play? Во-первых, Google Play Services будет доступна только на устройствах Android с установленными сервисами Google Play (а не на устройствах OUYA, Amazon и т.д.). Состояние Google, что "библиотека Google Play даст вам наилучшие результаты и опыт".
Существует множество дискуссий (например здесь, здесь) от реальных разработчиков Android, которые перечисляют различные достоинства из Google Play стихи других методов. Я бы предположил, что, как только вы сможете заставить свое приложение работать с использованием одного метода, тогда вам будет достаточно легко изменить, если вы этого захотите.
В большинстве примеров кода используется учетная запись Android AccountManager ( "Задачи и календари" ), поэтому я буду показывать.
Пример кода выглядит так, как будто это может быть простой поиск, я бы предположил, что многие из взаимодействий API YouTube не требуют OAuth2, в другом коде я видел эту пустую реализацию HttpRequestInitializer, называемую функцией no-op, (например, GeolocationSearch.java).
Похоже, вы хотите получить доступ к функциям YouTube API, которым нужны учетные данные учетной записи. Вы можете сделать что-то похожее на этот пример 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();
Надеюсь, это поможет.
Ответ 2
В методе инициализации 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();
Помните пробел после носителя в значении заголовка авторизации