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, пытаясь выполнить те же самые точные запросы, которые я делал раньше (получение информации о видео).

+27
источник поделиться
2 ответа

Ого. Документация по этому вопросу очень запутанна. Полное раскрытие информации, я не разработчик 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();

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

+6
источник

В методе инициализации 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();

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

+2
источник

Связанные вопросы


Похожие вопросы

Посмотрите другие вопросы по меткам или Задайте вопрос