通知の概要

通知とは、Android がアプリの UI の外に表示するメッセージで、リマインダー、他のユーザーからのコミュニケーション、アプリからのその他のタイムリーな情報をユーザーに提供します。ユーザーは、通知をタップしてアプリを開くか、通知から直接操作を行うことができます。

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

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

デバイスでの表示

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

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

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

図 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 回以上通知音を鳴らせなくなりました。アプリが 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 フラグが設定されている場合の CallStyle 通知、またはエンタープライズ向けの Device Policy Controller(DPC)とサポート パッケージには適用されません。これは、スマートフォンがロックされている場合や、ユーザーが [すべてクリア] を選択した場合にも適用されます。