Android集成Dolby Vooxet SDK 应用关闭/被杀时收不到来电通知咨询
Dolby.io(原Voxeet)SDK 应用杀进程/关闭状态下来电通知实现方案
核心前提:Dolby 客户端SDK本身仅在应用进程存活时维持信令长连接,进程被系统回收或手动关闭后,SDK连接直接断开,不存在客户端侧直接接收来电的可能,必须走「服务端事件监听+系统级推送+唤起拉起通话」的链路实现,任何尝试靠客户端保活实现的方案在iOS、国内定制安卓ROM上都会被系统拦截,稳定性为0。
实现链路总览
- 主叫方通过SDK发起呼叫、邀请指定用户加入会议
- Dolby服务端将呼叫邀请事件推送给你的自有业务服务端
- 业务服务端通过系统级官方推送通道,向被叫用户的设备下发来电通知
- 设备系统通道在应用进程不存活的状态下接收通知,用户点击通知唤起应用,拉取通话参数完成接听
分步实现细节
1. 服务端配置Dolby事件订阅
- 在Dolby.io控制台开启Webhook事件回调,必须订阅呼叫邀请、会议状态变更类事件,重点关注用户被邀请加入会议的事件回调
- 回调内容里会携带核心参数:被邀请用户ID、会议唯一ID、主叫用户信息、邀请过期时间,这些参数需要缓存到业务服务端,用于后续推送组装
- 额外订阅通话取消、用户接听类事件,用于后续通知的撤销逻辑
2. 客户端接入系统级推送通道
- iOS端:如果需要实现系统级来电体验,接入PushKit的VOIP推送,配合CallKit实现原生来电UI;普通APNs推送延迟高,不适合实时来电场景
- Android端:海外场景接入FCM,国内场景必须逐家接入华为、小米、OPPO、vivo、魅族的官方厂商推送,不要依赖第三方推送的通用保活能力——只有厂商官方推送通道是系统级白名单,应用被杀后依然可以稳定收到消息
- 客户端提前创建来电专属通知渠道,配置高通知优先级、全屏展示权限,首次启动时引导用户开启忽略电池优化、通知弹窗权限,避免通知被系统折叠或拦截
3. 推送下发与通话拉起逻辑
- 业务服务端收到Dolby的呼叫邀请回调后,根据被邀请用户ID,匹配该用户所有登录设备对应的推送token,组装来电推送 payload:必须携带会议ID、主叫昵称/头像、邀请唯一标识字段
- 收到呼叫邀请后立刻通过对应推送通道下发通知,同时启动超时计时器:如果60秒内未收到被叫用户的接听/拒接回执,或者收到Dolby侧的通话取消事件,立刻下发取消通知,让客户端撤销已经弹出的来电提醒
- 设备收到来电推送时:
- 如果应用进程存活,直接触发SDK的来电提醒逻辑,弹出来电接听界面
- 如果应用进程已被杀,用户点击通知后自动唤起应用进程,应用启动完成后优先初始化Dolby SDK,从推送参数中读取会议ID,调用SDK接口拉取对应会议的完整信息,弹出接听/拒接界面
- 用户点击接听后,直接调用SDK的加入会议接口进入通话,不需要额外走登录后的首页跳转逻辑
4. 异常兼容处理
- 多设备登录场景:同一个用户ID在多台设备登录时,所有设备都要下发来电通知,任意一台设备接听后,立刻给其余设备下发取消来电的指令,避免多台设备同时响铃
- 权限校验:客户端拉起通话前,校验当前登录的用户ID和推送携带的被邀请人ID是否一致,避免账号切换导致的串话问题
- 弱网兼容:如果应用启动后拉取会议信息失败,自动重试2-3次,重试失败提示用户来电已过期
常见踩坑
- 不要指望Dolby SDK自带的后台模式能覆盖杀进程场景:不管是Android还是iOS,应用进程被手动杀掉或者被系统回收后,SDK的所有连接、监听逻辑都会停止运行,没有任何例外
- Android 12及以上版本必须申请
USE_FULL_SCREEN_INTENT权限,否则来电通知无法弹出全屏界面,只会在状态栏显示一条普通消息 - iOS端VOIP推送必须严格和CallKit配合使用,单独使用VOIP推送拉起应用不上报CallKit事件,会被系统判定为违规,直接封禁推送权限
内容的提问来源于stack exchange,提问作者Qamar khan
相关产品推荐
相关产品推荐

