Android上使用OAuth2.0的Youtube Data API

Pie*_*tti 28 android youtube-api oauth-2.0 google-play-services youtube-data-api

我正在尝试在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();
Run Code Online (Sandbox Code Playgroud)

如果有,有谁知道在哪里?

在StackOverflow上搜索我遇到了这个问题:获取Auth Token后的操作 - Android Youtube API.Ibrahim Ulukaya说这里使用起来更好 GoogleAccountCredential.根据我的理解(访问Google API - GoogleAccountCredential.usingOAuth2与GoogleAuthUtil.getToken()),Android版本GoogleAccountCredential应该使用GoogleAuthUtilGoogle Play服务库提供的内容,因此简化流程非常有用.我看过Ibrahim Ulukaya建议的示例项目(https://github.com/youtube/yt-direct-lite-android),我已经像他一样实现了一切.但它似乎不能很好地工作,因为我只在logcat中获取此消息:"存在IO错误:com.google.android.gms.auth.UserRecoverableAuthException:NeedPermission:null".
(请注意,我已在Google控制台上启用了所有必需的API,并为我的应用创建了客户端ID)

在这一点上,我有点迷茫.
我应该直接使用GoogleAuthUtilGoogle Play服务库吗?在这种情况下,一旦获得令牌,String我如何将其与YouTubeData API一起使用?
或者我应该使用GoogleAccountCredential?在这种情况下,有人知道如何解决"NeedPersmission:null"错误?

----编辑:

关于我的应用程序尝试做什么的详细信息: 这是我第一次使用这种API的经历,我从简单的东西开始:检索视频信息,然后播放这些视频,无需任何用户身份验证.我设法很容易做到这一点,但为了我的应用程序的目的,我需要访问用户数据,特别是用户必须能够喜欢和评论视频.所以我开始实现OAuth2,尝试执行我之前所做的相同的查询(检索视频信息).

Mar*_*ren 6

哇.关于此的文档非常令人困惑.完全披露,我不是Android开发人员,但我是一名使用Google应用程序和OAuth2的Java开发人员.

Google Play或不是Google Play?首先,Google Play服务仅适用于安装了Google Play服务的Android设备(因此不适用于OUYA,亚马逊设备等). 谷歌声称" Google Play图书馆将为您提供最佳的性能和体验. "

实际的Android开发人员有很多讨论(例如这里,这里)列出了Google Play与其他技术的各种优点.我想,一旦你能够使用一种方法让你的应用程序工作,那么如果你愿意,它应该很容易改变.

大多数示例代码都使用Android AccountManager(任务和日历是最喜欢的例子),这就是我要展示的内容.

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

您似乎想要访问需要帐户凭据的YouTube API操作.除了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();
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.