使用自定义声音作为通知提示音
在 iOS 10 以后,iOS 使用了全新的
UserNotifications 作为通知 API,这允许开发者使用 图片、视频、声音 等富媒体作为通知内容,同时进一步地,你还可以使用 Notification Content Extension 来自定义通知的大小和内容布局。
如果要自定义通知的提示音,那么你可以给
UNNotificationContent 的
sound 属性添加
UNNotificationSound 实例:
1 2 |
let content = UNMutableNotificationContent() content.sound = UNNotificationSound(named: sound+".m4a") |
由高亮行可以看出,自定义提示音的具体位置是由 iOS 系统自动指定的。众所周知,这些自定义的提示音必须预先放置在 app 的 main bundle 里,长度不能超过 30s,否则就会被系统提示音所替代。
那么 ,有没有什么办法,能让 app 以用户提供的声音作为通知提示音呢?
使用用户自定义的声音作为通知提示音
用户自定义的声音,这里我们指用户从其他 app 导入的声音、从网站上下载的声音,或者是我们 app 自己后期从服务器下载的提示音。那么,有没有办法,不把提示音预置在 app 里,而是后期加载呢?
这一点在网络上很少有人提及,其实是可以的。如果你去仔细阅读官方文档,那么你会在这个页面发现这样一句话:
Files for custom sounds must be located in your executable’s main bundle or in the Library/Sounds directory of your app’s container directory.
也就是说,除了预置在 app 的 main bundle 里之外,我们也可以把下载的声音放置在 Library/Sounds 这个目录里!
1 2 3 4 |
let path = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask) let url = path[0].appendingPathComponent("Sounds", isDirectory: true) try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: false, attributes: nil) try? FileManager.default.copyItem(atPath: --sound-path--, toPath: url.path+ --sound-name--) |
这样一来,下载或者用户导入的声音就可以作为提示音使用了!——当然,不要忘记也要遵循 30s 内这个规定。
同时,由于 api 限制,名称最好不要重复,不然就说不好系统用哪个声音作为提示音了。
参考文献
UILocalNotification: Playing a Custom Audio File saved in Documents Directory
本文由 落格博客 原创撰写:落格博客 » UserNotifications 使用用户创建的声音作为提示音
转载请保留出处和原文链接:https://www.logcg.com/archives/2984.html
这个你试过了吗?我用这个自定义声音不行,还是默认的声音。找你交流一下呀?