Notification Action — プッシュ通知内に直接表示され、ユーザーがアプリを開かずにアクションを実行できるインタラクティブなボタンや入力フィールドです。これはユーザーエクスペリエンスの重要な要素であり、ターゲット画面への経路を短縮します。Android Developers, 2025によると、Notification Actionはインタラクションの摩擦を減らすことでユーザーエンゲージメントを最大40%向上させます。
重要なポイント
Notification Actionは、特定のアクションを実行するためにプッシュ通知に追加されるインタラクティブなインターフェース要素です。ユーザーはアプリに入ることなく、メッセージに返信したり、タスクを確認したり、特定の画面を開いたりできます。アクションは通知テキストの下にボタンとして、またはスワイプ時に展開ビューで表示されます。
Notification Actionの主な目的は、ユーザーが目標に到達するまでのステップ数を減らすことです。アプリを開いて目的の画面に移動する代わりに、ユーザーは1つのボタンを押すだけです。調査によると、インタラクティブな通知を備えたアプリは、シンプルな通知と比較して25~40%高いエンゲージメントを示しています。
Androidでは、Notification Actionはコンパクトビューでアイコンボタンとして、展開モードではテキストボタンとして表示されます。iOSでは、通知を長押しするか左にスワイプするとアクションが表示されます。各プラットフォームにはアクション数に関する推奨事項があります。Androidは最大3つ、iOSは最大4つを推奨しています。
| プラットフォーム | 最大アクション数 | 表示方法 | アクションの種類 |
|---|---|---|---|
| Android | 3 | アイコン+テキスト | ボタン、テキスト入力 |
| iOS | 4 | 長押し/スワイプ | ボタン、テキスト入力 |
Androidでは、Notification ActionはNotificationCompat.Builderを使用してaddAction()メソッドで作成されます。各アクションには、アイコン、テキスト、およびタップ時に起動するPendingIntentが含まれます。Android 7.0(API 24)以降、RemoteInputによる直接テキスト入力がサポートされています。
通知にボタンを作成するには、タップ時に起動されるPendingIntentを定義する必要があります。PendingIntentはActivityを開いたり、ServiceやBroadcastReceiverを起動したりできます。アクションアイコンはモノクロで、Material Designに準拠している必要があります。
val acceptIntent = Intent(context, AcceptActionReceiver::class.java)
acceptIntent.putExtra("notification_id", notificationId)
val acceptPendingIntent = PendingIntent.getBroadcast(
context, requestCode,
acceptIntent, PendingIntent.FLAG_UPDATE_CURRENT
)
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("確認リクエスト")
.setContentText("タスクの完了を確認してください")
.addAction(R.drawable.ic_accept, "確認", acceptPendingIntent)
.build()
テキスト入力が必要なシナリオ(メッセージへの返信など)では、AndroidはRemoteInputを提供します。ユーザーは通知内に直接テキストを入力し、アプリはActivityを開かずにそれを受信します。RemoteInputはAndroid 7.0+でサポートされ、BroadcastReceiverまたはServiceでの明示的な処理が必要です。
val remoteInput = RemoteInput.Builder("reply_input")
.setLabel("返信を入力")
.build()
val replyAction = NotificationCompat.Action.Builder(
R.drawable.ic_reply, "返信", replyPendingIntent
)
.addRemoteInput(remoteInput)
.build()
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.addAction(replyAction)
.build()
アクションがタップされると、システムは指定されたPendingIntentを起動します。RemoteInputから入力されたテキストを取得するには、RemoteInput.getResultsFromIntent(intent)を呼び出します。UIスレッドをブロックしないように、IntentServiceまたはWorkManagerでアクションを処理することをお勧めします。
iOSでは、Notification ActionはUserNotificationsフレームワークを使用して実装されます。開発者はアクションカテゴリ(UNNotificationCategory)を作成し、アプリ起動時に登録します。各アクションは、一意の識別子を持つUNNotificationActionオブジェクトによって定義されます。
iOSのプッシュ通知にアクションを追加するには、関連するアクションをグループ化するカテゴリを作成する必要があります。カテゴリはcategoryフィールドを通じて通知ペイロードで指定されます。通知を受信すると、システムは指定されたカテゴリから利用可能なアクションを表示します。
import UserNotifications
class NotificationSetup {
func registerNotificationCategories() {
let approveAction = UNNotificationAction(
identifier: "APPROVE_ACTION",
title: "承認",
options: [.foreground]
)
let declineAction = UNNotificationAction(
identifier: "DECLINE_ACTION",
title: "拒否",
options: [.destructive]
)
let category = UNNotificationCategory(
identifier: "REQUEST_CATEGORY",
actions: [approveAction, declineAction],
intentIdentifiers: [],
options: []
)
UNUserNotificationCenter.current()
.setNotificationCategories([category])
}
}
ユーザーがアクションをタップすると、システムはUNUserNotificationCenterのデリゲートでuserNotificationCenter:didReceiveNotificationResponseメソッドを呼び出します。response.actionIdentifierには実行されたアクションの識別子が含まれます。テキスト入力には、ユーザーが入力したテキストを提供するUNTextInputNotificationActionが使用されます。
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(
center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void
) {
switch response.actionIdentifier {
case "APPROVE_ACTION":
Log.d("Action: approved")
case "DECLINE_ACTION":
Log.d("Action: declined")
case UNNotificationDefaultActionIdentifier:
Log.d("Action: opened app")
default:
break
}
completionHandler()
}
}
Notification Actionは、インタラクションの種類と使用シナリオによって分類されます。アクションタイプの正しい選択は、ユーザーエクスペリエンスとターゲットアクションへのコンバージョンに直接影響します。
最も一般的なタイプ — 特定の画面でアプリを開くボタンです。AndroidではPendingIntent.getActivity()、iOSではUNNotificationActionの.foregroundオプションを使用します。注文詳細の表示など、完全なインターフェースが必要なアクションに使用されます。
アプリを開かずに実行されるアクション。AndroidではPendingIntent.getBroadcast()またはPendingIntent.getService()を使用します。iOSでは.authenticationRequiredオプションまたは.foregroundなしを使用します。例:タスクの完了マーク、投稿へのいいね、お気に入り追加。
ユーザーが通知内に直接テキストを入力できます。AndroidではRemoteInput、iOSではUNTextInputNotificationActionを使用して実装されます。メッセージへの返信、コメント、ワンタイム確認コードの入力に使用されます。
データを不可逆的に変更するアクション — 削除、拒否、ブロック。Androidでは視覚的に強調表示され(一部のシステムでは赤色)、iOSでは.destructiveオプションが必要です。破壊的アクションには、追加のダイアログや2回目のタップなどによる確認を求めることをお勧めします。
アクションの別のクラス — 通知から直接テキストを入力します。AndroidではPendingIntentと組み合わせたRemoteInputを使用して実装されます。iOSでは、UNNotificationActionを継承するUNTextInputNotificationActionが使用されます。このようなアクションは、メッセンジャーでのクイック返信、プロモーションコードの入力、フィードバックフォームの記入、サービス品質の評価に使用されます。入力されたテキストはアクション識別子とともにアプリに渡されます。両方のプラットフォームでテキスト入力を正しく処理するには、ターゲットアクションを実行する前に入力データの解析と検証を実装する必要があります。
正しいNotification Actionの処理は、分析とユーザーエクスペリエンスにとって重要です。各タップはログに記録され、アプリが閉じられていてもアクションは確実に実行される必要があります。
分析システムを通じて各Notification Actionタップを追跡します。Firebase Analytics、Mixpanel、Yandex.Metricaを使用すると、アクション識別子、タップ時間、通知コンテキストを記録できます。このデータは通知戦略を最適化し、エンゲージメントを高めるのに役立ちます。さまざまなアクションセットを用いたA/Bテストは、ユーザーとの最も効果的なインタラクションシナリオを特定するのに役立ちます。
アプリが閉じられていても、アクションがタップされるとシステムはIntentまたはUNNotificationResponseを配信します。Androidでは、確実な処理のためにBroadcastReceiverを使用します。iOSでは、システムがアプリをバックグラウンドで起動し、デリゲートに応答を渡します。重要なアクション(支払い確認、認証)の場合は、再試行メカニズムを追加し、正常に完了したことをユーザーに通知します。
Android 7.0以降、開発者はアイコンと色を通じてNotification Actionの外観に影響を与えることができます。アイコンはモノクロ(アルファチャンネル)、サイズ24x24 dpである必要があります。iOSでは、ボタンのカスタマイズは制限されており、システムの色とフォントが使用されます。Material Designは、アクションを優先度でグループ化することを推奨しています。最も重要なアクションを最初に、破壊的なものを最後に配置します。
よくある質問
Androidは最大3つのアクション、iOSは最大4つを推奨しています。制限を超えると、一部のアクションが表示されないか、サブメニューに隠れます。
アイコンはNotificationCompat.Action.Builderにdrawableリソースとして渡します。アイコンはモノクロ(アルファチャンネル)、サイズ24x24 dpで、Material Designのガイドラインに準拠する必要があります。
はい、通知がロック画面に表示され、visibilityフラグがVISIBILITY_PUBLICに設定されている場合に動作します。iOSでは、認証が必要なアクションには.authenticationRequiredオプションが必要です。
Androidでは、システムがプロセスを再作成してIntentを配信します。iOSでは、システムがアプリをバックグラウンドで起動します。確実な配信は、AndroidではBroadcastReceiver、iOSではUNNotificationServiceExtensionを使用して実現できます。
Androidでは、アクションは通知の直下にアイコンとして表示されます。iOSでは、アクションは長押しまたはスワイプの背後に隠れています。通知のUXデザインは、これらのプラットフォームの違いを考慮する必要があります。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。