通话结束后,PushKit通知到达

时间:2020-03-11 15:05:06

标签: ios swift callkit pushkit

我有一个实现PushKit和CallKit的应用程序。发生此问题的情况如下:

设备A发起呼叫,向设备B发送PushKit通知。 设备B没有Internet连接,因此无法接听电话。 设备A结束通话。 一段时间后,设备B连接到Internet。 设备B收到设备A先前发送的PushKit通知,并显示CallKit传入呼叫UI。

如您所见,即使设备A结束了呼叫,设备B仍会显示CallKit传入呼叫UI。

如何防止设备B接收来电?

谢谢

2 个答案:

答案 0 :(得分:1)

您应通过PushKit通知发送结束呼叫信号,以便设备B重新连接后,它将同时收到开始呼叫和结束呼叫通知。

答案 1 :(得分:0)

在iOS 13中,您必须在离开PushKit完成处理程序之前报告来电,否则您的应用将无法再接收PushKit推送。显然,当您遇到一种情况,例如您描述的呼叫不再存在时,这是一个小问题。

Apple Developer Forums thread

中讨论了这种情况以及其他情况。

针对您的案例的具体建议是:

  • 尽管您必须立即报告传入呼叫,但仍可以自由决定呼叫失败,并稍后异步通知系统。为此,请致电reportCallWithUUID:endedAtDate:reason:。即使用户未接听电话,这也会拆除来电UI。
  • 如果用户特别快地轻按“接受呼叫”按钮,或者网络条件较差或存在大量延迟,那么您只需等待必要的握手完成,然后再呼叫执行CXAnswerCallAction。对于用户而言,呼叫似乎需要花费一些时间才能连接,即使使用标准电话,这也是一种常见的体验。

  • 请注意,系统需要花几秒钟的时间来使传入呼叫UI进行动画处理,在此期间,应用程序有机会完成此握手,因此,如果花费大量时间,这只会对用户可见。握手完成的时间。

因此,您需要做的是报告呼叫,然后在确定呼叫不再有效(根本不需要花费很长时间)之后,立即结束呼叫。