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
相关产品推荐
相关产品推荐

