22
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS10でローカルPushを送信してみた

Last updated at Posted at 2016-09-19

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は通知領域に表示中のコンテンツの更新や、発火前の通知のキャンセルに利用します。

##結果
🎉

IMG_2028.jpg

次はUNUserNotificationCenterDelegateについて調べて見ようと思います。

22
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?