Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

通知の概要

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

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

デザインと操作パターンについて詳しくは、通知のデザインガイドをご覧ください。また、Android の通知サンプルで、モバイルアプリとウェアラブル アプリで Notification.Style API を使用する場合のおすすめの方法のデモをご覧いただけます。

デバイスでの表示

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

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

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

図 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 デバイスがある場合、展開可能な詳細情報や操作ボタンを含め、すべての通知がそのデバイスに自動的に表示されます。

また、ウェアラブルでの通知の表示をカスタマイズすることによってエクスペリエンスを強化できるほか、定型返信文や音声入力による返信などの各種操作を行うこともできます。詳しくは、ウェアラブル固有の機能を通知に追加する方法をご覧ください。

図 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)以降では、メッセージに返信したり、通知から直接テキストを入力したりする操作を追加することもできます。

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

展開可能な通知

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

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

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

Google では、これらのテンプレートを常に使用して、すべてのデバイスで適切なデザインの互換性を確保するよう推奨していますが、必要に応じてカスタムの通知レイアウトを作成してもかまいません。

通知の更新とグループ

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

ただし、複数の通知を提供する必要がある場合は、個別の通知をグループ化することを検討してください(グループ化機能は Android 7.0 以降で利用できます)。通知をグループ化することで、複数の通知を通知ドロワー内で 1 つにまとめて折りたたむことができます。ユーザーが通知を展開すると、個々の通知の詳細が表示されます。

ユーザーは、通知グループを徐々に展開して、グループ内の各通知の詳細を確認できます。

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

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

通知チャンネル

Android 8.0(API レベル 26)以降では、すべての通知をチャンネルに割り当てる必要があります。そうしないと通知が表示されません。通知をチャンネルに分類することで、ユーザーが(アプリの通知をすべて無効にする代わりに)アプリの特定の通知チャンネルを無効にすることが可能になります。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 秒以内に複数の通知を送信した場合、通知はすべて想定どおりに表示されますが、音が鳴るのは最初の通知だけです。

ただし、Android は通知の更新時にレート制限も適用します。1 つの通知の更新をあまりにも頻繁に(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)

  • 展開可能な通知テンプレート(通知スタイルと呼ばれます)を導入し、情報を表示する通知コンテンツ領域を拡大できるようにしました。ユーザーは、1 本の指で上下にスワイプすることによって通知を展開できます。
  • 通知に操作を追加する機能(ボタン形式)も導入されました。
  • ユーザーが設定で通知をアプリ単位でオフにする機能が追加されました。

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 以降では、NotificationChannel.setImportance() を使用します(NotificationCompat.Builder.setPriority() は使用しないでください)。