我正在实现一项对讲功能,根据规范,该功能应仅报告并允许一个呼叫,如果已经报告或应答(正在进行),则忽略任何呼叫请求。
最简单的做法是忽略后续呼叫的 VoIP 推送通知消息,但 Apple 不允许这样做,因为如果通知后没有呼叫CXProvider
's reportIncomingCall(with:update:completion)
,应用程序被终止(我猜这是为了防止将这些通知用于其他目的,可疑的选择......)。
因此,即使必须放弃调用,推送通知处理程序仍然必须调用该方法。
我尝试打电话reportIncomingCall()
,随后是通话结束请求,使用以下任一方法:
self.provider.reportNewIncomingCall(with: uuid, update: update) { error in
self.provider.reportCall(with: uuid, endedAt: Date(), reason: .answeredElsewhere)
}
and
self.provider.reportNewIncomingCall(with: uuid, update: update) { error in
let endCallAction = CXEndCallAction(call: uuid)
let transaction = CXTransaction(action: endCallAction)
self.controller.request(transaction) { error in
}
}
(请注意,这不是我正在使用的实际代码,因为项目中的架构更加详细)
where controller
是一个实例CXCallController
。我也尝试了两者的组合,但仍然报告第二个呼叫,我必须手动结束它。
是否有“合法”的方式来丢弃 VoIP 呼叫请求?我在文档中没有找到任何内容,只是每个 VoIP 推送通知后面必须调用的规则reportIncomingCall()
.