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

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

Я много искал в интернете, но нет большой помощи для реализации Android.

во-первых, мне не ясно, какой лучший способ получить токен OAuth. В документе они предполагают, что для Android лучше получить его с помощью Google Play services lib. Это правда? если да, то это должно быть довольно тривиально после этого руководство: https://developers.google.com/android/guides/http-auth. Но в этот момент у меня будет токен в

2 ответов


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

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

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

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

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

похоже, вы хотите получить доступ к операциям API YouTube, которым нужны учетные данные учетной записи. Вы можете сделать что-то подобное этому Пример календаря для Андроид (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();

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


в методе initialize HttpRequestInitializer вы можете установить заголовки запроса. Согласно Googles documention для 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();

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