Rich Notificationは、メディア添付ファイル、インタラクティブボタン、カスタムインターフェースを含む拡張されたiOSプッシュ通知形式であり、ユーザーエクスペリエンスを向上させます。標準的なテキスト通知とは異なり、Rich Notificationはバナーやロック画面に画像、動画、音声を直接表示できます。Apple Developer Documentation、2026によると、UNNotificationAttachmentは1つの通知で最大10ファイルをサポートし、すべてのデバイスで最適に表示されるよう自動的にスケーリングします。
重要なポイント
Rich Notificationは、テキストだけでなくメディア添付ファイル、インタラクティブ要素、カスタマイズされたインターフェースを含むiOSプッシュ通知です。「rich」という用語は、通知に画像、動画、音声、アクションボタン、テキスト入力を含める能力を反映しており、単純なアラートを本格的なインタラクティブ要素に変えます。
AppleはiOS 10でUserNotificationsフレームワークとともにRich Notificationのサポートを導入しました。それ以前は、プッシュ通知にはテキスト、サウンド、バッジのみ含めることができました。iOS 10はUNNotificationServiceExtensionとUNNotificationContentExtensionを導入し、コンテンツの変更とカスタムインターフェースの作成を可能にしました。以降のバージョンでは、Content ExtensionでのSwiftUIサポート、アニメーションGIF、メディアスケーリングの改善が追加されました。
Rich Notificationはユーザーエンゲージメントを大幅に向上させます。Appleの調査によると、画像付きの通知はテキストのみの通知と比較して30~40%多くのインタラクションを得られます。商品画像、動画プレビュー、クイック返信ボタンにより、ユーザーはアプリを開かずに通知から直接決定できます。これによりターゲットアクションへの経路が短縮され、ユーザーエクスペリエンスが向上します。
UNNotificationAttachmentは画像、動画、音声の3つのメディアカテゴリをサポートします。各タイプには形式、サイズ、期間に関する独自の制限があります。システムはパフォーマンス最適化のため、通知サイズに合わせて画像を自動的にスケーリングし、動画の長さを30秒に制限します。
| メディアタイプ | サポートされる形式 | 最大サイズ |
|---|---|---|
| 画像 | JPEG、PNG、GIF、TIFF | ファイルあたり10MB |
| 動画 | MPEG、MP4、MOV | 10MB、最大30秒 |
| 音声 | MP3、AAC、WAV、CAF | 10MB |
画像はコンパクトおよび拡張通知ビューで表示するためにシステムによって自動的にトリミングおよびスケーリングされます。アニメーションGIFはiOS 12以降でサポートされ、通知表示時に自動的に再生されます。推奨画像サイズは1024x1024ピクセルで、大型画面のiPadを含むすべてのデバイスで鮮明な表示を保証します。
Rich Notificationの動画はデフォルトで音声なしで再生されます — ユーザーはプレーヤーボタンから音声を有効にできます。最大動画時間は30秒で、その後再生が停止します。音声添付ファイルは音声メッセージやサウンドプレビューに使用でき、拡張ビューで通知をタップすると再生されます。
インタラクティブアクションにより、ユーザーはアプリを開かずに通知から直接操作を実行できます。アクションはアプリ起動時にUNNotificationCategoryとUNNotificationActionを介して登録されます。各アクションはバックグラウンド(アプリを開かずに)またはフォアグラウンド(操作完了のためにアプリを開く)にできます。
UNNotificationActionは、タイトルとrequiresAuthentication(Face ID/Touch IDが必要)やdestructive(赤色で強調表示)などのオプションの修飾子を持つボタンを表します。UNTextInputNotificationActionはテキスト入力フィールドを追加してこの機能を拡張し、メッセージやコメントへのクイック返信に最適です。アクションは通知を長押しするか、下にスワイプすると表示されます。
通知カテゴリはコンテンツタイプを利用可能なアクションのセットにリンクします。登録プロセスはアプリ起動時にAppDelegateでUNUserNotificationCenter.current().setNotificationCategoriesを介して実行されます。カテゴリはサーバー側でJSONペイロードのcategoryフィールドに指定され、システムは自動的に対応するアクションセットを通知に適用します。
ユーザーがボタンをタップするかテキストを送信すると、システムはdidReceive responseメソッドでUNUserNotificationCenterDelegateを呼び出します。UNNotificationResponseにはアクション識別子と入力されたテキスト(UNTextInputNotificationActionの場合)が含まれます。この情報に基づいて、アプリは対応するビジネスロジックを実行します:メッセージの送信、アクションの確認、特定の画面を開くなど。
Rich Notification作成の完全なサイクルを見ていきましょう:AppDelegateでのカテゴリ登録からService Extensionでの処理、表示まで。AppDelegateはボタン付きのカテゴリを登録し、サーバーは画像URL付きの通知を送信し、Service Extensionはメディアをダウンロードし、Content Extensionはボタン付きのカスタムインターフェースを表示します。
// AppDelegate — カテゴリとアクションの登録
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "返信",
options: [.authenticationRequired])
let likeAction = UNNotificationAction(
identifier: "like",
title: "いいね",
options: [])
let category = UNNotificationCategory(
identifier: "social_post",
actions: [replyAction, likeAction],
intentIdentifiers: [],
options: [])
UNUserNotificationCenter.current()
.setNotificationCategories([category])
return true
}
カスタムフィールドに「social_post」カテゴリと画像URLを含むプッシュ通知を受信した後、Service Extensionがアクティブになります。拡張機能は画像をダウンロードし、一意の識別子を持つUNNotificationAttachmentを作成してコンテンツに追加します。ダウンロードしたファイルのサイズを確認することが重要です — 10MBを超えると添付ファイルは作成されず、システムはメディアなしで通知を表示します。
class NotificationService: UNNotificationServiceExtension {
override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler:
@escaping (UNNotificationContent) -> Void
) {
let content = (request.content.mutableCopy()
as! UNMutableNotificationContent)
guard let urlString = content.userInfo["media-url"]
as? String,
let url = URL(string: urlString)
else { contentHandler(request.content); return }
URLSession.shared.downloadTask(with: url) {
location, _, _ in
guard let location = location else {
contentHandler(content); return }
let attachment = try! UNNotificationAttachment(
identifier: "media", url: location,
options: [UNNotificationAttachmentOptionsTypeHintKey:
"jpg"])
content.attachments = [attachment]
contentHandler(content)
}.resume()
}
}
サーバーなしでRich Notificationをテストするには、iOSシミュレーターを使用し、xcrun simctl pushを使用してターミナルからプッシュを送信します。ペイロードでは、Service Extensionを有効にするためにmutable-content: 1を、アクションを表示するためにカテゴリを必ず指定してください。このコマンドはJSONファイルから選択したシミュレーターに直接プッシュを送信し、サーバーインフラを設定せずに迅速な反復を可能にします。
UNNotificationContentExtensionを使用すると、標準の通知インターフェースを完全にカスタムのUIKitまたはSwiftUIビューに置き換えることができます。拡張機能はユーザーが通知を展開したとき(フォースタッチまたは下にスワイプ)にアクティブになり、ボタン、スライダー、アニメーション、その他のUIコンポーネントを含めることができます。インターフェースサイズはAuto Layoutを使用してコンテンツに適応します。
Content ExtensionはUIViewControllerを継承するビューコントローラーを持つストーリーボードに基づいています。SwiftUI ViewはiOS 16以降UIHostingControllerを介して統合され、モダンなインターフェース構築アプローチを可能にします。iOS 14~15との後方互換性のため、xibファイルと共にUIKitを使用することをお勧めします。インターフェースはUNNotificationContentを介してService Extensionから変更されたコンテンツを受け取ります。
Content ExtensionはdidReceive responseメソッドでUNNotificationContentExtensionプロトコルを実装します。UNNotificationResponseには押されたボタンまたは入力されたテキストに関する情報が含まれます。拡張機能は通知を閉じずにインターフェースを更新するか、完了ハンドラーを呼び出して閉じることができます。これにより、通知内で直接視覚的フィードバックを伴う「いいね」など、迅速なインタラクションシナリオを作成できます。
AppleはContent Extensionを簡潔で機能的に保ち、過剰な要素を避けることを推奨しています。拡張通知の最大高さは約400ポイントで、その後コンテンツはスクロールします。他の通知との一貫性のためにシステムフォントとスペーシングを使用してください。iPhoneとiPadの両方でインターフェースが正しく表示されるよう、さまざまな画面サイズでテストしてください。
よくある質問
1つのメディア添付ファイルの最大サイズは10MBです。制限を超えると、UNNotificationAttachmentは作成されず、通知はメディアなしで表示されます。Service Extensionでの高速読み込みのために、画像を1~3MBに最適化することをお勧めします。
Rich NotificationはiOS 10以降のすべてのデバイスでサポートされており、iPhone 5s以降を含みます。カスタムUIのContent ExtensionはiOS 12以降で利用可能です。Content ExtensionのSwiftUIはiOS 16以降です。古いバージョンでは、通知は標準形式で表示されます。
はい、アニメーションGIFはiOS 12以降でサポートされています。GIFは通常の画像としてUNNotificationAttachmentを介して読み込まれ、通知表示時に自動的に再生されます。GIFのサイズは他の形式と同様に10MBに制限されています。
カテゴリ登録時、通知あたり最大4つのアクションです。それ以上指定すると、システムは最初の4つを表示し、残りを無視します。最適なUXのためには2~3個のボタンを使用することをお勧めします — オプションが多すぎるとインターフェースが過負荷になります。
はい、サーバーはカスタムフィールドにメディアファイルのURLとmutable-content: 1フラグを含むJSONペイロードをAPNS(Apple Push Notification service)を介して送信する必要があります。サーバーはContent Extensionとアクションを有効にするためのカテゴリも指定します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。