ライブ更新通知を作成する

このシステムは、ライブ情報の通知を促進します。促進された通知は、通知ドロワーの上部やロック画面など、システム サーフェスに目立つように表示されます。また、ステータスバーにチップとして表示されます。

図 1. ライブ情報通知の例。

促進された通知カードの外観には次の特徴があります。

  • デフォルトで展開
  • 折りたたみ不可

ライブ情報として認定されるには、通知が次の要件を満たしている必要があります。

  • 標準スタイル、BigTextStyleCallStyle、または ProgressStyle にする必要があります。
  • Android マニフェストで次の非実行時の権限 android.permission.POST_PROMOTED_NOTIFICATIONS をリクエストする必要があります。
  • EXTRA_REQUEST_PROMOTED_ONGOING または NotificationCompat.Builder#requestPromotedOngoing を使用して促進をリクエストする必要があります。
  • ongoingFLAG_ONGOING_EVENT を設定)にする必要があります。
  • contentTitle を設定する必要があります。
  • customContentView を設定してはなりません(RemoteViews なし)。
  • setGroupSummary を使用したグループの概要であってはなりません。
  • TRUEsetColorized してはなりません。
  • 通知チャンネルに IMPORTANCE_MIN が含まれていてはなりません。

促進の特性

次の API は、システムが通知を促進するかどうかを判断するのに役立ちます。

  • Notification.FLAG_PROMOTED_ONGOING は、通知が促進されているかどうかを示します。
  • Notification.hasPromotableCharacteristics() は、システムが通知を促進できるかどうかを検証します。この方法では、ユーザーが設定でアプリのライブ情報を無効にしているかどうかは考慮されません。
  • NotificationManager.canPostPromotedNotifications() は、ユーザーが設定で促進された通知を有効または無効にしているかどうかなど、アプリが促進された通知を送信できるかどうかを確認します。
  • Settings.ACTION_MANAGE_APP_PROMOTED_NOTIFICATIONS は、アプリがユーザーを [設定] に移動してこの機能を有効にできるようにするインテント アクションです。

使用条件

ライブ情報は、進行中のアクティビティ、ユーザーが開始したアクティビティ、時間制約のあるアクティビティに使用します。

実行中

ライブ情報には明確な開始と終了があり、現在進行中のアクティビティを表す必要があります。過去に発生したアクティビティには、ライブ情報を使用しないでください。代わりに、標準の通知を使用してください。これはまだ開始されていないイベントにも当てはまりますが、開始間近のイベントではライブ情報を使用できます。

ライブ情報は進行中のアクティビティを表すものです。アプリの機能にすばやくアクセスさせる目的で、ライブ情報を使用しないでください。その場合は、アプリ ウィジェットまたはカスタム クイック設定タイルを使用します。

  • 適切な使用例: ナビゲーションの実行中、通話中、配車サービスやフード デリバリーの追跡中。
  • 不適切な使用: 広告、プロモーション、チャット メッセージ、アラート、今後のカレンダー イベント、アプリ機能へのクイック アクセス。

ユーザー起動型

ほとんどのライブ情報は、エクササイズの開始、運転ナビの開始、配車サービスの呼び出しなど、ユーザーが明示的にトリガーしたアクティビティを表す必要があります。ユーザーの環境や興味、今後の予定などの周囲情報は、ライブ情報に表示しないでください。他のユーザーによってトリガーされたアクティビティでライブ情報を生成しないようにします。

ユーザーは、将来のある時点でアクティビティを開始するアクションを実行する場合があります。たとえば、ユーザーがフライトやコンサートのチケットを購入したり、トーナメントに登録したり、期限付きのイベントへの参加を表明したりした場合です。このような状況では、予定されたイベントの開始時にライブ情報を自動的に表示することが適切な場合もあります。ただし、アプリは、アクティビティが差し迫っている場合にのみトリガーが表示されるように調整する必要があります。ユーザーがスポーツの試合などのバックグラウンド イベントのモニタリングを開始することを明示的に指定した場合、そのイベントのライブ情報の投稿を開始できます。ただし、関連付けられた通知に [ピン留めを解除] アクションも含める必要があります。

時間的制約がある場合

ライブ情報は、アクティビティ全体を通してユーザーの注意が必要な場合にのみ表示します。ライブ情報の主なユースケースはモニタリングです。ユーザーはライブ情報を一目で確認することで、アクティビティの進行状況を把握できます。

ライブ情報は、ライブ情報と通常の通知の間で切り替わるようなアクティビティに適しています。たとえば、搭乗券の通知はフライトの数時間前に表示するのが適切ですが、空港や会場に到着したときや搭乗が開始されたときなど、ユーザーが必要に迫られたときにのみ、ライブ情報に切り替える必要があります。一方、荷物の追跡はユーザーが常にモニタリングする必要がないため、ライブ情報に適していません。

ステータス チップ

ステータス チップを使用すると、通知が表示されていない場合でも、ライブ情報を確認できます。setShortCriticalText または setWhen を使用して、進行状況を中心とした通知に関する重要な状態情報を伝えます。

アイコン付きのステータス チップ
図 2. 不確定状態では、小さなアイコン Notification.Builder#setSmallIcon が表示されます。
時刻付きのステータス チップ
図 3. Notification.Builder#setShortCriticalText を使用して絶対時刻を表示します。
情報付きのステータス チップ
図 4. Notification.Builder#setShortCriticalText を使用して重要な情報を伝えます。

時間に基づくリマインダー

通知が非表示になるか更新されない限り、時間は通知の有効期間のカウントダウンをトリガーします。以下に、さまざまな状況で時間がどのように機能するかを説明します。

  • 時間が 2 分以上先の場合: 現在の時刻が午前 10 時 5 分で、時間が午前 10 時 10 分に設定されている場合、チップには「5 分」と表示されます。
  • 時間が 1 分以上過ぎている場合: 通知は表示されません。
  • 時間がクロノメーターの場合: クロノメーター タイマーが正の値である限り、チップに表示されます。
  • 通知に時刻を表示したくない場合: setShowWhen を使用して FALSE にします。

ステータス チップの外観

ステータス チップには必ずアイコンが含まれ、必要に応じてテキストを含めることもできます。チップの最大幅は 96 dp です。テキストは、テキスト全体がチップに収まる場合にのみ表示されます。テキストは次の条件に基づいて表示されます。

  • 7 文字未満の場合は、テキスト全体を表示します。
  • テキストの半分未満しか表示されない場合は、アイコンのみを表示します。
  • テキストの半分以上が表示される場合は、可能な限り多くのテキストを表示します。

確認して閉じる

ユーザーは通知シェードで通知の表示を制御できます。不要なライブ情報を投稿すると、ユーザーがアプリの投稿権限を取り消す可能性があります。

ユーザーがライブ情報を完全に無効にできないようにするには、ユーザーが閉じる可能性のある更新情報を投稿しないようにします。ユーザーが閉じたライブ情報を再投稿しないでください。閉じた情報を検出するには setDeleteIntent を使用します。

これらの API を試すには、サンプルアプリをご覧ください。