Notification Content Extension — 概要、カスタムUI、iOSでの設定

著者: IT Sectr 公開日: 2026-06-15 読了時間: 9 分

Notification Content Extension — これは、プッシュ通知の標準テンプレートを完全にカスタムなユーザーインターフェースに置き換えるiOS拡張機能の一種です。開発者は、通知内に画像、オーディオプレーヤー、アクションボタン、プログレスバー、カスタムアニメーションを表示でき、標準のバナーを本格的なミニアプリケーションに拡張できます。WWDC 2025のデータによると、この拡張機能はUNNotificationContentExtensionを使用し、1つの通知で最大4つのメディア添付ファイルをサポートし、UNNotificationActionを介したインタラクティブなアクションの処理も行います。

重要なポイント

  • Notification Content Extensionは、標準のシステムテンプレートの代わりにプッシュ通知用のカスタムインターフェースを作成します
  • アーキテクチャはUNNotificationContentExtensionプロトコルに基づいており、didReceive(_:with:)およびdidReceive(_:withCompletionHandler:)メソッドを持ちます
  • 拡張機能は、アプリを開かずに通知内でメディア添付ファイル—画像、オーディオ、ビデオ—を直接表示できます
  • インタラクティブ通知は、フィードバックとテキスト入力を伴うカスタムアクションをサポートします
  • インターフェースのサイズは制限されており—カスタム通知の最大高さはiPhoneで320ポイント、iPadで352ポイントです

Notification Content Extensionとは

Notification Content Extension — これは、iOS上のプッシュ通知の表示をオーバーライドするアプリ拡張機能です。タイトル、メッセージ本文、ボタンがある標準のバナーの代わりに、Interface Builderで完全に開発されたインターフェースや、UIKitまたはSwiftUIを介してプログラムで作成されたインターフェースを表示できます。

表示前にコンテンツを変更するNotification Service Extensionとは異なり、Content Extensionは視覚的表現のみを担当します。拡張機能はすべての変更が行われた後の準備済み通知を受け取り、どのように表示するかを決定します。これが2種類の通知拡張機能の主な違いです。

拡張機能は、ユーザーが拡張ジェスチャー(通知を下にスクロールするか、デバイスモデルに応じて通知をクリックする)を実行するとアクティブになります。iOSは拡張機能プロセスを起動し、指定されたnibまたはstoryboardからコントローラーを作成し、UNNotificationContentExtensionを介して通知を渡します。

カスタム通知インターフェースの作成

開発は、XcodeでNotification Content Extensionテンプレートを使用して新しいtargetを追加することから始まります。XcodeはMainInterface.storyboardファイルと、UNNotificationContentExtensionプロトコルを実装するUIViewControllerを継承するクラスを作成します。

インターフェースのサイズと制限

カスタム領域の最大高さは、iPhone(大型画面モデルの場合)で320ポイント、iPadで352ポイントです。これらの境界を超えるコンテンツは切り取られます。さまざまなサイズに適応するには、スクロール可能なコンテンツにAuto LayoutとUIScrollViewを使用することをお勧めします。幅は常に通知の幅と等しく、デバイスの回転時に自動的に変更されます。

Apple Human Interface Guidelinesは次のように警告しています:通知インターフェースは簡潔で、画像、プレーヤー、マップ、クイック入力フォームの1つの主要要素のみを含むべきです。複数のインタラクティブ要素はユーザーを圧倒し、操作を複雑にします。

メインアプリケーションとの接続

App Group — 拡張機能とメインアプリケーション間のデータ交換の唯一のメカニズムです。App Groupの共有ディレクトリを介して、キャッシュされた画像、トークン、設定を転送できます。プロセスの分離のため、メインアプリケーションのAPIの直接呼び出しやそのUserDefaultsへのアクセスは利用できません。

swift
class NotificationViewController: UIViewController {

    func didReceive(
        _ notification: UNNotification
    ) {
        guard let attachment = notification
            .request.content.attachments.first()
        else { return }
        if attachment.url.startAccessingSecurityScopedResource() {
            imageView.image = UIImage(contentsOfFile:
                attachment.url.path)
            attachment.url.stopAccessingSecurityScopedResource()
        }
    }
}

UNNotificationContentExtensionプロトコル

UNNotificationContentExtension — カスタム通知のライフサイクルを定義するメインプロトコルです。プロトコルは、コンテンツの受信、アクションの処理、インターフェースの管理のためのメソッドを提供します。

didReceive:with:メソッド

didReceive(_:with:)は通知を受信したときに呼び出されます。拡張機能は、メディアプレーヤーを管理するためのUNNotificationオブジェクトとUNNotificationContentExtensionMediaPlayPauseButtonTypeを受け取ります。このメソッドでは、インターフェースを設定する必要があります—画像の読み込み、プレーヤーの初期化、データの表示など。システムは、リアルタイムで通知が更新されるたびにこのメソッドを呼び出します。

拡張機能には実行のための制限時間があることに注意することが重要です—完全な表示サイクルで約30秒です。この時間内にインターフェースが準備されない場合、iOSはシステム通知を表示します。重いリソース(ネットワークからの画像読み込み、ビデオデコードなど)については、App Groupを介した事前キャッシュを使用した非同期操作をお勧めします。

メディアプレーヤーの管理

プロトコルには、play/pauseボタンのためのオプションのメソッドが含まれています:mediaPlaymediaPausemediaPlayPauseButtonType。通知にオーディオまたはビデオコンテンツが含まれている場合、拡張機能はシステムコントロール要素を備えた組み込みプレーヤーを表示できます。適切なボタンタイプを返すと、iOSは自動的に拡張機能の右上隅に再生ボタンを追加します。

メディア添付ファイルとその処理

UNNotificationAttachment — 通知に添付されたメディアデータを含むオブジェクトです。画像、オーディオファイル、ビデオは、サーバー上またはNotification Service ExtensionでUNNotificationAttachmentを介して通知作成段階で追加されます。

サポートされる形式

画像:JPEG、PNG、GIF、HEIF。オーディオ:MP3、AAC、ALAC、WAV。ビデオ:MPEG-4、H.264、HEVC。各添付ファイルの最大サイズは50 MB、1通知あたり最大4つの添付ファイルです。システムは通知表示前にバックグラウンドで自動的に添付ファイルをダウンロードし、security-scopedリソースを介して拡張機能にローカルURLへのアクセスを提供します。

Appleによると、拡張機能は自分でメディアをダウンロードすべきではありません—システムによるダウンロード完了後、UNNotificationAttachmentにはすでにローカルURLが含まれています。ただし、添付ファイルが時間通りに読み込まれなかった場合(例:接続不良)、拡張機能はプレースホルダーまたは代替テキストを表示できます。

security-scopedリソースの操作

各UNNotificationAttachmentはsecurity-scoped URLを提供し、拡張機能はstartAccessingSecurityScopedResource()を介してアクセスし、stopAccessingSecurityScopedResource()を介して解放する必要があります。これらのメソッドはペアで呼び出す必要があります—そうしないとリソースが解放されず、アクセス権限がリークします。

swift
let attachment = notification.request.content.attachments.first()
guard attachment.url.startAccessingSecurityScopedResource()
else { return }
defer { attachment.url.stopAccessingSecurityScopedResource() }
let data = try Data(contentsOf: attachment.url)
imageView.image = UIImage(data: data)

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

Notification Content Extensionは、カスタムインタラクティブアクション—通知コンテンツの下に表示されるボタン—をサポートします。アクションは、UNNotificationCategoryを介して通知カテゴリを作成する際に登録され、破壊的、テキスト、またはバックグラウンドにすることができます。

アクションのタイプ

UNNotificationAction — タイトルとオプションの破壊的フラグを持つ単純なアクションです。UNTextInputNotificationAction — テキスト入力フィールドを持つアクションで、例えばメッセージへのクイック返信のためです。両方のタイプはUNNotificationActionOptions.authenticationRequiredオプションをサポートします—実行前にデバイスのロック解除が必要です。

拡張機能は、選択されたアクションをdidReceive(_:withCompletionHandler:)メソッドを介して受け取り、アクション識別子とオプションのテキストを含むUNNotificationResponseオブジェクトが渡されます。拡張機能は応答を自分で処理するか、共有のApp Groupコンテナを介してメインアプリケーションに渡すことができます。

swift
let category = UNNotificationCategory(
    identifier: "message",
    actions: [
        UNTextInputNotificationAction(
            identifier: "reply",
            title: "Reply",
            options: .authenticationRequired
        ),
        UNNotificationAction(
            identifier: "mark_read",
            title: "Mark Read",
            options: .foreground
        )
    ],
    intentIdentifiers: []
)

よくある質問

Notification Content ExtensionとService Extensionの違いは何ですか?

Content Extensionは通知の視覚的表示を担当し、Service Extensionは表示前にコンテンツを変更することを担当します。Content ExtensionはService Extensionの後に動作し、通知のペイロードを変更できません。

どのプログラミング言語がサポートされていますか?

SwiftおよびObjective-C(UIKit用)。iOS 16以降、SwiftUIもNotificationContentViewを介してサイズおよび設定モディファイア付きで通知インターフェースの作成にサポートされています。

Notification Content ExtensionでSwiftUIを使用できますか?

はい、iOS 16以降、拡張機能はUIHostingControllerを介してSwiftUIを使用できます。ただし、UIKitのすべての能力—サイズ、制約、security-scopedリソース—は保持され、SwiftUIコンテンツに適用されます。

1つの通知にいくつのメディア添付ファイルを付けられますか?

1通知あたり最大4つの添付ファイル。各添付ファイルのサイズは最大50 MB。サポートされる形式:画像(JPEG、PNG、HEIF)、オーディオ(MP3、AAC)、ビデオ(MPEG-4、H.264)。

拡張機能からメインアプリケーションにデータを渡すには?

App Groupを介して—ディスク上の共有ディレクトリ。app groupサフィックス付きのUserDefaultsも機能します。拡張機能プロセスの分離のため、メインアプリケーションAPIへの直接呼び出しは利用できません。

まとめ

  • Notification Content Extensionは、標準の通知インターフェースを任意の視覚要素を持つカスタムインターフェースに置き換えます
  • アーキテクチャは、インターフェース更新のためのdidReceiveメソッドを持つUNNotificationContentExtensionプロトコルを使用します
  • UNNotificationAttachmentは、自動バックグラウンドダウンロードとsecurity-scopedアクセスを備えたメディア添付ファイルを提供します
  • インタラクティブアクションは、UNNotificationActionを介してテキスト入力と破壊的操作をサポートします
  • インターフェースの最大高さはiPhoneで320ポイントで、コンテンツ適応にはUIScrollViewをお勧めします
  • メインアプリケーションとのデータ交換は—App Groupとディスク上の共有ディレクトリのみを介して

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

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

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

こちらもお読みください