我们正在开发一个视频呼叫应用程序,并依赖于APNS VoIP通知。由于我们的设计,有时VoIP通知会在呼叫已经结束或接收方拒绝时到达设备(例如未接来电(。
这种方法的问题在于,iOS要求您以某种方式报告所有传入的VoIP通知——要么是有新的传入呼叫,要么是当前呼叫已更新。
是否有任何方法可以忽略不必要/冗余的VoIP通知?我目前提出的方法非常糟糕,即首先我报告新的未知来电,然后立即报告其结束。这会使本机调用UI显示一小段时间。
private var provider: CXProvider?
private var uuid = UUID()
//...
func ignorePushNotification() {
self.provider?.reportNewIncomingCall(with: self.uuid, update: CXCallUpdate(),
completion: { error in
// ignore
})
self.provider?.reportCall(with: self.uuid, endedAt: nil, reason: reason)
}
不幸的是,没有更好的方法可以忽略VoIP推送。但我建议您改进代码如下。
func ignorePushNotification() {
provider?.reportNewIncomingCall(
with: self.uuid,
update: CXCallUpdate(),
completion: { error in
self.provider?.reportCall(with: self.uuid, endedAt: nil, reason: .failed)
})
}
考虑到CallKit的异步性质,如果不这样做,可能会发生调用结束在reportNewIncomingCall
之前执行的情况。这可能非常罕见,但它可能会发生。