如何让iOS VoIP应用程序在响铃时服从请勿打扰?

Sna*_*akE 7 audio voip hig ios

人们会认为VoIP应用程序必须遵守与股票手机应用程序相同的规则,但事实证明几乎不可能正确实现振铃.我尝试了几件事:

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

    好:遵守静音和免打扰模式.

    不良:声音不超过30秒,只有在通知出现时才会振动一次.因此,为了实现振铃效果,必须每隔6秒重新通知通知,从而有效地向通知中心发送垃圾信息.如果应用程序处于活动状态,推送通知也不会发出声音/振动,因此应用程序必须检测到并以不同方式响铃.

  2. AudioServicesPlayAlertSound().

    好:适当的API似乎专门为此任务而设计.Obeys静音模式.

    坏:完全忽略请勿打扰模式,声音和振动正好通过.

  3. 使用AVFoundation播放铃声.

    声音播放.

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

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

ter*_*dyl 2

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

与之相关的问题都可以得到解决。

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

[[UIApplication sharedApplication] cancelAllLocalNotifications];

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

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

祝你好运。