通知の概要

通知とは、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)とサポート パッケージには適用されません。これは、スマートフォンがロックされている場合や、ユーザーが [すべてクリア] を選択した場合にも当てはまりません。