[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

準備

以下の記事などを参考にしてリモート通知を受け取るための準備を行います。

[iOS 10] User Notifications framework を使用してリモート通知を受け取る処理を実装する #wwdc

グループ化に対応したリモート通知を送信する

任意の方法で APNs にペイロードを送信します。

以下のように、キー thread-id の値にスレッドのIDを指定します。ローカル通知の場合と同様に同じIDの通知がグループ化されます。

{
    "aps": {
        "alert": {
            "body": "Remote notification with threadId"
        }
    },
    "thread-id": "thread-id-1"
}

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

ローカル通知の場合と同様に、通知のカテゴリを使用してグループに概要を設定できます。

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

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

そして任意の方法で APNs にペイロードを送信します。

summary-argに文字列を、categoryに通知カテゴリのIDを指定します。

{
    "aps": {
        "alert": {
            "body": "Remote notification with threadId",
            "summary-arg" : "thread-id-1"
        }
    },
    "thread-id": "thread-id-1",
    "category": "category-id-1"
}

node-apnでリモート通知を送信する

本記事の検証ではNode.jsモジュールnode-apnでリモート通知を送信してみました。

以下のようなコードを実行すれば、グループ化に対応したリモート通知を送信できます。

さいごに

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

次回も引き続きUser Notifications frameworkの新機能を紹介していきます。

参考資料