SuperAPI AI 工具集

callkit

办公与效率

查看项目

更新于 10-16 05:52

技能介绍

用途:在 iOS 应用中构建与系统原生通话界面集成的 VoIP 通话体验,覆盖呼入与呼出流程、PushKit VoIP 推送注册、音频会话协调,以及来电目录扩展(Caller ID 与来电拦截),目标为 Swift 6.3 / iOS 26+。使用前需在 Signing & Capabilities 中启用 Background Modes 下的 Voice over IP,并添加 Push Notifications 能力。

主要能力:CXProvider 向系统上报呼入、接通与外部重置并接收 CXAction 请求;CXCallController 发起用户主动操作(CXStartCallAction、CXEndCallAction、CXSetHeldCallAction);CXCallUpdate 封装通话元数据;CXProviderDelegate 处理电话事件、用户交互与音频会话激活;PKPushRegistry 注册并接收 PushKit VoIP 推送。

必要用法:保持单个常驻 CXProvider 实例贯穿应用生命周期,不要重建;在串行队列或 @MainActor 上处理代理回调;每个 action 必须及时 fulfill() 或 fail()。通过 pushRegistry(:didReceiveIncomingPushWith:for:) 收到 VoIP 推送后,必须立刻调用 reportNewIncomingCall(with:update:completion:),否则 iOS 会终止应用并吊销后续 VoIP 推送凭证;iOS 26.4+ 可检查 PKVoIPPushMetadata 判断是否豁免上报。不要提前激活 AVAudioSession,仅预先配置 .playAndRecord 与 .voiceChat,待 provider(:didActivate:) 时激活、provider(_:didDeactivate:) 时停用。呼出通话使用 reportOutgoingCall(with:startedConnectingAt:) 与 connectedAt:。

常见限制与错误:未上报即收推送会导致应用被终止;在系统回调前激活音频会话;忘记 fulfill();重建 CXProvider;用普通 APNs 而非 PushKit 处理 VoIP 来电。具体调试脚本、加密推送载荷与并发通话等细节,资料中仅指向对应章节,暂未展开。