YouTube上的数据API与Android上的OAuth2.0

我正尝试在Android上使用YouTubeData API和OAuth 2.0身份validation,而且我很苦恼。

我在网上search了很多,但是对于Android的实现没有太大的帮助。

首先,我不清楚什么是获得OAuth令牌的最佳方式。 在文档中,他们build议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(); 

如果是的话,有谁知道在哪里?

在StackOverflow上search我遇到了这个问题: 获得authentication令牌后 – Android Youtube API该怎么做 。 这里易卜拉欣Ulukaya说使用GoogleAccountCredential更好。 对于我所了解的( 访问Google API – GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken() ),Android版本的GoogleAccountCredential应该使用Google Play服务库提供的GoogleAuthUtil ,所以对于简化stream程非常有用。 我看了一下Ibrahim Ulukayabuild议的示例项目( https://github.com/youtube/yt-direct-lite-android ),我已经实现了所有的一切。 但它似乎不工作得很好,因为我只是在logcat中获得这个消息:“有一个IO错误:com.google.android.gms.auth.UserRecoverableAuthException:NeedPermission:null”。
(请注意,我已经在Google控制台上启用了所有必需的API,并为我的应用创build了客户端ID)

在这一点上,我有点失落。
我应该直接从Google Play服务库中使用GoogleAuthUtil吗? 在这种情况下,曾经获得的令牌作为一个String我怎样才能使用YouTubeData APIs?
还是应该使用GoogleAccountCredential ? 在这种情况下,有人知道我该如何解决“NeedPersmission:null”错误?

—-编辑:

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

Solutions Collecting From Web of "YouTube上的数据API与Android上的OAuth2.0"

哇。 关于这个文件是超级混乱。 充分的披露,我不是一个Android开发者,但我是一个Java开发人员谁曾与谷歌应用程序和OAuth2。

Google Play还是不是Google Play? 首先,Google Play服务仅适用于安装了Google Play服务的Android设备(不适用于OUYA,Amazon设备等)。 Google表示“ Google Play图书馆将为您提供最佳的性能和体验 ”。

有许多来自实际Android开发者的讨论(例如这里 ),列出了Google Play经文其他技术的各种优点。 我会想象一旦你能够使用一种方法让你的应用程序工作,那么如果你愿意,它应该是一个很容易改变。

很多示例代码使用Android AccountManager(任务和日历是最喜欢的示例),这就是我将要展示的。

你的示例代码看起来可能是一个简单的search,我猜想许多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(); 

我希望这有帮助。

在HttpRequestInitializer的初始化方法中,您可以设置请求的标头。 根据设备https://developers.google.com/identity/protocols/OAuth2ForDevices Oath2的Google文档logging,如果您有访问令牌,则应将其放在Authorization:Bearer HTTP标头中。

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

请记住授权标头值中的承载之后的空间