web-dev-qa-db-ja.com

Android)でOAuth2.0を使用したYoutube Data API

AndroidでOAuth 2.0認証を使用してYouTubeDataAPIを使用しようとしていますが、少し苦労しています。

私はオンラインでたくさん検索しましたが、Androidの実装にはあまり役に立ちません。

まず第一に、OAuthトークンを取得するための最良の方法は何であるかは私にはわかりません。ドキュメントでは、Androidの方が取得する方が良いと彼らは示唆していますGoogle Play開発者サービスライブラリを使用します。それは本当ですか?はいの場合、このガイドに従うのはかなり簡単なはずです: https://developers.google.com/Android/guides/http-auth 。この時点で、トークンはStringオブジェクトにあります..YouTubeDataAPIでどのように使用する必要がありますか?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で検索すると、この質問に出くわしました: 認証トークンを取得した後にどうするか-Android Youtube API 。ここでIbrahim Ulukayaは、GoogleAccountCredential。私が理解したことについて( Google APIへのアクセス-GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken() )AndroidバージョンのGoogleAccountCredentialは、GooglePlay開発者サービスライブラリから提供されるGoogleAuthUtilを使用する必要があるため、プロセスを簡素化するのに非常に役立ちます。IbrahimUlukayaから提案されたサンプルプロジェクトを確認しました( https:/ /github.com/youtube/yt-direct-lite-Android )そして私は彼と同じようにすべてを実装しましたが、logcatでこのメッセージを取得しているだけなので、うまく機能していないようです: 「IOエラー:com.google.Android.gms.auth.UserRecoverableAuthException:NeedPermission:null」がありました。
(Googleコンソールで必要なすべてのAPIを有効にし、アプリのクライアントIDを作成したことに注意してください)

この時点で私はちょっと迷っています。
GooglePlay開発者サービスライブラリのGoogleAuthUtilを直接使用する必要がありますか?この場合、トークンをStringとして取得したら、YouTubeData APIでどのように使用できますか?
またはGoogleAccountCredentialを使用する必要がありますか?この場合、誰かが「NeedPersmission:null」エラーを解決する方法を知っていますか?

----編集:

私のアプリがやろうとしていることの詳細:これは私が簡単なものから始めたこの種のAPIの私の最初の経験です:ビデオ情報を取得してからユーザー認証なしでそれらのビデオを再生します。私はそれをかなり簡単に行うことができましたが、私のアプリの目的のために、ユーザーデータにアクセスする必要があります。特に、ユーザーはビデオを高く評価してコメントできる必要があります。そこで、OAuth2の実装を開始し、以前とまったく同じクエリを実行しようとしました(ビデオ情報を取得します)。

ワオ。これに関するドキュメントは非常に紛らわしいです。完全な開示、私はAndroid開発者ではありませんが、GoogleアプリとOAuth2を使用したJava開発者です。

グーグルプレイかグーグルプレイか?まず、GooglePlay開発者サービスはAndroid Google Play開発者サービスがインストールされているデバイス(OUYA、Amazonデバイスなどではない)でのみ利用可能です) Googleの状態 その " Google Playライブラリは、可能な限り最高のパフォーマンスとエクスペリエンスを提供します。 "。

実際のAndroid Google Playと他のテクニックのさまざまなメリットをリストした開発者からの多くの議論(例 ここここ )があります。I 1つの方法を使用してアプリケーションを機能させることができれば、必要に応じて簡単に変更できるはずです。

に関するサンプルコードの多くはAndroid AccountManager(タスクとカレンダーがお気に入りの例です)を使用しているため、これを紹介します。

あなたのサンプルコードは単純な検索用のように見えます。YouTubeAPIインタラクションの多くはOAuth2を必要としないと思います。他のコードでは、この空のHttpRequestInitializer実装がno-op関数と呼ばれています。 (例: GeolocationSearch.Java )。

アカウントの認証情報が必要なYouTubeAPIオペレーションにアクセスしたいようです。 here の回答例のように、YouTubeを除いて、これと同様のことを行うことができますAndroidカレンダーの例( CalendarSampleActivity.Java )。

// 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
Mark McLaren

HttpRequestInitializerのinitializeメソッドで、リクエストのヘッダーを設定できます。デバイス用のOath2に関するGoogleのドキュメントによると https://developers.google.com/identity/protocols/OAuth2ForDevices アクセストークンがある場合は、Authorization:BearerHTTPヘッダーに配置する必要があります。

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
Malthan