API de données Youtube avec OAuth2.0 sur Android

j'essaie d'utiliser L'API YouTubeData avec l'authentification OAuth 2.0 sur Android, et je suis un peu en difficulté avec elle.

j'ai cherché beaucoup en ligne, mais il n'y a pas beaucoup d'aide pour L'implémentation Android.

tout d'Abord, il n'est pas clair pour moi, quelle est la meilleure façon d'obtenir un jeton OAuth. Dans le doc, ils suggèrent que pour Android est mieux de l'obtenir en utilisant les services Google Play lib. Est-ce vrai? si oui, il devrait être assez trivial suivant ce guide: https://developers.google.com/android/guides/http-auth . Mais à ce point j'aurai le jeton dans un objet String .. comment l'utiliser avec L'API YouTubeData? Dois-je le placer quelque part dans le 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();

si oui, quelqu'un sait-il où?

recherche sur StackOverflow je suis tombé sur cette question: Que faire après avoir obtenu Auth Token - API Youtube Android . Ici Ibrahim Ulukaya dit qu'il est préférable d'utiliser GoogleAccountCredential . Pour ce que j'ai compris ( accès à L'API Google - GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken () ) la version Android de GoogleAccountCredential doit utiliser le GoogleAuthUtil fourni par Google Play services lib, il pourrait donc être très utile de simplifier le processus. J'ai regardé le projet d'échantillon suggéré par Ibrahim Ulukaya ( https://github.com/youtube/yt-direct-lite-android ) et j'ai tout mis en œuvre comme lui. Mais cela ne semble pas très bien fonctionner car je n'obtiens ce message que dans le logcat: "There was an IO error: com.Google.Android.gms.auth.UserRecoverableAuthException: NeedPermission: null".

(Notez que j'ai activé tous les API nécessaires sur la Console Google, et créé le code Client de mon application)

à ce stade, je suis un peu perdu.

Dois-je utiliser directement le GoogleAuthUtil de la liste des services Google Play? dans ce cas, une fois obtenu le jeton comme un String Comment puis-je l'utiliser avec les API YouTubeData?

Ou devrais-je utiliser le GoogleAccountCredential ? dans ce cas, quelqu'un sait comment résoudre l'erreur "NeedPersmission : null"?

---- modifier:

détails sur ce que mon application essaie de faire: étant ma première expérience avec ce type d'API j'ai commencé à partir de la chose facile: Récupérer des informations vidéo et ensuite lire ces vidéos, sans aucune authentification de l'utilisateur. J'ai réussi à le faire assez facilement, mais pour mon application j'ai besoin d'accéder aux données de l'utilisateur, en particulier les utilisateurs doivent être capables d'aimer et de commenter des vidéos. J'ai donc commencé à implémenter OAuth2, en essayant de faire exactement les mêmes requêtes que je faisais avant (récupérer des informations vidéo).

27
demandé sur Community 2015-06-27 13:10:02

2 réponses

Wow. La documentation à ce sujet est très confuse. Divulgation complète, Je ne suis pas un développeur Android, mais je suis un développeur Java qui a travaillé avec googleapps et OAuth2.

Google Play ou pas Google Play? Tout d'abord, les services Google Play ne seront disponibles que sur les appareils Android avec les services Google Play installés (donc pas OUYA, Appareils Amazon, etc.). Google état que " le Google Play bibliothèque va vous donner le meilleur possible de la performance et de l'expérience. ".

Il ya de nombreuses discussions (par exemple ici , ici ) de véritables Développeurs Android qui énumèrent les divers mérites de Google Play versets autres techniques. J'imagine qu'une fois que vous êtes en mesure de faire fonctionner votre application en utilisant une méthode, alors il devrait être assez facile de changer si vous le souhaitez.

une grande partie du code d'exemple à propos des utilisations le Gestionnaire de comptes Android (tâches et calendriers étant des exemples préférés) de sorte que ce est ce que je vais montrer.

votre exemple de code ressemble à ce qu'il pourrait être pour une simple recherche, je suppose que beaucoup d'interactions de L'API YouTube ne nécessitent pas OAuth2, dans d'autres code j'ai vu cette implémentation vide HttpRequestInitializer appelé une fonction no-op. (par exemple GeolocationSearch.java ).

on dirait que vous voulez accéder à Les opérations de l'API YouTube qui ont besoin d'identifiants de Compte. Vous pouvez faire quelque chose de similaire à cet exemple de calendrier Android ( CalendarSampleActivity.java ) sauf avec YouTube, comme la réponse d'exemple de ici .

// 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();

j'espère que cela aidera.

6
répondu Mark McLaren 2017-05-23 12:32:02

dans la méthode initialize du HttpRequestInitializer, vous pouvez définir les en-têtes de la requête. Selon Googles documention pour Oath2 pour les dispositifs https://developers.google.com/identity/protocols/OAuth2ForDevices si vous avez un token d'accès, vous devez le mettre dans L'en-tête HTTP Authorization: Holder.

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();

Souvenez-vous de l'espace après le Porteur dans l'en-tête d'autorisation de la valeur

2
répondu Malthan 2015-07-01 19:24:55