[WWDC18][iOS 12] ローカル通知をグループ化する #WWDC18

iOS 12で追加されたローカル通知のグループ化を行う実装を紹介します。
2018.06.18

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

はじめに

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

本記事では、ローカル通知をグループ化する実装を紹介します。

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

検証環境

本記事は以下の環境で検証を行っています。

  • macOS Sierra 10.13.4
  • Xcode Version 10.0 beta (10L176w)
  • iOS Deployment Target: 12.0

実装

さっそく実装を紹介していきます。

グループ化に対応したローカル通知を作成する

こちらの記事と同様の手順でローカル通知を作成します。

ただし、グループ化したい通知に同じスレッドIDを指定します。これによって通知がグループ化されます。

let content = UNMutableNotificationContent()
content.body = "Notification with threadId"

content.threadIdentifier = "thread-id-1" // <- スレッドIDを指定する

let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
let request = UNNotificationRequest(identifier: body, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request)

グループの概要を設定する

通知のカテゴリを使用すれば、通知のグループに概要を設定できます。

まずは通知カテゴリの作成と登録を行います。

categorySummaryFormat引数には概要のフォーマット文字列を指定します。%uには通知の件数が、%@にはUNMutableNotificationContentsummaryArgumentに指定する文字列が入ります。

let category = UNNotificationCategory(identifier: "category-id-1",
                                      actions: [],
                                      intentIdentifiers: [],
                                      hiddenPreviewsBodyPlaceholder: nil,
                                      categorySummaryFormat: "%u more messages. threadID is %@.",
                                      options: [])
UNUserNotificationCenter.current().setNotificationCategories([category])

そしてローカル通知を作成します。

UNMutableNotificationContentsummaryArgumentに文字列を、categoryIdentifierに通知カテゴリのIDを指定します。

let content = UNMutableNotificationContent()

content.summaryArgument = "thread-id-1" // <- 概要のフォーマット文字列に埋め込みたい文字列を指定
content.categoryIdentifier = "category-id-1" // <- カテゴリIDを指定

// ...

UNUserNotificationCenter.current().add(request)

さいごに

本記事では、ローカル通知をグループ化する実装を紹介しました。

次回はリモート通知のグループ化の実装を紹介しようかなと思います。

参考資料