我想使用youtube API获取用户的订阅列表。它需要Oauth。
我读到,实现Google登录将使访问此API
更容易我遵循了Google的文档,现在我获得了签名
我现在有这些文件。
我的问题:
1)我需要使用哪个样本,IdTokenActivity.java
或RestApiActivity.java
2)如何使用示例代码访问YouTube API?它没有说,文档使
- 我需要使用哪个样本,
IdTokenActivity.java
或RestApiActivity.java
?
IdTokenActivity.java
旨在检索id_token
。id_token
是JWT令牌,旨在发送到后端,以将用户身份验证为真实(受信任的)Google用户。您可以在此处找到有关后端流程的更多信息。
RestApiActivity.java
用于消耗Google API,这是您要做的。
- 如何使用示例代码访问YouTube API?
这是一个步骤:
转到Android的Google Signin设置,下载
google-services.json
并将其放入您的app
文件夹在Google开发人员控制台启用YouTube数据API
将以下内容添加到应用程序
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'
到文件的底部
将以下内容更新到您的顶级
build.gradle
:dependencies { classpath 'com.google.gms:google-services:3.0.0' }
在您的项目中包括
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);
您可以在此处找到一个完整的示例