Отвечая на мой собственный вопрос.
Я должен был полагаться на расширение уведомлений, чтобы творить чудеса, поскольку полезная нагрузка FCM не поддерживает звуковой словарь iOS.Я отправляю «критический» флаг, установленный в 1, как часть полезной нагрузки данных FCM, и использую его в расширении уведомлений, чтобы пометить уведомление как критическое.
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
let userInfo: [AnyHashable : Any] = (bestAttemptContent?.userInfo)!
if let apsInfo = userInfo["aps"] as? [AnyHashable: Any], let bestAttemptContent = bestAttemptContent, let critical = userInfo["critical"] as? String, Int(critical)! == 1 {
//critical alert try to change the sound if sound file is sent in notificaiton.
if let sound = apsInfo["sound"] as? String {
//sound file is present in notification. use it for critical alert..
bestAttemptContent.sound =
UNNotificationSound.criticalSoundNamed(UNNotificationSoundName.init(sound),
withAudioVolume: 1.0)
} else {
//sound file not present in notifiation. use the default sound.
bestAttemptContent.sound =
UNNotificationSound.defaultCriticalSound(withAudioVolume: 1.0)
}
contentHandler(bestAttemptContent)
}
}
}