通知の概要

通知は、アプリの UI の外で Android が表示するメッセージであり、リマインダー、他の人からのメッセージ、アプリからのタイムリーな情報などをユーザーに提供します。ユーザーは通知をタップしてアプリを開いたり、通知から直接操作したりできます。

このページでは、通知が表示される場所と利用できる機能について概説します。通知の作成を開始するには、通知を作成するをご覧ください。

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

デバイスでの表示

通知は、さまざまな場所にさまざまな形式で自動的に表示されます。通知は、ステータスバーのアイコン、通知ドロワー内の詳細なエントリ、アプリアイコンのバッジとして表示されます。ペア設定されたウェアラブルにも通知が表示されます。

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

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

図 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)以降では、アプリが操作を呼び出すには、そのワークフローに関係なくデバイスのロック解除が必要となるように、通知の操作を設定できます。このオプションを使用すると、ロックされたデバイスの通知にセキュリティのレイヤを追加できます。

デバイスをロック解除するまでアプリが通知の操作を呼び出せないようにするには、次のコード スニペットに示すように、通知の操作を作成するときに truesetAuthenticationRequired() に渡します。

Kotlin

val moreSecureNotification = Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build()

Java

Notification moreSecureNotification = new Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build();

展開可能な通知

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

図 9. 展開可能な通知では、表示するテキストを増やすことができる。

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

通知の更新とグループ

追加情報がある場合に多数の通知や重複する通知がユーザーに送られないようにするために、新しい通知を発行する代わりに、既存の通知を更新することを検討してください。あるいは、受信トレイのスタイルの通知を使用して、スレッドの最新情報を表示することを検討してください。

ただし、複数の通知を提供する必要がある場合は、個別の通知をグループ化することを検討してください(グループ化機能は 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 8.1(API レベル 27)以降では、アプリは 1 秒間に通知音を複数回鳴らすことはできません。アプリが 1 秒以内に複数の通知を送信した場合、通知はすべて想定どおりに表示されますが、音が鳴るのは各秒ごとに最初の通知だけです。

ただし、Android は通知の更新時にレート制限も適用します。1 つの通知の更新をあまりにも頻繁に(1 秒未満で何度も)送信すると、システムによって更新が破棄されることがあります。

通知の互換性

Android の通知システムの UI と通知関連の API は進化を続けてきました。古いデバイスをサポートしつつ、通知 API の最新機能を使用するには、サポート ライブラリの通知 API(NotificationCompat とそのサブクラス、および NotificationManagerCompat)を使用します。これにより、条件付きコードを作成して API レベルを確認する必要がなくなります(通知 API がこの処理を行うため)。

NotificationCompat は、プラットフォームの進化に合わせて更新されており、最新のメソッドも追加されています。ただし、NotificationCompat のメソッドを利用できるからといって、対応する機能が古いデバイスに提供されるとは限りません。場合によっては、新たに導入された API を呼び出しても、古いデバイスでは処理が行われないこともあります。

以下に、Android 通知の API レベル別の主な動作の変更点の概要を示します。

Android 5.0(API レベル 21)

  • ロック画面とヘッドアップ通知が導入されました。

  • スマートフォンをサイレント モードに設定できるようになりました。また、デバイスが「優先する通知のみ」モードになっている場合に表示する通知を設定できるようになりました。

  • 通知をロック画面に表示するかどうかを設定するメソッド(setVisibility() など)と、通知テキストの「公開」版を指定できるメソッドが追加されました。

  • 通知の重要度をシステムに伝える setPriority() メソッドが追加されました。たとえば、優先度を高に設定すると、通知がヘッドアップ通知として表示されます。

  • Android Wear(現在は Wear OS と呼ばれています)デバイスに通知スタックのサポートを追加しました。通知をスタックに登録するには、setGroup() を使用します。通知スタック(後にグループまたはバンドルと呼ばれる)は、Android 7.0(API レベル 24)まではタブレットやスマートフォンではサポートされていません。

Android 7.0(API レベル 24)

  • 通知テンプレートのスタイルが変更され、ヒーロー画像とアバターが重視されるようになりました。

  • 3 つの通知テンプレートが追加されました(1 つはメッセージング アプリ用のテンプレート。他の 2 つは、展開可能なアフォーダンスとその他のシステム デコレーションでカスタム コンテンツ ビューをデコレートするためのテンプレート)。

  • スマートフォンやタブレットなどのハンドヘルド デバイスで通知グループをサポートするようになりました。Android 5.0(API レベル 21)で導入された Android Wear(現在は Wear OS と呼ばれています)通知スタックと同じ API を使用します。

  • ユーザーがインライン返信を使用して通知内で返信できるようにします。ユーザーはテキストを入力できます。入力されたテキストは通知の親アプリに転送されます。

Android 8.0(API レベル 26)

  • 個々の通知を特定のチャンネルに割り当てます。

  • ユーザーがアプリからのすべての通知をオフにする代わりに、チャンネルごとに通知をオフにできるようにします。

  • アクティブな通知があるアプリでは、ホーム画面またはランチャー画面上のアプリアイコンの上に通知バッジが表示されます。

  • ユーザーがドロワーから通知をスヌーズできるようになりました。デベロッパーは通知の自動タイムアウトを設定できます。

  • 通知の背景色を設定できます。

  • 通知の動作に関する一部の API を Notification から NotificationChannel に移動しました。たとえば、Android 8.0 以降の場合は NotificationCompat.Builder.setPriority() ではなく NotificationChannel.setImportance() を使用します。

Android 13.0(API レベル 33)

  • ランタイム権限を追加します。アプリから除外対象外の通知を送信するには、ユーザーがアプリにこの権限を付与する必要があります。

Android 14.0(API レベル 34)

  • 全画面インテントの通知を、通話やアラームを提供するアプリに制限します。NotificationManager.canUseFullScreenIntent API を使用して、アプリに権限があるかどうかを確認します。権限がない場合、アプリは ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT を使用して、ユーザーが権限を付与できる設定ページを起動できます。

  • Notification.FLAG_ONGOING_EVENT フラグが設定されている場合でも、ユーザーが通知アクションを閉じられるようにすることで、閉じることができない通知のユーザー エクスペリエンスを変更します。これは、Notification.FLAG_ONGOING_EVENT フラグが設定されている場合や、デバイス ポリシー コントローラ(DPC)とエンタープライズ向けのサポート パッケージが設定されている場合の CallStyle 通知には適用されません。また、スマートフォンがロックされている場合や、ユーザーが [すべて消去] を選択した場合も適用されません。