基于Flutter+Supabase的YouTube行为追踪与用户奖励实现问询
追踪YouTube用户行为方案(Flutter + Supabase)
核心依赖:YouTube Data API v3
所有用户的点赞、订阅操作验证必须通过YouTube官方API实现——这类行为属于用户私人数据,第三方无法仅通过客户端行为判定,必须经用户授权后调用API校验。
1. 验证用户点赞操作
- 权限要求:需用户授权
https://www.googleapis.com/auth/youtube.readonly或youtube.force-ssl权限。 - 实现步骤:
- Flutter中使用
googleapis包,通过OAuth 2.0获取用户访问令牌。 - 调用
videos.getRating接口,传入目标视频ID和用户令牌,检查返回的rating字段是否为like。 - 验证通过后,在Supabase的
user_actions表中记录该行为并标记为已验证,作为奖励发放依据。
- Flutter中使用
2. 验证用户订阅操作
- 权限要求:同点赞操作,需用户授权读取订阅数据的权限。
- 实现步骤:
- 调用
subscriptions.list接口,设置参数mine=true(代表当前授权用户)和channelId为目标频道ID。 - 检查返回结果中是否存在目标频道的订阅记录。
- 验证通过后,在Supabase中记录用户订阅状态;可定期通过API重新校验,防止用户取消订阅后重复领奖。
- 调用
3. 统计视频观看时长
- 内嵌播放(推荐):
使用Flutter的youtube_player_flutter包(封装YouTube IFrame Player API),监听播放事件:- 通过
onStateChanged监听播放/暂停状态,仅在播放时累计时长。 - 定期调用
getCurrentTime获取播放进度,将有效观看时长上传到Supabase的user_watch_history表。 - 需处理后台切换、应用退出等场景,及时暂停计时避免虚增时长。
- 通过
- 跳转YouTube App播放:
无法直接追踪单个用户的观看时长,仅能通过YouTube Data API的videos.getStatistics获取频道级总播放时长数据,无法关联到单个用户,因此不推荐此方式。
4. Supabase后端配合
- 数据表设计:
创建两张核心表:user_youtube_actions:存储用户点赞/订阅记录,字段包括user_id(关联Supabase用户ID)、target_id(视频/频道ID)、action_type(like/subscribe)、verified(布尔值,标记是否通过API验证)、created_at。user_watch_history:存储观看时长,字段包括user_id、video_id、total_duration、last_updated_at。
- 奖励发放逻辑:
仅当verified字段为true时触发奖励发放;可通过Supabase Edge Functions设置定时任务,定期重新校验用户订阅/点赞状态,清理已取消的无效记录。
重要注意事项
- 严格遵守YouTube服务条款,禁止诱导用户点赞/订阅以获取奖励,否则可能导致API权限被封禁。
- OAuth授权需明确告知用户权限用途,不得静默授权。
- 观看时长统计需排除无效场景(如静音播放、后台挂播),确保数据真实有效。
内容的提问来源于stack exchange,提问作者Ch Abubakar Arain
相关产品推荐
相关产品推荐

