プッシュ通知の音を独自のものに変更する

プッシュ通知の音を変更できるということを知ったので調べてみました。

UNMutableNotificationContentのsoundに以下を設定するだけでOKです。

UNNotificationSound.init(named: UNNotificationSoundName(rawValue: "sound.mp3"))

こちらの記事を読むと以前はLibrary/Soundsに配置する必要があった?ようなのですが現在は必要なさそうです。

コード

ボタンタップ時の1秒後にプッシュ通知を送るサンプル

class ViewController: UIViewController, UNUserNotificationCenterDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let center = UNUserNotificationCenter.current()
        center.requestAuthorization(options: [.alert, .badge, .sound]) {(granted, error) in
            if granted {
                print("許可する")
            } else {
                print("許可しない")
            }
        }
    }

    @IBAction func onTap(_ sender: Any) {
        let content = UNMutableNotificationContent()
        content.title = "title"
        content.body = "body"
        content.sound = UNNotificationSound.init(named: UNNotificationSoundName(rawValue: "sound.mp3"))

        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)

        let request = UNNotificationRequest(identifier: "LocalNotification", content: content, trigger: trigger)

        let center = UNUserNotificationCenter.current()
        center.delegate = UIApplication.shared.delegate as! AppDelegate
        center.add(request) { (error) in
            if let error = error {
                print(error)
            }
        }
    }
}
extension AppDelegate: UNUserNotificationCenterDelegate{
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert, .sound])
    }
}

参考文献

Choose custom sound for local notifications