通知の概要

通知は、Android からユーザーに対して、注意事項、他のユーザーからの通信、アプリからのタイムリーなその他の情報を伝えるためにアプリの UI 外に表示されるメッセージです。ユーザーがその通知をタップすると、アプリが表示されたり、通知から直接アクションを実行したりできます。

このページでは、通知が表示される場所や使用可能な機能の概要を説明します。通知のビルドを開始するには、通知を作成するをお読みください。

デザインや対話パターンについて詳しくは、通知設計ガイドをご覧ください。さらに、モバイルアプリとウェアラブル アプリの両方で Notification.Style API を使用する際のベスト プラクティスを示すデモについては、Android 通知のサンプルをご覧ください。

端末での表示

通知は、ユーザーに対してさまざまな場所にさまざまな形式で表示されます。ステータスバーのアイコン、さらに詳しい情報を示す通知ドロワー内の表示、アプリのアイコンのバッジとして、またペア設定されたウェアラブルなどに自動的に表示されます。

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

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

図 1. ステータスバーの左側に通知アイコンが表示されているところ

ユーザーは、ステータスバーを下にスワイプすることにより通知ドロワーを開くことができます。そこで詳細な情報を確認し、通知によるアクションを実行することができます。

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

ユーザーがドロワー内の通知を下へドラッグすると、表示が展開されて追加コンテンツが表示され、さらに該当する場合はアクション ボタンが表示されます。

通知は、アプリまたはユーザーによって閉じられるまで、通知ドロワーに表示されたままになっています。

ヘッドアップ通知

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 端末をユーザーが使用している場合、通知はすべて自動的に Wear OS 端末にも表示され、展開可能な詳細やアクション ボタンも表示されます。

また、使い勝手向上のためにウェアラブル上で通知の外観をカスタマイズしたり、さまざまなアクションを提供したりすることができます。応答の提案を示したり音声入力により応答したりできます。詳しくは、通知にウェアラブル固有の機能を追加する方法についての説明をご覧ください。

図 6. ペア設定された Wear OS 端末上に自動表示された通知

通知の仕組み

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

図 7. 基本的な詳細情報が表示された通知

図 7 には、通知のうち最もよく使用される部分が示されています。それらは次のとおりです:

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

これらの機能やその他の機能を使用した通知を作成する方法については、通知を作成するをお読みください。

通知アクション

必須ではありませんが、どの通知も、タップした際には適切なアプリ アクティビティが表示されるようにしてください。このデフォルトの通知アクションに加えて、通知から(多くの場合、アクティビティを開かずに)アプリ関連のタスクを実行するためのアクション ボタンを追加することができます。図 9 をご覧ください。

図 9. アクション ボタンが表示された通知

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

Android 10(API レベル 29)以降の場合は、提案されたインテント ベースのアクションを実行するためのアクション ボタンを、プラットフォームによって自動生成することができます。

アクション ボタンの追加について詳しくは、通知を作成するをご覧ください。

展開可能な通知

デフォルトの場合、通知のテキスト コンテンツは 1 行に収まるように切り捨てられます。もっと長い通知にするには、付加的なテンプレートを適用することにより、図 8 に示されているような、展開可能な長いテキスト領域を有効にすることができます。

図 8. 長いテキストのための展開可能な通知

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

さらに、これらのテンプレートを使用してどの端末でも互換性のある適切なデザインにすることがどんな場合でも推奨されているとはいえ、必要ならカスタム通知レイアウトを作成することも可能です。

通知の更新とグループ

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

しかし、複数の通知の配信が必要な場合には、複数の通知を 1 つのグループにまとめることを検討してください(Android 7.0 以上で使用可能)。通知グループを利用すれば、複数の通知を通知ドロワー内の 1 つの項目に折りたたんだ上で、要約情報を表示することができます。ユーザーは通知を展開することにより、個々の通知の詳細を確認できます。

ユーザーは通知グループおよびその中の各通知を順次展開していくことにより、詳細を確認できます。

図 10.通知グループの折りたたみ表示と展開表示

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

通知チャンネル

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

Android 7.1(API レベル 25)以下の端末の場合、ユーザーは、アプリ単位でのみ通知を管理できます(Android 7.1 以下ではアプリごとに実質 1 チャンネルしかありません)。

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

1 つのアプリで複数の通知チャンネルを使用できます(アプリの発行する通知のタイプごとに別個のチャンネルを用意できます)。またアプリでは、アプリのユーザーによる選択に対する応答として、通知チャンネルを作成することもできます。たとえば、メッセージング アプリでユーザーが作成した会話グループごとに別々の通知チャンネルをセットアップできます。

また、Android 8.0 以上の場合、チャンネルは通知の重要度レベルを指定する場所でもあります。同じ通知チャンネルに送られたすべての通知は、どれも同じ動作になります。

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

通知の重要度

Android では、通知の重要度を使用することによって、通知がどの程度ユーザーの作業を中断するかを決定します(視覚的および音声的な中断)。通知の重要度が高ければ高いほど、通知による中断は強力になります。

Android 8.0(API レベル 26)以上の場合、通知の重要度は、通知の送信先のチャンネルの importance によって決まります。ユーザーは、システム設定で通知チャンネルの重要度を変更できます(図 12)。Android 7.1(API レベル 25)以下の場合、各通知の重要度は通知の priority で決まります。

図 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 を実行する場合、通知は必須です。この通知は、他の通知のように閉じることができません。通知を削除するには、サービスが停止するか「フォアグラウンド」状態ではなくなる必要があります。

詳しくは、サービスをフォアグラウンドで実行するをお読みください。メディア プレイヤーを作成している場合は、フォアグラウンド サービスでの MediaStyle 通知の使用もお読みください。

発行の制限

Android 8.1(API レベル 27)以降、アプリで発することのできる通知音は 1 秒間に 1 回に限られます。1 秒間に複数の通知をアプリから出した場合、予期されるとおりに表示されますが、通知音は 1 秒間のうちの最初の通知のみになります。

しかし、通知更新時には、Android による頻度制限が適用されます。単一の通知の更新頻度が高すぎる場合(1 秒未満に多数)、一部の更新がシステムにより破棄されることがあります。

通知の互換性

Android 1.0 以来、通知システム UI および通知関連の API は発展を続けてきました。古い端末をサポートしつつ通知 API の最新機能を使用するには、サポート ライブラリ通知 API である NotificationCompat とそのサブクラス、および NotificationManagerCompat を使用してください。これらの API では API のレベルチェックが自動的に処理されるため、そのための条件分岐コードを自分で作成しなくて済みます。

プラットフォームが発展するにつれて、NotificationCompat は、最新のメソッドを含めるように更新されてきました。重要な点として、NotificationCompat に含まれるメソッドを利用できるとしても、それは、古い端末でそれに対応する機能が提供されることを保証するものではないことに注意してください。新たに導入された API を呼び出すと、古い端末では何も実行されないという結果になる場合があります。たとえば、NotificationCompat.addAction() でアクション ボタンが表示されるのは、Android 4.1(API レベル 16)以上の端末のみです。

Android 通知の動作について、最も顕著な変更の要約を以下に示します。

Android 4.1、API レベル 16

  • 展開可能通知テンプレート(通知スタイル)を導入、情報表示のための広い通知コンテンツ領域を利用可能。ユーザーは指一本での上下スワイプ動作を使用することにより通知を展開可能。
  • さらに通知に追加アクションをボタンの形で追加する機能を導入。
  • ユーザーが設定でアプリごとに通知をオフにする機能を追加。

Android 4.4、API レベル 19 および 20

  • API に通知リスナー サービスを追加。
  • API レベル 20 で Android Wear(現 Wear OS)サポートを追加。

Android 5.0、API レベル 21

  • ロック画面およびヘッドアップ通知を導入。
  • ユーザーは、スマートフォンをサイレント モードに設定したり、端末が優先度オンリーモードの場合にどの通知に対して中断を許可するかを設定したりすることが可能。
  • 通知をロック画面に表示するかどうかを設定するメソッド(setVisibility())、および通知テキストの「一般公開」版を指定するためのメソッドを API に追加。
  • この通知にどの程度の中断を許可するかをシステムに対して指定するための setPriority() メソッドを追加(高に設定すると通知がヘッドアップ通知として表示されるなど)。
  • Android Wear(現 Wear OS)端末に通知スタックのサポートを追加。通知をスタックに入れるには、setGroup() を使用。タブレットとスマートフォンでは、いずれも通知スタックはまだサポートされていないことに注意。通知スタックは、グループまたはバンドルと呼ばれることになる。

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() を使用。