【iOS】Notification Service Extensionを使った画像・動画・音声付きのリモート通知の確認を手軽に行う

iOS

はじめに

iOSアプリ開発グループの後藤です。

iOSアプリでは、画像・動画・音声などのメディア情報を付与したPush通知を扱うことができます(本記事ではこれをリッチPush通知と表現します)。
また、Push通知にはローカル通知とリモート通知の2種類があります。

  • ローカル通知
    • デバイス上で生成される通知
    • インターネット接続が不要
  • リモート通知
    • APNs(Appleが開発したiOSデバイス向けのリモート通知サービス)から送信される通知
    • インターネット接続が必要

iOS 10でNotification Service Extensionというリモート通知のためのApp Extensionが追加されました。
このApp Extensionを使うことで、リモート通知に画像や動画などのファイルを添付し、リッチPush通知を表示できます。

そこで、本記事では以下の2点を説明します。

  • Notification Service Extensionを使ったリモート通知を表現するJSONペイロードの形式
  • Knuffという通知用のアプリケーションを使用し、Notification Service Extensionを使ったリモート通知を送信する方法

Push通知の送信方法の比較

Push通知の送信方法として、シミュレーターに.apnsファイルをドラッグ&ドロップして通知を送信する方法や、simctlコマンドを使う方法などがあります。
しかし、これらの方法はローカル通知の扱いとなり、リモート通知として送信はできません。

またFirebase Cloud MessagingなどのSaaSを使用することでリモート通知を送信できますが、SaaSを利用するための登録手続きが必要です。
他にもCurlコマンドを使ってリモート通知を送信する方法もありますが、CUIベースであるため非エンジニアの方には取り扱いが難しいことがあります。

それに対して、Knuffを使った方法ではSaaSの設定が不要で、GUIベースでリモート通知を送信できるため、操作しやすいという特徴があります。

通知の送信方法 通知の種類
シミュレータに.apnsファイルをドラッグ&ドロップして通知を送信する ローカル通知
simctlコマンドを用いてシミュレータに通知を送信する ローカル通知
Firebase Cloud MessagingなどのSaaSを用いて通知を送信する リモート通知
Curlコマンドを用いて通知を送信する リモート通知
Knuffという通知用のアプリケーションを用いて通知を送信する リモート通知

動作環境

対象 バージョン
iOS 15.4.1
macOS 12.5.1 Monterey
Xcode 14.2
Knuff 1.3

送信するJSONペイロードの形式

Push通知の送信には、JSONペイロード(.apnsファイル)と呼ばれるJSON形式で表現されたデータのまとまりが用いられます。
JSONペイロードに含まれるデータとしては、以下のようなものがあります。

  • 通知のタイトル
  • 本文
  • サウンド
  • バッジ番号
  • メディア情報

また、Notification Service Extensionを使った通知として送信するためには、以下のことが必要です。

  • 送信するペイロードに "mutable-content": 1が含まれていること
  • alertディクショナリに、タイトル、サブタイトル、または本文情報が含まれていること
  • The payload must include the mutable-content key with a value of 1.
  • The payload must include an alert dictionary with title, subtitle, or body information.

https://developer.apple.com/documentation/usernotifications/modifying_content_in_newly_delivered_notifications

以下は作成したペイロードの例になります。

JSONペイロードの送信方法

確認にはKnuffというアプリケーションを用います。Knuffを使うことで、APNsへリクエストを送信することができます。

  1. https://github.com/KnuffApp/Knuff/releases からKnuff.app.zipをダウンロードし解凍してアプリを追加する
  2. Push通知用の証明書を用意し、キーチェーンに追加する
  3. Knuffを開き必要情報を入力する
    1. Customを選択する
    2. Identityは2で用意したPush通知用の証明書を選択する
    3. TokenにはDevice tokenを入力する
  4. Payloadに送信したいJSONペイロードを指定する
  5. 右下のPushを押下する

knuff.jpg

すると、以下のように通知が送られます(画像URLは正しいURLを設定する必要があります)。

pushNotification.jpg

まとめ

本記事では、Notification Service Extensionを使ったリモート通知を手軽に送信できる方法を紹介しました。Knuffを使うことで、リモート通知の確認を素早く行うことができます。
リモート通知の確認に困っている方の参考になれば幸いです。

参考文献

Modifying content in newly delivered notifications
Sending push notifications using command-line tools

iOS