如何使用文档目录中的声音文件作为本地通知?

在我的iOS应用程序中,如何播放存储在应用程序文档目录中的声音文件作为本地通知,而不是应用程序包内的声音文件?

我已经看到了App Store上的一些应用程序做这个,我想知道这是如何可能的。

实际上可以在本地通知中播放不在应用程序主包(NSBundle)中的自定义声音。

声音必须存储在Library/Sounds目录中,例如: /var/mobile/Containers/Data/Application/DD7E6BA0-2FC0-4DE0-95BF-C2E9C9A94E08/Library/Sounds/mySound.caf

当您在UILocalNotification的soundName属性中引用声音文件时,只需编写文件名,而不是完整的目录path:

 alert.soundName = @"mySound.caf"; 

testing并在iOS9.3.5上工作。 我还没有尝试过其他iOS版本。

脚注:

当我在这里search有关远程通知的Apple文档时,我碰巧find了这些信息 – 具体来说就是“Payload Keys”部分,它提到了声音。

本地和远程通知( 这里 )的苹果文档也提到,如果声音文件位于应用程序的主包或数据容器中,则可以使用它们:

要播放声音,请将声音分配给soundName属性。 您可以在应用程序的主包(或数据容器)中分配非本地化自定义声音的文件名,或者可以分配UILocalNotificationDefaultSoundName以获取默认系统声音。 一个声音应该总是伴随着一个警告信息的显示或一个图标的标记; 在没有其他通知types的情况下,不应播放声音。

不,您不能播放不在audio包中的audio文件,也不能在运行时修改应用程序包。 为什么苹果要求将所有声音与本地通知绑定在一起的一个原因可能是出于安全原因,这将使得在审查过程中检查所有捆绑文件的安全风险。

正是…..

  You can not play audio file stored in document directory for alarm as a local push notification. 

我也经历了应用程序商店的各种应用程序。这些应用程序基本上看起来像从本地推送通知的文档目录播放自定义audio,但它不是使用推送通知,并在当我们点击查看button通知生成本地推送通知的应用程序将被调用,并最终播放选定的audio文件。

这样的应用程序看起来像自定义的推送通知使用文档目录中的自定义audio文件