Youtube 数据 API,OAuth2.0 Android

Youtube Data API with OAuth2.0 on Android

我正在尝试在 Android 上使用带有 OAuth 2.0 身份验证的 YouTubeData API,但我有点吃力。

我在网上搜索了很多,但对Android实现的帮助不大。

首先,我不清楚获取 OAuth 令牌的最佳方式是什么。在文档中,他们建议 Android 最好使用 Google Play 服务库来获取它。真的吗?如果是,按照本指南应该很简单:https://developers.google.com/android/guides/http-auth。 但在这一点上,我将在 String 对象中拥有令牌。我应该如何将它与 YouTubeData API 一起使用?我应该把它放在 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();

如果是,有人知道在哪里吗?

在 Whosebug 上搜索时,我遇到了这个问题:What to do after getting Auth Token - Android Youtube API. Here Ibrahim Ulukaya says it's better to use GoogleAccountCredential. For what i've understood (Access to Google API - GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken()) the Android version of GoogleAccountCredential should use the GoogleAuthUtil provided from the Google Play services lib, so it could be pretty useful to simplify the process. I've looked at the sample project suggested from Ibrahim Ulukaya (https://github.com/youtube/yt-direct-lite-android),并且我已经像他一样实现了所有内容。但它似乎不太有效,因为我只在 logcat: "There was an IO error: com.google.android.gms.auth.UserRecoverableAuthException: NeedPermission : null" 中收到此消息。
(请注意,我已经在 Google 控制台上启用了所有必需的 API,并为我的应用创建了客户端 ID)

此时我有点迷路了。
我应该直接使用 Google Play 服务库中的 GoogleAuthUtil 吗?在这种情况下,一旦获得作为 String 的令牌,我如何将它与 YouTubeData API 一起使用?
或者我应该使用 GoogleAccountCredential 吗?在这种情况下,有人知道我该如何解决 "NeedPersmission : null" 错误?

---- 编辑:

有关我的应用程序正在尝试执行的操作的详细信息: 这是我第一次体验这种 APIs 我从简单的事情开始:检索视频信息然后播放这些视频,无需任何用户身份验证。我设法很容易地做到了这一点,但为了我的应用程序的目的,我需要访问用户数据,特别是用户必须能够喜欢和评论视频。 所以我开始实施 OAuth2,尝试执行与之前完全相同的查询(检索视频信息)。

在 HttpRequestInitializer 的初始化方法中,您可以设置请求的 headers。根据 Google 的 Oath2 for devices https://developers.google.com/identity/protocols/OAuth2ForDevices 文档,如果你有一个访问令牌,你应该把它放在 Authorization: Bearer HTTP header.

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

记住授权中Bearer后面的space header值

哇。关于此的文档非常混乱。完全公开,我不是 Android 开发人员,但我是 Java 开发人员,曾使用 Google 应用程序和 OAuth2。

Google玩还是不玩Google玩?首先,Google Play 服务将仅在安装了 Google Play 服务的 Android 设备上可用(因此 OUYA、Amazon 设备等不可用)。 Google stateGoogle Play 库将为您提供最佳性能和体验。”。

来自实际 Android 开发人员的大量讨论(例如 here, here)列出了 Google Play 与其他技术的各种优点。我想,一旦您能够使用一种方法使您的应用程序正常工作,那么如果您愿意,它应该很容易改变。

关于使用 Android AccountManager 的大部分示例代码(任务和日历是我最喜欢的示例),所以这就是我要展示的内容。

您的示例代码看起来可能用于简单搜索,我猜想许多 YouTube API 交互不需要 OAuth2,在其他代码中我看到了这个空的 HttpRequestInitializer 实现作为空操作函数。 (例如 GeolocationSearch.java)。

听起来您想要访问需要帐户凭据的 YouTube API 操作。您可以执行类似于此 Android 日历示例 (CalendarSampleActivity.java) except with YouTube, like the example answer from here.

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

希望对您有所帮助。