iOS设备锁定状态接听VoIP通话后直接打开Flutter应用是否可行?
iOS锁屏状态下接听VoIP通话后直接唤起Flutter应用的可行性问题
我正在开发的项目核心聚焦于优质UI/UX体验,目前遇到的问题是在iOS设备锁定状态下接听VoIP通话的相关需求。
官方文档说明
苹果推出了CallKit和PushKit功能以支持调用原生通话界面,该方案效果不错但不符合我的场景需求。
目前已有大量这两个组件的相关资料,比如:
- Receiving incoming calls
- Responding to VoIP Notifications from PushKit
- 非常实用的iOS 13 PushKit限制说明
已有相关提问参考
该问题此前已有大量相关提问,大多集中在两年前,因此我重新发起问询。
- 附带教程的优质参考 - Lock Screen UI with incoming Call
- iOS - Can I open my VoIP app on answering call using Callkit
- CallKit: Launch app when screen is locked
- 相关GitHub issue讨论
额外的CallKit/PushKit教程参考
- 原生iOS VoIP推送接收实现教程
- (Flutter专属,也可用于原生iOS开发)flutter_ios_webrtc_kit实现参考
- RayWenderlich CallKit教程
- PushKit接收来电实现教程
- Vonage VoIP推送+CallKit处理教程
- Medium CallKit系统通话界面实现教程
但据我查阅,上述所有资料都未提供接听通话后直接打开应用的实现机制。
已探索的可行方案说明
按照现有实现逻辑,唯一可行的方式是使用CallKit界面上6个按钮的最后一个(可选择搭配AppIcon),见下图:
示例参考
- 带有App图标和自定义铃声的GitHub示例
我的问题
我暂时未找到iOS锁定状态下接听VoIP通话后直接打开我的Flutter应用的解决方案,请问该需求是否能够实现?
解答
该需求可实现,适配逻辑受iOS系统规则限制,分两种场景:
- 无锁屏密码的设备:接听CallKit来电时系统会自动将应用唤醒到前台,无需额外配置,仅需保证PushKit回调触发时,你已经完成CallKit注册、Flutter引擎预加载即可。
- 有锁屏密码的设备:系统默认不会直接解锁进入应用,接听后应用会保持后台运行,同时锁屏顶部会显示通话状态条,用户点击条带验证密码后即可进入应用。如果要实现接听后直接唤起跳转,可将CallKit的
supportsVideo属性设为YES,系统处理视频类VoIP通话接听时会自动触发应用唤起逻辑,用户验证密码后直接进入应用内通话页。
Flutter项目落地步骤:
- 先在iOS原生层完成PushKit+CallKit基础配置,确保VoIP推送能正常唤起原生通话界面
- 在CallKit的
provider:performAnswerCallAction:代理方法中,主动触发Flutter引擎的路由跳转指令,预加载应用内通话页面 - 若你的应用为纯语音通话,可临时标记通话为视频类型触发系统唤起逻辑,应用内实际展示语音界面即可,不会影响苹果审核。
注意需遵守iOS 13及以上的PushKit规则:收到VoIP推送后必须在规定时间内调用CallKit上报接口,否则会被系统限制推送权限,开发时需做好回调时序处理。
内容的提问来源于stack exchange,提问作者CybeX
相关产品推荐
相关产品推荐

