网易云音乐开放平台接入实录:OAuth 授权与 600 次限流

发布时间: · 来源:网易云音乐官网资讯 · 分类:技术原理 · 评论 4 条

网易云音乐开放平台授权页面的权限勾选列表
授权页逐项列出权限,可单独拒绝曲库检索等非必要项。

开放平台面向的是硬件厂商与第三方应用,接入方式基于 OAuth 2.0 授权码模式。和很多平台的「一次授权全量开放」不同,这里把权限拆成了四项,授权页上逐项列出,用户可以单独拒绝其中任意一项。

我们跟着一家车机方案商走完了一次完整接入,从申请应用、配置回调地址,到联调播放控制与状态回调,前后用了 11 个工作日。下面把权限设计、限流规则和实际踩到的坑写清楚。

四类权限,车机只用两项

四项权限分别是:读取播放状态、控制播放(播放/暂停/上一首/下一首/音量)、曲库检索(关键词搜索与详情)、读取歌单。车机场景只需要前两项,因为车机的交互以方向盘按键与语音控制为主,搜索通常由手机端完成后再投送。

语音助手类应用会多申请「曲库检索」,用于「播放周杰伦的晴天」这类指令;智能音箱则往往四项全要,因为它要支持「放我收藏的歌单」。权限申请得越多,授权页越长,用户拒绝的概率越高,这是接入方需要自己权衡的。

权限项与典型场景的对应关系
权限项车机智能音箱语音助手说明
读取播放状态需要需要需要曲名、歌手、进度、播放态
控制播放需要需要需要含音量与切歌
曲库检索可选需要需要关键词搜索、专辑详情
读取歌单不建议需要可选涉及用户收藏内容

授权页的文案也影响通过率。方案商把「读取歌单」的理由从「用于个性化推荐」改成「用于播放你的收藏歌单」后,该权限的授权率从 61% 升到 84%。用户不是不愿意给,而是要知道给了换什么。

车机端通过开放平台拉取播放状态并显示在仪表盘
车机端只读取播放状态与控制播放,不接触用户歌单。

限流与重试:600 次每分钟怎么算

限流按应用维度计算,单应用每分钟 600 次调用,超限返回 HTTP 429,响应头里带 Retry-After,单位是秒。这个额度看起来不多,实际够用:播放状态轮询每 5 秒一次,一分钟 12 次;控制接口按用户操作触发,峰值也就几十次。

真正容易超的是状态回调。车机在熄屏、切后台、网络重连时都会重新拉一次全量状态,如果实现成「每个界面各拉一次」,一分钟能打到上百次。我们的做法是在应用内做一层缓存与合并,同一秒内的重复请求只发一次。

常用接口的调用频次估算(单车主日常使用)
接口触发方式估算频次备注
获取播放状态轮询12 次/分钟建议 5 秒间隔
控制播放用户操作3~8 次/分钟含方向盘按键
曲库检索语音指令1~3 次/分钟按需
状态回调事件推送0.5 次/分钟由服务端推送

token 有效期 30 天,refresh token 有效期 90 天。刷新接口本身也计入限流,所以不要在每次请求前都刷一次,而是记录过期时间,提前 5 分钟刷新,并做好并发去重——多个线程同时发现过期会一起刷,直接把额度打满。

「限流不是防你,是防你的重试逻辑。绝大多数超限都发生在客户端自己写错的循环里。」——开放平台接入文档中的一句话

三个接入时踩过的坑

第一个坑是回调地址必须完全一致,包括结尾斜杠与端口。测试环境用了 8080,生产环境换成 443,忘了改配置,授权码换 token 一直报 invalid_grant,排查了半天。

第二个坑是时间戳。状态回调的签名里带时间戳,服务端允许前后 5 分钟的偏差。车机系统时间没联网校准时可能差十几分钟,签名全部失败。接入方需要在开机时强制做一次 NTP 同步。

第三个坑是播放控制的幂等。方向盘按键容易连击,长按「下一首」会连发五六个请求,客户端表现为跳好几首。开放平台没有做去重,需要接入方在 300ms 内合并同类型请求。

接入完成后,车机端能做到「上车自动续播、方向盘切歌、仪表盘显示曲名」,全程不碰手机。这类体验的门槛不在技术,而在权限设计与异常处理是否扎实。想了解客户端的音频参数,可以看功能页;安装包在下载页。

← 返回资讯列表

用户评论(4 条)

车车机方案商

时间戳那个坑我们也踩了,车机没联网,签名全废,查了两天。

IIoT 老王

600 次其实够,就是刷新 token 并发那下容易超,加个锁就好。

语语音助手开发

授权文案影响真大,我们改了一句,通过率涨了 20 多个点。

车车载玩家

作为用户,最烦的是授权页一长串权限,看到「读取歌单」就不想点了。

相关阅读