shouldSendPushNotifications:
多次调用的问题,可能使用相同的数据提供(相同的推送数据和推送有效负载)来自每一对可能代表特定用户 ID 的一个应用程序安装。因此,如果您在同一设备上多次卸载/安装了该应用程序,并且在设备上设置了不同的选项SINClient
(例如setSupportPushNotifications
,使用“否”然后是“是”),这可能是该问题的一部分。尽管我们 Sinch 正在为此研究解决方案,但这将消除具有相同信息的回调。
即使其他客户端已开始应答呼叫,您也可能会看到被调用的事实shouldSendPushNotifications:
是因为推送机制旨在基于其他客户端在特定时间窗口内缺乏响应/确认来触发。如果另一个客户端在后台但启用了 VoIP 模式,它会尽快发送一个 ACK,这应该会阻止推送机制触发。但是,如果在时间窗口内没有收到该 ACK,则触发推送机制。因此,当与 VoIP 模式结合使用时,推送机制可以被认为是一种尽力而为的回退机制。尽管在您的情况下,我怀疑与上一节中描述的每个应用程序安装功能有关,我们正在努力改进这一点。
尽管如此,因为推送机制也可能在网络条件过慢的情况下触发,并且来自另一个客户端的 ACK 花费的时间比“预期的最坏情况”(当前为 4 秒)要长,因此您的应用程序必须处理即使在收到 didReceiveIncomingCall-callback 后不久也收到远程推送通知的情况。这里的关键是它实际上不是两个不同的调用,但您可以使用SINNotificationResult
and-[SINCallNotificationResult callId]
来识别它是同一个调用。例如,如果您首先收到一个didReceiveIncomingCall:
-callback 并最终使用-[SINClient relayLocalNotification:]
,那么在您收到推送通知并将其传递给 ] 后不久-[SINClient relayRemotePushNotificationPayload:
,您将看到两个“通知结果”将包含相同的内容callId
,您可以使用它来适当地管理您的 UI。
感谢您对 Sinch SDK 的出色反馈,我们 Sinch 将研究简化推送通知和本地通知处理的方法。