目前,我正在开发一个项目,以在应用程序收到推送通知时实现文本转语音功能。通知保存在本地,并使用内容为 UNMutableNotificationContent() 的本地通知进行显示。它必须使用铃声,并且必须在前台、后台运行,甚至在应用程序被终止时运行,类似于 UNMutableNotificationCenter() 中的 .sound 属性。
我特别没有使用 AVAudioSession 中的播放类别,因为它使用媒体音频而不是铃声音频。当我在 AVAudioSession 中使用环境类别时,它无法在后台运行或当应用程序被终止时。我希望它能够在前台、后台运行,甚至当应用程序在收到推送通知后被终止时也是如此。
这段代码片段是我在 AppDelegate didReceiveRemoteNotification 中使用的逻辑。
if let tts = userInfo["text"] as? String {
do {
try audioSession.setActive(true)
try audioSession.setCategory(AVAudioSession.Category.ambient,
options: [.duckOthers])
} catch {
print("Unable to set audio session category: %@", error)
}
let utterance = AVSpeechUtterance(string: userInfo["text"] as! String)
utterance.voice = AVSpeechSynthesisVoice(language: "id-ID")
synthesizer.speak(utterance)
}
答案可能是否定的。推送通知提供的选项范围有限。您可以显示带有应用程序图像的警报、播放预先录制的声音(也来自应用程序包)或显示带有标题和消息的横幅。就是这样。用户点击通知后,您的应用程序就会启动并进入前台,为您提供更多与用户交互的选项。但是,在用户使用通知之前,您无法自定义所提供的基本选项之外的交互。