Rich Notificationとは何か、メディアコンテンツと通知の作成

著者: IT Sectr 公開日: 2026-03-20 読了時間: 8 分

Rich Notificationは、メディア添付ファイル、インタラクティブボタン、カスタムインターフェースを含む拡張されたiOSプッシュ通知形式であり、ユーザーエクスペリエンスを向上させます。標準的なテキスト通知とは異なり、Rich Notificationはバナーやロック画面に画像、動画、音声を直接表示できます。Apple Developer Documentation、2026によると、UNNotificationAttachmentは1つの通知で最大10ファイルをサポートし、すべてのデバイスで最適に表示されるよう自動的にスケーリングします。

重要なポイント

  • メディア添付ファイル — Rich NotificationはUNNotificationAttachmentを介して画像(JPEG、PNG、GIF)、動画(MP4、MOV最大30秒)、音声(MP3、AAC、WAV)をサポートします。
  • インタラクティブ性 — ボタンとテキスト入力はUNNotificationActionとUNTextInputNotificationActionを介して追加され、通知カテゴリにバインドされます。
  • Service Extension — メディア読み込みに必須のコンポーネント:ペイロードURLから添付ファイルをダウンロードし、コンテンツに追加します。
  • Content Extension — カスタムUI、アニメーション、ジェスチャー処理を備えた完全にカスタムな通知インターフェースを作成します。
  • 制限 — 最大添付ファイルサイズ10MB、拡張メモリ制限50MB、処理時間最大30秒。

Rich Notificationとは

Rich Notificationは、テキストだけでなくメディア添付ファイル、インタラクティブ要素、カスタマイズされたインターフェースを含むiOSプッシュ通知です。「rich」という用語は、通知に画像、動画、音声、アクションボタン、テキスト入力を含める能力を反映しており、単純なアラートを本格的なインタラクティブ要素に変えます。

iOSにおける通知の進化

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、MOV10MB、最大30秒
音声MP3、AAC、WAV、CAF10MB

画像とアニメーションGIF

画像はコンパクトおよび拡張通知ビューで表示するためにシステムによって自動的にトリミングおよびスケーリングされます。アニメーションGIFはiOS 12以降でサポートされ、通知表示時に自動的に再生されます。推奨画像サイズは1024x1024ピクセルで、大型画面のiPadを含むすべてのデバイスで鮮明な表示を保証します。

動画と音声の添付ファイル

Rich Notificationの動画はデフォルトで音声なしで再生されます — ユーザーはプレーヤーボタンから音声を有効にできます。最大動画時間は30秒で、その後再生が停止します。音声添付ファイルは音声メッセージやサウンドプレビューに使用でき、拡張ビューで通知をタップすると再生されます。

インタラクティブボタンとアクション

インタラクティブアクションにより、ユーザーはアプリを開かずに通知から直接操作を実行できます。アクションはアプリ起動時にUNNotificationCategoryとUNNotificationActionを介して登録されます。各アクションはバックグラウンド(アプリを開かずに)またはフォアグラウンド(操作完了のためにアプリを開く)にできます。

UNNotificationActionとUNTextInputNotificationAction

UNNotificationActionは、タイトルとrequiresAuthentication(Face ID/Touch IDが必要)やdestructive(赤色で強調表示)などのオプションの修飾子を持つボタンを表します。UNTextInputNotificationActionはテキスト入力フィールドを追加してこの機能を拡張し、メッセージやコメントへのクイック返信に最適です。アクションは通知を長押しするか、下にスワイプすると表示されます。

カテゴリとアクションの登録

通知カテゴリはコンテンツタイプを利用可能なアクションのセットにリンクします。登録プロセスはアプリ起動時にAppDelegateでUNUserNotificationCenter.current().setNotificationCategoriesを介して実行されます。カテゴリはサーバー側でJSONペイロードのcategoryフィールドに指定され、システムは自動的に対応するアクションセットを通知に適用します。

アクションタップの処理

ユーザーがボタンをタップするかテキストを送信すると、システムはdidReceive responseメソッドでUNUserNotificationCenterDelegateを呼び出します。UNNotificationResponseにはアクション識別子と入力されたテキスト(UNTextInputNotificationActionの場合)が含まれます。この情報に基づいて、アプリは対応するビジネスロジックを実行します:メッセージの送信、アクションの確認、特定の画面を開くなど。

SwiftでのRich Notificationの実装

Rich Notification作成の完全なサイクルを見ていきましょう:AppDelegateでのカテゴリ登録からService Extensionでの処理、表示まで。AppDelegateはボタン付きのカテゴリを登録し、サーバーは画像URL付きの通知を送信し、Service Extensionはメディアをダウンロードし、Content Extensionはボタン付きのカスタムインターフェースを表示します。

swift
// 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
}

画像読み込みのためのService Extension

カスタムフィールドに「social_post」カテゴリと画像URLを含むプッシュ通知を受信した後、Service Extensionがアクティブになります。拡張機能は画像をダウンロードし、一意の識別子を持つUNNotificationAttachmentを作成してコンテンツに追加します。ダウンロードしたファイルのサイズを確認することが重要です — 10MBを超えると添付ファイルは作成されず、システムはメディアなしで通知を表示します。

swift
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のテスト

サーバーなしでRich Notificationをテストするには、iOSシミュレーターを使用し、xcrun simctl pushを使用してターミナルからプッシュを送信します。ペイロードでは、Service Extensionを有効にするためにmutable-content: 1を、アクションを表示するためにカテゴリを必ず指定してください。このコマンドはJSONファイルから選択したシミュレーターに直接プッシュを送信し、サーバーインフラを設定せずに迅速な反復を可能にします。

Content Extensionとカスタムインターフェース

UNNotificationContentExtensionを使用すると、標準の通知インターフェースを完全にカスタムのUIKitまたはSwiftUIビューに置き換えることができます。拡張機能はユーザーが通知を展開したとき(フォースタッチまたは下にスワイプ)にアクティブになり、ボタン、スライダー、アニメーション、その他のUIコンポーネントを含めることができます。インターフェースサイズはAuto Layoutを使用してコンテンツに適応します。

Content ExtensionでのStoryboardとSwiftUI

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の両方でインターフェースが正しく表示されるよう、さまざまな画面サイズでテストしてください。

よくある質問

Rich Notificationの最大画像サイズは?

1つのメディア添付ファイルの最大サイズは10MBです。制限を超えると、UNNotificationAttachmentは作成されず、通知はメディアなしで表示されます。Service Extensionでの高速読み込みのために、画像を1~3MBに最適化することをお勧めします。

Rich NotificationはすべてのiPhoneモデルで動作しますか?

Rich NotificationはiOS 10以降のすべてのデバイスでサポートされており、iPhone 5s以降を含みます。カスタムUIのContent ExtensionはiOS 12以降で利用可能です。Content ExtensionのSwiftUIはiOS 16以降です。古いバージョンでは、通知は標準形式で表示されます。

Rich NotificationでGIFを使用できますか?

はい、アニメーションGIFはiOS 12以降でサポートされています。GIFは通常の画像としてUNNotificationAttachmentを介して読み込まれ、通知表示時に自動的に再生されます。GIFのサイズは他の形式と同様に10MBに制限されています。

通知にはいくつのボタンを追加できますか?

カテゴリ登録時、通知あたり最大4つのアクションです。それ以上指定すると、システムは最初の4つを表示し、残りを無視します。最適なUXのためには2~3個のボタンを使用することをお勧めします — オプションが多すぎるとインターフェースが過負荷になります。

Rich Notificationを送信するにはサーバーが必要ですか?

はい、サーバーはカスタムフィールドにメディアファイルのURLとmutable-content: 1フラグを含むJSONペイロードをAPNS(Apple Push Notification service)を介して送信する必要があります。サーバーはContent Extensionとアクションを有効にするためのカテゴリも指定します。

まとめ

  • Rich Notification — メディア添付ファイル、インタラクティブボタン、カスタムUIを備えたiOSプッシュ通知で、ユーザーエンゲージメントを向上させます。
  • サポートされるメディア — JPEG/PNG/GIF画像、MP4/MOV動画(最大30秒)、MP3/AAC/WAV音声、ファイルあたり10MBの制限。
  • Service ExtensionはペイロードURLからメディアをダウンロードし、UNNotificationAttachmentを通知コンテンツに追加します。
  • インタラクティブアクション — カテゴリあたり最大4つのボタン、UNTextInputNotificationActionによるテキスト入力含む。
  • Content Extensionは標準インターフェースをカスタムUIKit/SwiftUIビューに置き換えます。
  • Content Extensionはタップ処理とリアルタイムUI更新のため、didReceiveメソッドでUNNotificationContentExtensionプロトコルを実装します。
  • Rich Notificationはすべてのレベルでの設定が必要:サーバー(APNS)、Service Extension(メディア読み込み)、AppDelegate(カテゴリ登録)。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください