You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CallKit结束通话时报错Code=4问题排查求助

解决CallKit请求事务错误(Code=4)

com.apple.CallKit.error.requesttransaction Code=4 对应未授权或状态不匹配的操作错误,结合你的代码,核心问题出在操作顺序和状态同步逻辑上,以下是具体修复方案:

修复步骤:

  1. 调整操作顺序
    你当前先提交CXEndCallAction事务,再上报通话结束状态,这会导致CallKit内部状态冲突。正确流程是先同步通话结束状态,再提交结束动作:

    // 1. 先告知CallKit通话已远程结束
    self.provider.reportCall(with: uuid_var.uuid_test, endedAt: Date(), reason: .remoteEnded)
    // 2. 再提交结束通话的事务请求
    let endCallAction = CXEndCallAction(call: uuid_var.uuid_test)
    let transaction = CXTransaction()
    transaction.addAction(endCallAction)
    self.controller.request(transaction) { error in
        print(error ?? "事务请求成功")
    }
    
  2. 区分通话场景处理

    • 如果是未接听的来电被远程挂断:无需提交CXEndCallAction事务,仅调用reportCall(with:endedAt:reason:)即可,因为未接听的通话不需要执行"结束动作"。
    • 如果是已接听的通话被远程挂断:按上述调整后的顺序执行即可。
  3. 验证CallKit状态一致性
    确保在执行结束操作时,该UUID对应的通话在CallKit中处于active或held状态,若通话未被接听(处于incoming状态),提交CXEndCallAction会触发权限错误。

  4. 检查基础配置
    确认App已开启VoIP后台模式,Info.plist中添加了NSVoIPUsageDescription权限描述,且CXCallController是在主线程初始化的。

内容的提问来源于stack exchange,提问作者MRError

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 07:00:21