[iOS 10] User Notifications framework を使用して指定日時に発火するローカル通知を作成する #wwdc

[iOS 10] User Notifications framework を使用して指定日時に発火するローカル通知を作成する #wwdc

Clock Icon2016.06.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんばんは。モバイルアプリサービス部の平屋です。

前回の記事「[iOS 10] User Notifications framework を使用して時限式のローカル通知を作成する」に引き続き、iOS 10 で追加された「User Notifications framework」のクラスを使用した実装を紹介します。

今回は指定日時に発火するローカル通知を作成する方法を紹介します。

本記事は Apple からベータ版として公開されているドキュメントを情報源としています。 そのため、正式版と異なる情報になる可能性があります。ご留意の上、お読みください。

実装

さっそく、指定日時に発火するローカル通知を作成する実装を紹介します。

「ユーザーの許可を得る」方法と「通知受信時の処理を実装する」手順については前回の記事を御覧ください。

指定日時に発火するローカル通知を作成する

作成方法は、基本的に前回の記事で紹介した時限式のローカル通知と同じです。

前回との違いは使用するトリガーオブジェクトのタイプです。指定日時に発火するローカル通知の場合は、UNCalendarNotificationTrigger を使用します。

以下の例では 2016年7月7日に発火するローカル通知を作成しています。

// UNMutableNotificationContent 作成
let content = UNMutableNotificationContent()
content.title = "Hello!"
content.body = "It's time!"
content.sound = UNNotificationSound.default()

// UNCalendarNotificationTrigger 作成
let date = DateComponents(month:7, day:7, hour:12, minute:0)
let trigger = UNCalendarNotificationTrigger.init(dateMatching: date, repeats: false)

// id, content, trigger から UNNotificationRequest 作成
let request = UNNotificationRequest.init(identifier: "CalendarNotification", content: content, trigger: trigger)

// UNUserNotificationCenter に request を追加
let center = UNUserNotificationCenter.current()
center.add(request)

通知をリピートをさせる

UNCalendarNotificationTrigger のイニシャライザの 2 つ目の引数を true にすると通知をリピートをさせることができます。

例えば、毎朝 8:30 に通知を飛ばすには以下のように指定します。

let date = DateComponents(hour:8, minute:30)
let trigger = UNCalendarNotificationTrigger.init(dateMatching: date, repeats: true)

また、次に発火する日時は UNCalendarNotificationTriggernextTriggerDate() メソッドを使用すれば取得できます。

let nextTriggerDate = trigger.nextTriggerDate()

さいごに

本記事では User Notifications framework を使用して指定日時に発火するローカル通知を作成する方法を紹介しました。次回は位置情報に基づいて発火するローカル通知を試してみようと思います!

参考資料

Framework Reference

Class Reference

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.