🎬 短剧模块
版本 PanGrowth
🔐 短剧解锁记录绑定
短剧解锁权益默认与设备绑定。如果应用具备自己的登录体系,需在用户登录时将 uid
与内容 SDK 打通,确保解锁记录在不同设备间保持一致。本篇介绍如何通过 pangrowth_content
插件完成签名生成、绑定、查询与解绑操作。
接入前提
- 已完成 GroMore 初始化并成功调用
PangrowthContent.start
。 - 从穿山甲平台 → 内容输出 → 接入管理获取 server key,建议由业务服务端安全下发。
- 建议准备服务端接口生成签名,避免
server key
暴露在客户端,本文示例仅用于调试。
调试入口
仓库中的 frontend/light_csj/lib/features/content/pages/content_home_page.dart
在「短剧解锁记录绑定」分组提供了:生成签名、绑定、查询、解绑 等按钮,可直接在真机验证流程。
基本流程
- 准备参数:server key、
ouid
(业务用户 ID)、16 位nonce
、秒级timestamp
。 - 调用
generateDramaUnlockSign
生成签名字符串。 - 调用
loginDramaUnlock
绑定用户解锁记录。 - 通过
isDramaUnlockLogin
校验绑定结果。 - 用户退出登录时调用
logoutDramaUnlock
解绑。
final contentService = ContentService();
Future<void> bindUnlock(String serverKey, String ouid) async {
final nonce = _generateNonce();
final timestamp = DateTime.now().millisecondsSinceEpoch ~/ 1000;
final sign = await contentService.generateDramaUnlockSign(
serverKey: serverKey,
nonce: nonce,
timestamp: timestamp,
payload: {'ouid': ouid},
);
final result = await contentService.loginDramaUnlock(
serverKey: serverKey,
nonce: nonce,
timestamp: timestamp,
payload: {'ouid': ouid},
);
final bound = await contentService.isDramaUnlockLogin();
debugPrint('签名: $sign, 绑定结果: $result, 是否绑定成功: $bound');
}
Future<void> unbindUnlock() async {
await contentService.logoutDramaUnlock();
}
_generateNonce()
可参考调试页实现,随机生成 16 位大小写字母与数字的组合。
参数说明
参数 | 说明 |
---|---|
serverKey | 穿山甲后台获取的密钥,仅用于生成签名,不可泄露 |
nonce | 16 位随机字符串,每次请求需唯一 |
timestamp | 秒级时间戳,建议使用当前时间 |
payload | 参与签名的扩展参数,至少包含 ouid (用户唯一标识) |
params | 如果已有完整的签名串,可直接透传给 loginDramaUnlock |
服务端可参考官方文档 解锁记录加签接口 生成 params
字符串,客户端仅负责调用绑定接口。
常见问题
- 签名失败 (
sign == null
):检查serverKey
是否正确、nonce
是否重复或为空。 - 绑定失败:
loginDramaUnlock
返回的errorCode
、message
会通过事件日志上报,可在EventLogView
中查看。 - 换号未解绑:务必在用户退出登录时调用
logoutDramaUnlock
,否则旧账号解锁记录仍保留在 SDK。
安全建议
- 不要在客户端硬编码
serverKey
,生产环境应由服务端下发签名结果。 - 在绑定成功后,可将
nonce
、timestamp
记录到服务端日志,方便定位问题。 - 如果业务存在多端登录,需要在服务端自行处理同一账号多设备绑定的业务策略。
调试小贴士
- 使用仓库自带调试页绑定成功后,可在事件日志中看到
drama_unlock_flow_start
、drama_unlock_flow_end
回调。 - 若绑定失败,关注异常码
04013
(同账号绑定设备过多)等常见错误。 - 可以在绑定后立刻请求收藏列表或历史记录,确认解锁权益已同步到账号维度。