通知について

通知とは、Android がアプリの UI 外で表示するメッセージであり、リマインダー、他のユーザーからの連絡、アプリからのタイムリーな情報をユーザーに提供します。ユーザーは通知をタップしてアプリを開くか、通知から直接アクションを実行できます。

このページでは、通知が表示される場所と利用可能な機能の概要について説明します。

実装ガイド

次のガイドでは、アプリにさまざまな通知機能を実装する方法について説明します。

  • 通知を作成する: 基本的な通知を作成して発行する方法を学びます。
  • 通知権限: POST_NOTIFICATIONS 実行時の権限を処理する方法について説明します。
  • 通知チャンネル: ユーザーが通知の動作を制御できるようにします。
  • 拡張可能な通知: BigTextStyle や MessagingStyle などのスタイルを使用して、より多くのコンテンツを表示します。
  • バブル: 会話にフローティングの展開可能なオーバーレイを使用します。
  • 進捗状況中心の通知: ライドシェアや配達など、ユーザーが開始したジャーニーを追跡します。
  • 通話スタイルの通知: 着信通話と進行中の通話を他の通知タイプと区別します。
  • ライブ情報の通知: 進行中のアクティビティの進捗状況を追跡します。
  • ビュー固有の通知ガイド: ビューベースのアプリに通知を実装するためのガイド。

通知のデザインと操作パターンについて詳しくは、通知のデザインガイドをご覧ください。

デバイスでの表示

通知は、さまざまな場所や形式でユーザーに自動的に表示されます。通知は、ステータスバーのアイコン、通知ドロワーの詳細なエントリ、アプリのアイコンのバッジとして表示されます。

クロスデバイスの行動

通知は、デフォルトでペア設定されたウェアラブルにも表示されます。通知コンテンツがソースデバイスにのみ関連するシナリオでは、setLocalOnly() を使用します。たとえば、メディアのダウンロードが完了したことを確認する通知などです。Wear OS の通知に固有のガイダンスについては、Wear OS の通知のガイダンスをご覧ください。

ステータスバーと通知ドロワー

通知を発行すると、最初はステータスバーにアイコンとして表示されます。

図 1. 通知アイコンはステータスバーの左側に表示されます。

ユーザーは、ステータスバーを下にスワイプして通知ドロワーを開き、通知の詳細を確認したり、通知に対して操作を行ったりできます。

図 2. 通知ドロワー内の通知。

ドロワー内で通知を下にドラッグすると、ビューを展開できます。展開されたビューにはコンテンツがさらに表示され、操作ボタンも表示されます(存在する場合)。Android 13 以降、この展開されたビューには、ユーザーがフォアグラウンド サービスが進行中のアプリを停止できるボタンがあります。

通知は、アプリまたはユーザーによって破棄されるまで通知ドロワー内に表示され続けます。

ヘッドアップ通知

Android 5.0 以降では、ヘッドアップ通知と呼ばれるフローティング ウィンドウに通知を一時的に表示できます。この動作は通常、ユーザーがすぐに知る必要がある重要な通知を対象としており、デバイスがロック解除されている場合にのみ表示されます。

図 3. フォアグラウンド アプリの前面にヘッドアップ通知が表示されます。

ヘッドアップ通知は、アプリが通知を発行したときに表示されます。しばらくすると消えますが、通常どおり通知ドロワーには表示されたままになります。

ヘッドアップ通知をトリガーする条件には、次のようなものがあります。

  • ユーザーのアクティビティが全画面表示モードになっている(アプリが fullScreenIntent を使用している場合など)。

  • 通知の優先度が高く、Android 7.1(API レベル 25)以前を搭載しているデバイスで着信音またはバイブレーションを使用している。

  • Android 8.0(API レベル 26)以降を搭載したデバイスで、通知チャンネルの重要度が高に設定されている。

ロック画面

Android 5.0 以降では、通知をロック画面に表示できます。

アプリから送信された通知をセキュアなロック画面に表示するかどうか、表示する場合はどの程度詳細に表示するかを、プログラムで設定できます。

ユーザーは、システム設定を使用して、ロック画面の通知に表示される詳細レベルを選択したり、ロック画面の通知をすべて無効にしたりできます。Android 8.0 以降では、ユーザーは通知チャンネルごとにロック画面の通知を無効または有効にできます。

図 4. ロック画面上の通知。機密性の高いコンテンツは非表示になります。

詳しくは、ロック画面の公開設定をご覧ください。

アプリアイコンのバッジ

Android 8.0(API レベル 26)以降を搭載したデバイスでサポートされているランチャーでは、アプリアイコンに新しい通知を示す色付きのバッジ(通知ドット)が表示されます。

ユーザーは、アプリアイコンを長押しして、そのアプリの通知を表示できます。ユーザーは、通知ドロワーと同様に、そのメニューから通知を閉じたり、通知に対して操作を行ったりできます。

図 5. 通知バッジと長押しメニュー。

バッジの仕組みについて詳しくは、通知バッジを変更するをご覧ください。

Wear OS デバイス

ユーザーがペア設定された Wear OS デバイスを所有している場合、すべての通知が自動的に表示されます。これには、展開可能な詳細や操作ボタンも含まれます。

ウェアラブルでの通知の外観をカスタマイズし、返信の候補や音声入力による返信など、さまざまなアクションを提供することで、エクスペリエンスを向上させることができます。詳しくは、ウェアラブル固有の機能を通知に追加する方法をご覧ください。

図 6. 通知は、ペア設定された Wear OS デバイスに自動的に表示されます。

通知の構造

通知のデザインはシステム テンプレートによって決まり、アプリはテンプレートの各部分のコンテンツを定義します。通知の詳細の一部は、展開表示でのみ表示されます。

図 7. 基本的な詳細を含む通知。

通知の最も一般的な部分を図 7 に示します。

  1. 小アイコン: 必須。setSmallIcon() を使用して設定します。
  2. アプリ名: システムによって提供されます。
  3. タイムスタンプ: システムによって提供されますが、setWhen() を使用してオーバーライドするか、setShowWhen(false) を使用して非表示にできます。
  4. 大きいアイコン: 省略可。通常は連絡先の写真にのみ使用されます。アプリアイコンには使用しないでください。setLargeIcon() を使用して設定します。
  5. タイトル: 省略可。setContentTitle() を使用して設定します。
  6. テキスト: 省略可。setContentText() を使用して設定します。

すべてのデバイスで適切なデザインの互換性を確保するため、システム テンプレートを使用することを強くおすすめします。必要に応じて、カスタム通知レイアウトを作成できます。

これらの機能などを使用して通知を作成する方法については、通知を作成するをご覧ください。

通知の操作

必須ではありませんが、通知をタップしたときに適切なアプリ アクティビティが開くようにすることをおすすめします。このデフォルトの通知アクションに加えて、図 8 に示すように、通知からアプリ関連のタスクを完了する操作ボタンを追加できます(多くの場合、アクティビティを開く必要はありません)。

図 8. 操作ボタン付きの通知。

Android 7.0(API レベル 24)以降では、通知から直接メッセージに返信したり、他のテキストを入力したりするアクションを追加できます。

Android 10(API レベル 29)以降では、プラットフォームで、インテント ベースのアクションの候補を使ってアクション ボタンが自動的に生成されます。

操作ボタンの追加については、通知を作成するをご覧ください。

デバイスのロック解除を必須にする

デバイスのロック画面に通知の操作が表示されることがあります。通知アクションによってアプリがアクティビティを起動したり、ダイレクト返信を送信したりする場合、アプリがその通知アクションを呼び出す前に、ユーザーはデバイスのロックを解除する必要があります。

Android 12(API レベル 31)以降では、アプリが通知アクションを呼び出すには、アクションが起動するワークフローに関係なく、デバイスのロックを解除する必要があるように通知アクションを構成できます。このオプションを使用すると、ロックされたデバイスの通知にセキュリティ レイヤが追加されます。

アプリが特定の通知アクションを呼び出す前にデバイスのロック解除を要求するには、次のコード スニペットに示すように、通知アクションの作成時に true を setAuthenticationRequired() に渡します。

val intent = Intent(
    context, null
    /** Replace with a valid target activity */
)
val moreSecureNotification = NotificationCompat.Action.Builder(
    0, "Reply",
    PendingIntentCompat.getActivity(context, 0, intent, PendingIntent.FLAG_NO_CREATE, false)
)
    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build()

展開可能な通知

デフォルトでは、通知のテキスト コンテンツは 1 行に収まるように切り詰められます。通知を長くしたい場合は、図 9 に示すように、追加のテンプレートを適用して、展開可能な大きなテキスト領域を有効にできます。

図 9. 長いテキスト用の展開可能な通知。

また、画像、受信トレイ スタイル、チャットの会話、メディア再生コントロールを含む、展開可能な通知を作成することもできます。詳細については、展開可能な通知を作成するをご覧ください。

通知の更新とグループ

追加の更新がある場合に、複数の通知や重複する通知をユーザーに送信しないようにするには、新しい通知を発行するのではなく、既存の通知を更新するか、受信トレイ スタイルの通知を使用して会話の更新を表示します。

ただし、複数の通知を配信する必要がある場合は、個別の通知を 1 つのグループにまとめることを検討してください。この機能は Android 7.0 以降で利用できます。

通知グループを使用すると、複数の通知を 1 つの投稿にまとめて、概要とともに通知ドロワーに表示できます。図 10 に示すように、ユーザーは通知グループとグループ内の各通知を段階的に展開して、詳細を確認できます。

図 10. 閉じた状態と開いた状態の通知グループ。

通知をグループに追加する方法については、通知のグループを作成するをご覧ください。

通知チャネル

Android 8.0(API レベル 26)以降では、すべての通知をチャンネルに割り当てる必要があります。割り当てないと、通知は表示されません。これにより、ユーザーはアプリのすべての通知を無効にするのではなく、特定の通知チャンネルを無効にできます。ユーザーは、図 11 に示すように、Android のシステム設定から各チャンネルの視覚オプションと音声オプションを制御できます。ユーザーは、通知を長押しして、関連付けられたチャネルの動作を変更することもできます。

Android 7.1(API レベル 25)以前を搭載したデバイスでは、ユーザーはアプリ単位でのみ通知を管理できます。Android 7.1 以前では、各アプリに実質的に 1 つのチャネルしかありません。

図 11. 時計アプリとそのチャンネルの 1 つの通知設定。

アプリは、発行する通知の種類ごとに個別のチャネルを持つことができます。アプリは、ユーザーの選択に応じて通知チャンネルを作成することもできます。たとえば、メッセージ アプリでユーザーが作成した会話グループごとに、個別の通知チャンネルを設定できます。

また、Android 8.0 以降では、チャンネルで通知の重要度を指定します。そのため、同じ通知チャンネルに投稿されたすべての通知は同じ動作になります。これについては、次のセクションで説明します。

詳細については、通知チャンネルを作成して管理するをご覧ください。

通知の重要度

Android では、通知の重要度を使用して、通知がユーザーの視覚や聴覚をどの程度妨げるかを判断します。通知の重要度が高いほど、通知の割り込み度が高くなります。

Android 7.1(API レベル 25)以下では、通知の重要度は通知の priority によって決まります。

Android 8.0(API レベル 26)以降では、通知の重要度は、通知が投稿されるチャンネルの importance によって決まります。ユーザーは、図 12 に示すように、システム設定で通知チャンネルの重要度を変更できます。

図 12. Android 8.0 以降では、ユーザーが各チャンネルの重要度を変更できます。

重要度レベルと、それに関連する通知の動作は次のとおりです。

  • 緊急: 音が鳴り、ヘッドアップ通知として表示されます。

  • 高: 音が鳴ります。

  • 中: 音は鳴りません。

  • 低: 音は鳴らず、ステータスバーにも表示されません。

重要度に関係なく、すべての通知は、通知ドロワーやランチャー アイコンのバッジなど、システム UI の邪魔にならない場所に表示されます。ただし、通知バッジの外観を変更することはできます。

詳細については、重要度を設定する方法をご覧ください。

サイレント モード

Android 5.0(API レベル 21)以降では、ユーザーはサイレント モードを有効にできます。このモードでは、すべての通知の音とバイブレーションがオフになります。ユーザーが特に指定しない限り、通知は通常どおりシステム UI に表示されます。

サイレント モードには次の 3 つのレベルがあります。

  • サイレント: すべての音とバイブレーション(アラーム、音楽、動画、ゲームなど)をブロックします。
  • アラームのみ: アラームを除くすべての音とバイブレーションをブロックします。
  • 優先度のみ: ユーザーは、アラーム、リマインダー、予定、通話、メッセージなど、システム全体で割り込みを許可するカテゴリを設定できます。メッセージと通話の場合、ユーザーは図 13 に示すように、送信者または発信者に基づいてフィルタできます。
図 13. ユーザーは、システム全体のカテゴリ(左)と送信者または発信者(右)に基づいて通知を許可できます。

Android 8.0(API レベル 26)以降では、ユーザーはチャンネルごとにサイレント モードをオーバーライドすることで、アプリ固有のカテゴリ(チャンネルとも呼ばれます)の通知を許可することもできます。たとえば、決済アプリには、引き出しと入金に関連する通知用のチャネルがあります。ユーザーは、優先モードで引き出し通知、入金通知、またはその両方を許可できます。

Android 7.1(API レベル 25)以前を搭載したデバイスでは、ユーザーはチャネル単位ではなくアプリ単位で通知を許可できます。

これらのユーザー設定の通知を構成するには、システム全体のカテゴリを設定する必要があります。

フォアグラウンド サービスの通知

アプリがフォアグラウンド サービス(バックグラウンドで実行される Service のうち、メディア プレーヤーなど、長時間実行され、ユーザーが認識できるもの)を実行している場合は、通知が必要です。この通知は、他の通知のように非表示にすることはできません。通知を削除するには、サービスを停止するか、フォアグラウンド状態から削除する必要があります。

詳しくは、フォアグラウンド サービスをご覧ください。メディア プレーヤーを構築する場合は、バックグラウンドでのメディアの再生もご覧ください。

通知の動作

Android 16.0(API レベル 36)

通知がアプリに代わって自動的にグループ化されるようになりました。

次の通知は自動的にグループ化されます。

  • 要約のない通知
  • 子通知のない通知
  • 子通知が 1 つまたは少数しかない通知

Android 15.0(API レベル 35)

クールダウン

Android 15 では、通知のクールダウン機能が導入されています。この機能は、通知が連続して届く際のエクスペリエンスを改善することを目的としています。この機能により、繰り返し通知の表示、音量、バイブレーションの強度が最大 2 分間軽減されます。

注意を引くために音声と触覚が必要な重要な通知は、クールダウンの対象外です。ユーザーは [設定] で通知のクールダウンをオフにできます。

図 14. 通知のクールダウンの設定。