Как мне переопределить тихий режим и воспроизвести звук в расширении уведомлений?

#ios #swift #apple-push-notifications

#iOS #swift #apple-push-уведомления

Вопрос:

Я пытаюсь добиться чего-то вроде find my iPhone app. Даже в выключенном состоянии он будет воспроизводить звук на полной громкости. Я не хочу использовать для этого VOIP-вызовы, потому что моему приложению это не нужно, поэтому оно может быть отклонено.

Вот что я пытаюсь сделать:

 override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
    self.contentHandler = contentHandler
    bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
    var audioPlayer = AVAudioPlayer()
    
    let songTitle = "ping"
    let songExtension  = "mp3"
    
    
    if let url = Bundle.main.url(forResource: "(songTitle)", withExtension: "(songExtension)")  {
        
        let volumeView = MPVolumeView()
        if let view = volumeView.subviews.first as? UISlider{
            view.value = 1.0 //---0 t0 1.0---
            
        }
        
        do {
            let data = try Data(contentsOf: url)
            try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, options: .mixWithOthers)
            
            try AVAudioSession.sharedInstance().setActive(true)
            
            audioPlayer = try AVAudioPlayer(data: data, fileTypeHint: AVFileType.mp3.rawValue)
            audioPlayer.volume = 1.0
            audioPlayer.prepareToPlay()
            audioPlayer.play()
        } catch let error {
            print("[SoundPlayer] There was an error: (String(describing: error))")
        }
        
        if (audioPlayer.isPlaying) {
            audioPlayer.stop()
        }
        audioPlayer.play()
    }
    
    if let bestAttemptContent = bestAttemptContent {
        // Modify the notification content here...
        bestAttemptContent.title = "(bestAttemptContent.title) [modified]"
        
        contentHandler(bestAttemptContent)
        
        
    }
}
  

Всякий раз, когда я пытаюсь отладить приложение, я получаю сбой с ошибкой:
Ошибка Domain=NSOSStatusErrorDomain Code= 561015905 «(null)»

Ответ №1:

Вы не можете этого сделать. Apple может отключить режим отключения звука в экстренной ситуации, например, при поиске устройства. Вы не Apple, поэтому вы не можете получить специальное разрешение на воспроизведение звука в вашем уведомлении, которое переопределяет режим отключения звука.

Комментарии:

1. Привет, Мэтт, я наткнулся на criticalAlertSetting, который может помочь достичь моей цели: developer.apple.com/documentation/usernotifications/… Подход, который я использовал, был неправильным.