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

Flutter中如何实现YouTube频道视频上传的用户身份认证?

错误原因说明

  • 仅使用email权限报错:调用YouTube Data API必须申请对应YouTube服务的权限,email仅能获取用户基础账号信息,没有访问YouTube服务的权限,所以返回insufficient_scope权限不足错误
  • 添加YouTube相关Scope后卡住:是谷歌云项目的API配置和OAuth权限配置未完成,导致授权流程无法正常完成

修复步骤

1. 配置正确的授权Scope

如果仅要验证YouTube频道身份,或需要上传视频,按需求配置对应Scope即可:

GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: <String>[
    'email',
    // 仅验证频道/读取数据用这个
    // 'https://www.googleapis.com/auth/youtube.readonly',
    // 需要上传视频用这个
    'https://www.googleapis.com/auth/youtube.upload',
  ],
);

2. 完成谷歌云项目配置

操作你当前Firebase关联的谷歌云项目:

  • 进入「API和服务」→「库」,搜索YouTube Data API v3,点击启用该API
  • 进入「API和服务」→「OAuth同意屏幕」:
    • 测试阶段:将你用于测试的谷歌账号添加到「测试用户」列表中,未添加的账号无法使用YouTube类敏感权限
    • 正式上线阶段:按要求提交应用审核,审核通过后所有用户都可正常授权
  • 检查安卓端的OAuth客户端配置:包名、签名SHA1必须和你实际运行的应用完全一致;iOS端检查bundle ID和客户端配置匹配

3. 调整身份验证逻辑

修改原有拉取播放列表的逻辑,仅验证用户是否拥有有效YouTube频道即可:

Future<void> _handleVerifyYoutubeAuth() async {
  setState(() {
    _contactText = '正在验证YouTube权限...';
  });
  try {
    final httpClient = (await _googleSignIn.authenticatedClient())!;
    final youTubeApi = YouTubeApi(httpClient);
    // 拉取当前用户名下的频道列表
    final channelRes = await youTubeApi.channels.list(
      ['id'],
      mine: true,
    );
    if (channelRes.items?.isNotEmpty == true) {
      setState(() {
        _contactText = 'YouTube身份认证成功,已获取有效频道权限';
      });
      // 此处添加认证成功后的业务逻辑
    } else {
      setState(() {
        _contactText = '当前谷歌账号未开通YouTube频道';
      });
    }
  } catch (e) {
    setState(() {
      _contactText = 'YouTube身份认证失败:${e.toString()}';
    });
    print('验证错误:$e');
  }
}

修改初始化监听逻辑,登录成功后调用新的验证方法即可。

4. 缓存清理注意

每次修改Scope配置后,需要先调用_googleSignIn.disconnect()清空之前的登录状态,重新走登录授权流程,否则旧的权限缓存会继续报错。

内容的提问来源于stack exchange,提问作者Urvashi kharecha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:15:02