iOS10から追加されたUNUserNotificationCenter周りについて調べてみました。
すでに多くの方が記事を書いていますが備忘録も兼ねて
##Push通知の許諾
Push通知の許諾がEventKitのような形式に変更されたようです。
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert,.sound,.badge]) { (granted, error) in
if !granted {
debugPrint("Pushの許諾が拒否されました")
return
}
else {
debugPrint("Pushの許諾が許可されました")
}
}
##Push許諾情報の取得
Push通知の許諾状況も取得できるメソッドがあります。
let center = UNUserNotificationCenter.current()
center.getNotificationSettings { (settings) in
}
##LocalPushを追加してみる
LocalPushはUNUserNotificationCenterにUNNotificationRequestをaddすることで追加できます。
5秒後に発火するローカルPushを追加してみます。
let center = UNUserNotificationCenter.current()
// ① NotificationContent
let content = UNMutableNotificationContent()
content.title = "サンプルのローカルPushです"
content.subtitle = "サンプルのsubtitleです"
content.body = "サンプルのbodyです"
content.badge = 1
content.sound = .default()
// ② NotificationTrigger
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
// ③ NotificationRequest
let request = UNNotificationRequest(identifier: "SamplePush", content: content, trigger: trigger)
// ④ 通知の追加
center.add(request)
以下で詳しく見てみます。
####① UNNoticationContentを生成
UNNotificationContentで通知領域に表示されるPushの情報の整形が行えます。
let content = UNMutableNotificationContent()
content.title = "サンプルのローカルPushです"
content.subtitle = "サンプルのsubtitleです"
content.body = "サンプルのbodyです"
content.badge = 1
content.sound = .default()
UNNotificationContentはimmutableなクラスになるためサブクラスのUNMutableNotificationContentを使って情報の整形を行います。
####② UNNotificationTriggerの生成
UNNotificationTriggerでPushの発火するタイミングの制御を行えます。
Triggerは以下
UNPushNotificationTrigger | APNSサーバからのPush受信時 ※自分でこのTriggerを作成することは無いはず |
UNTimeIntervalNotificationTrigger | 指定した秒数後にPushを発火 |
UNCalendarNotificationTrigger | DateCompornentsを指定してPushを発火 Repeateと組み合わせて毎朝○時のPushなどに使えるそう |
UNLocationNotificationTrigger | ジオフェンスを利用してPushを発火 |
ローカルPushを利用する際は
- UNTimeIntervalNotificationTrigger
- UNCalendarNotificationTrigger
- UNLocationNotificationTrigger
- nil
の中から最適なものを選択します。
ここではUNTimeIntervalNotificationTriggerを使ってみます。
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
※TimeIntervalNotificationTriggerでrepeatsをtrueにする場合は60秒以上をしていしないと叱られます
####③ UNNotificationRequestの生成
上で生成したUNNotificationContentとUNNotificationTriggerを使ってUNNotificationRequestを生成します
let request = UNNotificationRequest(identifier: "SamplePush", content: content, trigger: trigger)
identifierは通知領域に表示中のコンテンツの更新や、発火前の通知のキャンセルに利用します。
##結果
🎉
次はUNUserNotificationCenterDelegateについて調べて見ようと思います。