You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中通过YouTube API获取用户播放列表及AccountPicker实现流程问询

嘿,我来帮你把这两个问题讲明白,都是Android上和YouTube API相关的实操内容,咱们一步步来!

一、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来简化流程:

    1. 初始化GoogleSignInClient,指定SCOPE_YOUTUBE_READONLY或SCOPE_YOUTUBE权限(只读权限足够获取播放列表);
    2. 启动登录Intent,获取用户授权后的GoogleSignInAccount;
    3. 从GoogleSignInAccount中提取Credential,用于后续API调用。
  • 第四步:调用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获取用户播放列表?具体流程

答案是: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:04:20