ローカルPUSH通知
使う機会があったのでまとめ
最低限の実装
1) PUSH通知許可依頼をユーザーに出す
2) フォアグランドでPUSH通知を受け取れるよう設定する
3) 通知内容を作成する
4) 通知を送る
ソースはGitに
https://github.com/satoNobu/iOS_localPush/commits/master
1) PUSH通知許可依頼をユーザーに出す
自分の場合、ボタンを1個設定して、ボタン押下時に即PUSHが通知されるよう設定した
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert], completionHandler: { (granted, error) in // 許可結果応じた内容 // 私がGitにあげてるソースでは、アラートで許可状態がわかるよう記述してある }
UNUserNotificationCenter
通知関連のアクティビティを管理するための中心的なオブジェクト
current()
通知センターオブジェクトを返却
requestAuthorization(options: [.badge, .sound, .alert], completionHandler: { (granted, error) in
ローカル、リモート通知許可をユーザーに要求する
options:アプリが要求している認証オプション。
この場合、バッチ、サウンド、アラート表示の承認を要求
completionHandler:承認結果を受け取るところ。
この場合、grantedに許可結果がbooleanで返ってくる
2) フォアグランドでPUSH通知を受け取れるよう設定する
// デリゲートメソッドを使えるよう設定 UNUserNotificationCenter.current().delegate = self
// UNUserNotificationCenterDelegateを継承して処理記述 extension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter( _ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([ .badge, .sound, .alert ]) } }
UNUserNotificationCenterDelegate
通知関連のデリゲートメソッドインターフェイス
func userNotificationCenter(_ center: UNUserNotificationCenter,willPresent notification: UNNotification,withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
アプリがフォアグラウンドで実行されている間に到着した通知を処理する方法をデリゲートに求める
3) 通知内容を作成する
let content = UNMutableNotificationContent() content.title = "PUSH1" content.body = "ボタンタップでPUSH通知" content.sound = UNNotificationSound.default
UNMutableNotificationContent
通知コンテンツを作成
ここでは、タイトル、内容、通知音(デフォルト音)を設定。
4) 通知を送る
let request = UNNotificationRequest(identifier: "immediately", content: content, trigger: nil) UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
UNNotificationRequest
ローカル通知の配信をスケジュールするオブジェクトを作成
identifier:通知要求の識別子
content:通知内容
trigger:通知の配信をトリガーする条件。
— ここまでの実装でボタンタップしてローカルPUSHが送れるとこまで完成
イメージ以下
「PUSH1」のボタンをタップすると、フォアグランド上でローカルPUSH通知される
「PUSH2」のボタンの処理は、下の方に記載ある 5)で記載してあるトリガーを使ったもの。
「PUSH2」のボタンをタップすると、5秒後にローカルPUSHが通知される。
これは、ボタンをタップ後アプリをバックグランドにしたり、タスクキルしても通知される
(なので、2)の設定をコメントアウトしてもこの処理は動く。ただし、フォアグランドでは動かなくなるが。。。)
— 以下、諸々追加
時間あれば、どんどん追記していきます。
今の所考えてる内容
・通知領域タップ時の処理
・バッジ
・通知領域に画像
・位置情報を元にローカルPUSH
・アクション付きの通知領域
・通知許可を再度出す
5) トリガーを設定して時間経過でPUSHがくるようにする
// トリガーを設定。5秒後に通知がくる let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) // UNNotificationRequestに設定したトリガー指定する let request = UNNotificationRequest(identifier: "localPushTest2", content: content, trigger: trigger)
UNTimeIntervalNotificationTrigger
指定された時間が経過した後に通知が配信されるようにするトリガー
timeInterval:時間指定
repeats:リピートするかどうか。trueの場合、60秒以上である必要がある
参考URL
ものすごくわかりやすかったです
猿でも分かるプッシュ通知
iOS 10以降のNotificationの基本