7

有人会认为 VoIP 应用程序必须遵守与普通电话应用程序相同的规则,但事实证明要正确实现振铃几乎是不可能的。我尝试了几件事:

  1. 带有铃声的本地推送通知。

    好:同时遵守静音和免打扰模式。

    坏:声音不能超过30秒,并且只有在通知出现时振动一次。因此,为了达到振铃效果,通知必须重新推送,例如每 6 秒,有效地向通知中心发送垃圾邮件。如果应用程序处于活动状态,推送通知也不会发出声音/振动,因此应用程序必须检测到它并以不同的方式响铃。

  2. AudioServicesPlayAlertSound().

    好:似乎专门为此任务设计的适当 API。服从静音模式。

    坏:完全忽略请勿打扰模式,声音和振动直接通过。

  3. 用于AVFoundation播放铃声。

    很好的声音播放。

    坏:不支持振动,不支持静音/免打扰模式。基本上不能用作铃声。

有没有更好的办法?还是苹果完全错过了这个用例?

4

1 回答 1

2

正如您在 3 个选项中所说,只有 UILocalNotification 实际上遵循静默/DND 模式。

可以解决它的问题。

向通知中心发送垃圾邮件:我认为这很有效。您可以在启动新通知之前立即取消之前的通知,因此始终只有 1 个未完成的通知。

[[UIApplication sharedApplication] cancelAllLocalNotifications];

振动问题:您应该能够调用这个:AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);在您使用计时器一遍又一遍地调用本地通知的同一个地方,直到呼叫结束或用户确认呼叫。使用 VOIP 背景设置,它应该在后台工作。

正如您在选项 2 中所述,振动不会遵循 DND 模式,而只是振动。如果您向通知中心发送垃圾邮件,通知中心每次收到通知时都会振动一次,因此您可能不需要明确开始振动,如果这对您来说已经足够了。

祝你好运。

于 2015-04-29T20:58:47.090 回答