【问题标题】:Access Youtube API访问 Youtube API
【发布时间】:2017-07-17 04:42:03
【问题描述】:

我想使用Youtube API 来获取用户的订阅列表。它需要 oauth。

我了解到实现 google 登录将使访问此 API 变得更容易

我按照 Google 的文档进行操作,现在我可以正常登录了

I have these files now

我的问题:

1) 我需要使用哪个样本,IdTokenActivity.javaRestApiActivity.java

2) 如何使用示例代码访问 Youtube API?它没有说,文档令人困惑

【问题讨论】:

    标签: java android oauth-2.0 youtube-api google-signin


    【解决方案1】:
    • 我需要使用哪个样本,IdTokenActivity.javaRestApiActivity.java

    IdTokenActivity.java 旨在检索id_tokenid_token 是一个 JWT 令牌,旨在发送到后端以验证用户是否为真正的(受信任的)Google 用户。您可以找到有关后端流程here 的更多信息。

    RestApiActivity.java 用于使用 Google API,这是您正在尝试做的事情。

    • 如何使用示例代码访问 Youtube API?

    步骤如下:

    1. 转到Google Signin setup for Android,下载google-services.json并将其放入您的app文件夹中

    2. google developer console 中启用 Youtube 数据 API

    3. 将以下内容添加到应用程序build.gradle

      compile 'com.google.android.gms:play-services-auth:10.0.1'
      compile 'com.google.api-client:google-api-client-android:1.22.0' exclude module: 'httpclient'
      compile 'com.google.apis:google-api-services-youtube:v3-rev182-1.22.0'
      

    apply plugin: 'com.google.gms.google-services' 位于文件底部

    1. 将以下内容更新为您的顶级build.gradle

      dependencies {
          classpath 'com.google.gms:google-services:3.0.0'
      }
      
    2. 在您的项目中包含RestApiActivity.java 并更新以下内容:

      // Scope for reading user's contacts
      private static final String YOUTUBE_SCOPE = "https://www.googleapis.com/auth/youtube";
      
      ...
      
      // Configure sign-in to request the user's ID, email address, basic profile,
      // and readonly access to contacts.
      GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
              .requestScopes(new Scope(YOUTUBE_SCOPE))
              .requestEmail()
              .build();
      

    当客户端通过身份验证时(handleSignInResult),请求订阅列表如下:

    /**
     * AsyncTask that uses the credentials from Google Sign In to access Youtube subscription API.
     */
    private class GetSubscriptionTask extends AsyncTask<Account, Void, List<Subscription>> {
    
        @Override
        protected void onPreExecute() {
            showProgressDialog();
        }
    
        @Override
        protected List<Subscription> doInBackground(Account... params) {
            try {
                GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(
                        RestApiActivity.this,
                        Collections.singleton(YOUTUBE_SCOPE));
                credential.setSelectedAccount(params[0]);
    
                YouTube youtube = new YouTube.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
                        .setApplicationName("Google Sign In Quickstart")
                        .build();
    
                SubscriptionListResponse connectionsResponse = youtube
                        .subscriptions()
                        .list("snippet")
                        .setChannelId("UCfyuWgCPu5WneQwuLBWd7Pg")
                        .execute();
    
                return connectionsResponse.getItems();
            } catch (UserRecoverableAuthIOException userRecoverableException) {
                Log.w(TAG, "getSubscription:recoverable exception", userRecoverableException);
                startActivityForResult(userRecoverableException.getIntent(), RC_RECOVERABLE);
            } catch (IOException e) {
                Log.w(TAG, "getSubscription:exception", e);
            }
    
            return null;
        }
    
        @Override
        protected void onPostExecute(List<Subscription> subscriptions) {
            hideProgressDialog();
    
            if (subscriptions != null) {
                Log.d(TAG, "subscriptions : size=" + subscriptions.size());
    
                // Get names of all connections
                for (int i = 0; i < subscriptions.size(); i++) {
                    Log.v(TAG, "subscription : " + subscriptions.get(i).getId());
                }
            } else {
                Log.d(TAG, "subscriptions: null");
                mDetailTextView.setText("None");
            }
        }
    }
    

    用 :

    代替 GetContacts 启动
    new GetSubscriptionTask().execute(mAccount);
    

    你可以找到一个完整的例子here

    【讨论】:

    • 非常感谢。我花了将近整整两天的时间试图弄清楚。
    猜你喜欢
    • 2016-11-09
    • 2013-08-04
    • 1970-01-01
    • 2016-04-09
    • 2012-06-04
    • 2019-06-22
    • 2014-11-19
    • 2014-02-26
    • 2016-02-25
    相关资源
    最近更新 更多