Notification Categoryとは:種類とiOSでの動作

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

Notification Category(通知カテゴリ)は、プッシュ通知を種類ごとにグループ化し、カスタムアクションを追加するためのiOSメカニズムです。カテゴリは、通知に対して3D Touchまたは長押しを行ったときに表示されるボタンと、システムがこのタイプの受信通知を処理する方法を決定します。Appleデベロッパードキュメントによると、UNNotificationCategoryはUNUserNotificationCenterに登録され、APNSペイロードのcategoryフィールドを介して通知にリンクされます。

重要なポイント

  • Notification Category — プッシュ通知を分類し、アクションを追加するiOSメカニズム
  • UNNotificationCategory — UNNotificationActionのセットでカテゴリを登録するクラス
  • アクション — 通知の下のボタン:テキスト入力用のUNTextInputAction、タップ用のUNNotificationAction
  • 関連付け — カテゴリはAPNSペイロードのaps辞書のcategoryキーで指定される
  • Androidとの違い — iOS Categoryはアクションを管理し、Android Channelは重要度とサウンドを管理する

iOSのNotification Categoryとは?

Notification CategoryはiOS 8.0以降の機能で、開発者がプッシュ通知を分類し、インタラクティブなアクションを追加できるようにします。ユーザーが通知を受け取り、強く押す(3D Touch)か長押しすると、カテゴリによって定義されたボタンが表示されます。これにより通知がインタラクティブになり、ユーザーはアプリを開かずにアクションを実行できます。

カテゴリはUNNotificationCategoryオブジェクトを使用して登録され、識別子、アクションの配列、オプションの表示パラメータが含まれます。システムはAPNSペイロードのカテゴリ識別子を使用して、登録されたカテゴリを見つけ、対応するボタンを表示します。

AndroidのNotification Channelとは異なり、iOS Categoryは重要度、サウンド、バイブレーションを管理しません。その唯一の目的は、通知にインタラクティブ機能を提供することです:返信、確認、キャンセル、またはテキスト入力ボタン。

カテゴリは必須ですか?

iOSでプッシュ通知を表示するためにカテゴリは必須ではありません。通知は常に表示されます—カテゴリが登録されていればボタン付きで、なければボタンなしで。カテゴリは通知にインタラクティブ性を追加するためだけに必要です。

通知カテゴリの仕組み

カテゴリメカニズムは4つの段階で構成されます:クライアントでのカテゴリ登録、カテゴリ付きAPNSペイロードの送信、システムによるカテゴリの認識、ユーザーアクションの処理。

  • 登録 — アプリがアクションの配列を持つUNNotificationCategoryを作成し、UNUserNotificationCenterに登録する
  • 送信 — サーバーがAPNSペイロードにcategoryキーを含め、その値がカテゴリ識別子と一致する
  • 表示 — iOSが通知を表示し、フォースタッチでカテゴリに関連付けられたボタンを表示する
  • 処理 — ユーザーがボタンをタップすると、UNUserNotificationCenterDelegate.didReceive responseがトリガーされる

カテゴリのアクションには2つのタイプがあります:foreground(アプリを開く)とbackground(バックグラウンドで実行)。バックグラウンドアクションの場合、アプリはUNNotificationActionHandlerでの処理に制限時間(約30秒)を与えられます。

カテゴリ登録時のオプション

UNNotificationCategoryはoptionsパラメータを介していくつかのオプションをサポートしています:customDismissAction — 通知をスワイプして消したときのイベントを受け取る、allowInCarPlay — CarPlayでアクションを表示する、hiddenPreviewsBodyPlaceholder — 非表示プレビューのカスタムプレースホルダーテキスト。

UNNotificationAction:アクションの種類

iOSは通知カテゴリに2種類のアクションを提供します。各タイプには独自の目的とユーザーとの対話方法があります。

タイプクラス説明
シンプルアクションUNNotificationActionタイトルとオプション(destructive、foreground、authenticationRequired)を持つボタン“削除”、“表示”
テキスト入力UNTextInputActionプレースホルダー付きのテキスト入力フィールドを開くボタン“返信”、“コメント”

UNTextInputActionはiOSのユニークな機能です。ユーザーが“返信”ボタンをタップすると、システムはテキストフィールドを表示し、ユーザーが返信を入力します。入力されたテキストはアクション識別子とともにデリゲートに渡されます。これにより、アプリを開かずにクイック返信を実装できます。

アクションオプション:options.authenticationRequired — デバイスのロック解除が必要、options.destructive — ボタンを赤く強調表示(危険なアクション用)、options.foreground — タップ後にアプリを開く。

iOSコードでのカテゴリ設定

カテゴリはアプリ起動時に登録され、通常はdidFinishLaunchingWithOptionsメソッドで行われます。登録はUNUserNotificationCenterを介して、通知許可をリクエストした後に行われます。カテゴリは起動のたびに更新できます—古いバージョンは新しいものに置き換えられます。

swift
import UserNotifications

class AppDelegate: UIResponder, UIApplicationDelegate {

    func registerNotificationCategories() {
        let replyAction = UNTextInputNotificationAction(
            identifier: "reply",
            title: "返信",
            options: [.foreground],
            textInputButtonTitle: "送信",
            textInputPlaceholder: "メッセージを入力..."
        )

        let deleteAction = UNNotificationAction(
            identifier: "delete",
            title: "削除",
            options: [.destructive]
        )

        let messageCategory = UNNotificationCategory(
            identifier: "message",
            actions: [replyAction, deleteAction],
            intentIdentifiers: [],
            options: [.customDismissAction]
        )

        UNUserNotificationCenter.current()
            .setNotificationCategories([messageCategory])
    }

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        registerNotificationCategories()
        return true
    }
}

カテゴリを登録した後、APNSペイロードにcategory = “message”を含む通知は、“返信”と“削除”ボタンを表示します。タップ処理はuserNotificationCenter:didReceive responseで行われ、actionIdentifierが押されたボタンを特定します。

デリゲートでのタップ処理

ユーザーがカテゴリボタンをタップすると、iOSはUNNotificationResponseオブジェクトを伴ってUNUserNotificationCenterDelegateを呼び出します。response.actionIdentifierにはタップされたボタンの識別子が含まれ、response.notification.request.content.userInfoにはペイロードからのカスタムデータが含まれます。

Androidチャネルとの違い

AndroidのNotification Channelに慣れている開発者は、しばしばこれらをiOSのNotification Categoryと混同します。名前は似ていますが、これらのメカニズムは異なるタスクを解決し、異なる方法で動作します。

  • 目的 — Android Channelは通知の重要度と表示を管理し、iOS Categoryはインタラクティブアクションを管理する
  • 必須性 — Android Channelは通知表示に必須、iOS Categoryはオプション
  • ユーザー制御 — Androidユーザーはシステム設定でチャネルを設定、iOSカテゴリはユーザーに直接表示されない
  • グループ化 — Android ChannelはChannelGroupsにグループ化可能、iOS Categoryはグループ化されない

両方のプラットフォームで両方のメカニズムを組み合わせることができます:Androidでは通知はNotificationCompatのアクションを持つチャネルに属することができ、iOSではカテゴリがチャネルを補完します。iOSではチャネルはthread-idと呼ばれ、通知センターで通知をグループ化するために使用されます。

カテゴリ付きAPNSペイロード

通知にカテゴリボタンを表示するには、サーバーがAPNSペイロードにcategoryキーを含める必要があります。このキーがないと、システムは通知にどのカテゴリを適用するかわかりません。

json
{
    "aps": {
        "alert": {
            "title": "新しいメッセージ",
            "body": "アンナ:こんにちは!元気ですか?"
        },
        "category": "message",
        "thread-id": "chat_123",
        "badge": 5,
        "sound": "default"
    }
}

categoryキーは、クライアントでsetNotificationCategoriesを介して登録された識別子と完全に一致する必要があります。大文字小文字は区別されます—“message”と“Message”は異なるカテゴリと見なされます。カテゴリが見つからない場合、通知はボタンなしで表示され、ログにエラーは記録されません。

未知のカテゴリの処理

サーバーがクライアントに登録されていないカテゴリで通知を送信した場合、iOSはカテゴリを無視し、通知をボタンなしで表示します。エラーはログに記録されず、アプリは不一致を知ることはありません。サーバーとクライアント間でカテゴリリストを同期することをお勧めします。

カテゴリデザインパターン

iOSで通知カテゴリを設計する際は、1カテゴリ=1シナリオの原則に従ってください。各カテゴリは特定の種類のインタラクションに対応する必要があります:メッセージへの返信、アクションの確認、リクエストの拒否。1つのカテゴリに異なるシナリオを混在させないでください。

アプリを開かずにテキストを入力する必要があるシナリオ(メッセージングの返信、コメント、クイックメモ)ではUNTextInputActionを使用します。テキストアクションはエンゲージメントを高めます—ユーザーはアプリ内で5回以上のタップではなく、2回のタップで意味のあるアクションを実行します。

危険なアクション(削除、ブロック)にはdestructiveオプションを使用します。iOSはこれらのボタンを赤く強調表示し、アクションの取り返しのつかなさをユーザーに警告します。デバイスのロック解除が必要なアクション(個人データの表示)にはauthenticationRequiredを指定します。

さまざまなデバイスでカテゴリをテストしてください:3D Touch対応iPhone、3D Touch非対応iPhone(長押し)、iPad、Mac。Appleプラットフォーム間でカテゴリの動作がわずかに異なる場合があります。CarPlayには特に注意してください:カテゴリボタンは車の画面に表示され、ドライバーの安全のために最小限のテキストで設計する必要があります。

よくある質問

iOSでいくつのカテゴリを登録できますか?

制限はありません—iOSはUNNotificationCategoryの数に制限を設けていません。ただし、実際には、デリゲート処理を複雑にしないために10~15個以下のカテゴリを使用することをお勧めします。各カテゴリには最大4つのアクション(ボタン)を含めることができます。4つを超えるアクションはシステムによって無視されます。

カテゴリボタンのタップを処理するには?

UNUserNotificationCenterDelegateプロトコルとdidReceiveメソッドを実装します。response.actionIdentifierを確認します:UNNotificationDismissActionIdentifier — スワイプで閉じる、UNNotificationDefaultActionIdentifier — 本文をタップ、またはカスタムボタン識別子。テキスト入力ボタンの場合、テキストはresponse.userTextから取得できます。

categoryとthread-idの違いは?

Category — 通知のインタラクティブアクション(ボタン)を定義します。Thread-id — 通知センターで通知をトピックごとにグループ化します。両方のキーはAPNSペイロードで指定されます。Categoryとthread-idは関連していません:通知にカテゴリがあってもthread-idがなくても構いません。その逆も同様です。

カテゴリはmacOSで動作しますか?

はい、UNNotificationCategoryはmacOS 10.14+(Mojave)でUserNotificationsフレームワークを使用するアプリでサポートされています。macOSでのカテゴリの動作はiOSと同様です:通知をクリックするとボタンが表示され、処理はUNUserNotificationCenterDelegateを介して行われます。

起動のたびにカテゴリを更新する必要がありますか?

setNotificationCategoriesを介してアプリの起動ごとにカテゴリを登録することをお勧めします。システムは呼び出しのたびに古いカテゴリセットを新しいものに置き換えます。更新しない場合、カテゴリは起動間で保持されますが、コードが変更されると、古いカテゴリが予期しない動作を引き起こす可能性があります。

まとめ

  • Notification Category — プッシュ通知にインタラクティブアクションを追加するiOSメカニズム
  • UNNotificationCategory — 識別子、UNNotificationActionの配列、オプションを組み合わせたクラス
  • UNTextInputAction — アプリを開かずにクイック返信ができるテキスト入力フィールド付きアクション
  • APNSペイロード — aps辞書のcategoryキーが通知を登録済みカテゴリにリンクする
  • 最大4アクション — カテゴリあたりの最大ボタン数、超過分はシステムが無視する
  • アクションオプション — foreground(アプリを開く)、destructive(赤いボタン)、authenticationRequired
  • Androidとの違い — iOS Categoryはアクションを処理、Android Channelは重要度とサウンドを処理

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

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

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

こちらもお読みください