Android中通过YouTube API获取用户播放列表及AccountPicker实现流程问询
嘿,我来帮你把这两个问题讲明白,都是Android上和YouTube API相关的实操内容,咱们一步步来!
要获取用户的YouTube播放列表,核心是通过YouTube Data API v3配合OAuth 2.0授权(因为涉及用户私有数据),具体流程如下:
第一步:准备Google Cloud配置
先去Google Cloud Console创建项目,启用「YouTube Data API v3」,然后创建OAuth 2.0客户端ID(类型选Android),填写你的App包名和SHA-1指纹——这一步是为了让Google认可你的App有权请求用户授权。第二步:添加依赖库
在App的build.gradle里添加必要的依赖,比如Google授权库和YouTube API客户端库:dependencies { // Google授权相关 implementation 'com.google.android.gms:play-services-auth:20.7.0' // YouTube Data API客户端 implementation 'com.google.apis:google-api-services-youtube:v3-rev20240215-2.0.0' // 用于处理HTTP请求的库 implementation 'com.google.oauth-client:google-oauth-client-android:1.34.1' }第三步:实现OAuth 2.0授权
你需要让用户授权你的App访问他们的YouTube数据。可以用Google Sign-In来简化流程:- 初始化GoogleSignInClient,指定
SCOPE_YOUTUBE_READONLY或SCOPE_YOUTUBE权限(只读权限足够获取播放列表); - 启动登录Intent,获取用户授权后的
GoogleSignInAccount; - 从
GoogleSignInAccount中提取Credential,用于后续API调用。
- 初始化GoogleSignInClient,指定
第四步:调用Playlists.list API
拿到授权凭据后,就可以调用API获取播放列表了:// 初始化YouTube服务实例 YouTube youtube = new YouTube.Builder( AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential ).setApplicationName("你的App名称").build(); // 构建Playlists.list请求 YouTube.Playlists.List request = youtube.playlists().list("snippet,contentDetails"); request.setMine(true); // 表示获取当前授权用户的播放列表 request.setMaxResults(50); // 设置返回的最大数量 // 执行请求并处理结果 PlaylistListResponse response = request.execute(); List<Playlist> playlists = response.getItems(); // 遍历playlists,获取每个播放列表的名称、ID等信息
答案是:AccountPicker本身不能直接获取播放列表,但它可以帮你选择用户的Google账号,再配合YouTube API实现播放列表的获取。AccountPicker的作用是让用户选择设备上已登录的Google账号,替代Google Sign-In的账号选择环节,具体流程如下:
第一步:启动AccountPicker选择Google账号
创建Intent并启动AccountPicker,只过滤Google账号:Intent accountPickerIntent = new Intent(AccountsContract.AccountPicker.ACTION_ACCOUNT_PICKER); accountPickerIntent.putExtra( AccountsContract.AccountPicker.EXTRA_ACCOUNT_TYPES, new String[]{"com.google"} ); accountPickerIntent.putExtra(AccountsContract.AccountPicker.EXTRA_SHOW_ACCREDIATION_PICKER, true); // 用ActivityResultContracts启动(适配Android 10+) registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) { Uri accountUri = result.getData().getData(); String accountName = accountUri.getLastPathSegment(); // 拿到选中的账号名称后,下一步获取该账号的授权凭据 getOAuthCredentialForAccount(accountName); } }).launch(accountPickerIntent);第二步:获取选中账号的OAuth凭据
拿到账号名称后,需要获取该账号的OAuth授权凭据,这里可以用AccountManager或者Google Sign-In的API:private void getOAuthCredentialForAccount(String accountName) { GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestScopes(new Scope("https://www.googleapis.com/auth/youtube.readonly")) .requestEmail() .build(); GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso); // 根据账号名称获取已登录的账号信息 signInClient.silentSignIn().addOnSuccessListener(account -> { Credential credential = GoogleAccountCredential.usingOAuth2( this, Collections.singletonList("https://www.googleapis.com/auth/youtube.readonly") ).setSelectedAccount(account.getAccount()); // 拿到凭据后调用YouTube API获取播放列表 fetchPlaylists(credential); }).addOnFailureListener(e -> { // 如果静默登录失败,需要启动显式登录流程 startActivityForResult(signInClient.getSignInIntent(), RC_SIGN_IN); }); }第三步:调用YouTube API获取播放列表
这一步和第一个问题里的第四步完全一样,用拿到的Credential初始化YouTube服务,调用Playlists.list接口即可获取该账号下的播放列表。
内容的提问来源于stack exchange,提问作者Arindam Ghosh

