外观
Day 9:音视频通话与推送
当日成果
完成一对一语音/视频通话、Agora token、APNs/FCM、来电通知、通话状态和移动端平台生命周期。
能力边界
本日覆盖受控测试环境中的真实 provider 验证。App Store/Play 正式发布不属于当天目标。
前置条件
- Day 7 realtime
GREEN。 - 两台测试设备或一台设备加一个可验证的第二端。
- 课程 sandbox Agora、APNs、FCM 配置。
- iOS signing 和 Android application id 已准备。
能力合同
| Capability ID | API | Admin | iOS | Android | 关键证据 |
|---|---|---|---|---|---|
| PUSH-001 Device registration | ✓ | ✓ | ✓ | ✓ | rotate/revoke |
| CALL-001 Call state | ✓ | ✓ | ✓ | ✓ | state machine |
| CALL-002 Agora credentials | ✓ | ✓ | ✓ | ✓ | authorization |
| CALL-003 Incoming call | ✓ | ✓ | ✓ | ✓ | background |
| CALL-004 Media lifecycle | ✓ | ✓ | ✓ | ✓ | connect/end/recover |
调查提示
text
进入 CALLS-PUSH。调查 CallSession 状态机、RTC token 授权、push device 生命周期、
realtime/notification 竞态、CallKit、Android foreground service 和应用级媒体 session。
列出重复来电、过期 token、权限拒绝、Activity 重建和后台终止的恢复路径。1
2
3
2
3
学员决策
- call state 的服务端权威和终态。
- token 有效期和刷新策略。
- 通知与 realtime 哪条先到时如何幂等。
- 权限未授予或系统拒绝前台服务时的产品表现。
Feature Goal
text
/goal 完成 CALLS-PUSH,使授权用户可在 iOS/Android 发起、接听、拒绝和结束语音/
视频通话,并在前后台、重复通知、token 刷新和 Activity/app lifecycle 下保持状态一致。
以真实 provider sandbox、CallKit、Android foreground service、双端媒体和终态幂等为证据。1
2
3
2
3
Mandatory gates
- [ ] push token 注册、刷新、logout/revoke 正确。
- [ ] 非会话参与者无法获取 RTC token。
- [ ] incoming call push/realtime 去重。
- [ ] iOS CallKit 状态与服务端收敛。
- [ ] Android 仅在已接通且权限满足时启动正确类型 foreground service。
- [ ] Activity 重建不销毁应用级媒体 session。
- [ ] token 过期可刷新。
- [ ] end/reject/timeout 终态幂等。
- [ ] 至少一次双端真实音频和视频验收。
常见假完成
- 只验证 Agora join,没有远端订阅和声音。
- Android 把媒体 session 绑定 Activity。
- 通知点击能打开页面,但 call 已经终止仍显示来电。
- 使用永久或无用户绑定的 RTC token。
Checkpoint
冻结 call state diagram、provider 回执、双端录屏/日志、权限拒绝路径和 calls-push-green。