メインコンテンツまでスキップ

Androidのヘッドアップ通知

Status: Accepted

要約

Androidでヘッドアップ通知を表示したい場合は、重要度にIMPORTANCE_HIGHを設定した通知チャンネルにプッシュ通知を送信します。このアプリでは、通知チャンネルの作成方法やタイミングを以下の方針とします。

  • Notifeeを使用して、通知チャンネルを作成する
  • 通知チャンネルは、アプリ起動後の初期化処理で作成する
  • 送信されたプッシュ通知にチャンネルの指定がなかった場合は、重要度がIMPORTANCE_HIGHの通知チャンネルで受信してヘッドアップ通知を表示する

コンテキスト

Androidでは、ヘッドアップ通知を表示するためにチャンネルの重要度をIMPORTANCE_HIGHに設定する必要があります。(Android 7.1以前では、通知の優先度をPRIORITY_HIGHまたはPRIORITY_MAXに設定する必要があります)

Firebase Cloud Messagingを利用した場合は、デフォルトのチャンネルとしてMiscellaneousというチャンネルが作成されます。このチャンネルは重要度がIMPORTANCE_HIGHに設定されていないため、ヘッドアップ通知を表示できません。 そのため、このアプリでヘッドアップ通知を表示するためには、重要度をIMPORTANCE_HIGHに設定したチャンネルを作成する必要があります。

議論

通知チャンネルを作成するライブラリ

このアプリで使用しているReact Native FirebaseのCloud Messagingには、通知チャンネルを作成する機能がありません。通知チャンネルの作成機能を持つサードパーティのライブラリとしては、以下のようなライブラリがあります。

両者とも、通知チャンネルの作成や更新、削除などの機能は用意されており、大きな差異はありません。このアプリでは、React Native Firebaseと同じ開発母体(INVERTASE)であるNotifeeを採用します。

通知チャンネルの作成タイミング

Notifeeのドキュメントでは、Creating & updating channelsに以下の記述があります。

When developing an application, it is safe to always assume a channel does not exist and attempt to create it each time the application boots.

上記内容に準拠して、このアプリではアプリ起動後の初期化処理で通知チャンネルを作成・更新します。

注記

通知チャンネルの作成後は、通知チャンネルの重要度や表示・鳴動動作などをアプリから変更できません。ユーザのみが、OSのシステム設定から変更できます。

通知チャンネルの指定がないプッシュ通知

React Native Firebaseでは、送信されたプッシュ通知にチャンネルの指定がない場合のデフォルト通知チャンネルを指定できます。 firebase.jsonmessaging_android_notification_channel_idにデフォルトの通知チャンネルを指定します。

このアプリでは、デフォルトの通知チャンネルとして重要度がIMPORTANCE_HIGHのチャンネルを指定します。

デモ機能の追加

通知チャンネルの重要度に応じた動作を検証するために、デモ画面にチャンネルを指定してプッシュ通知を送信できる機能を追加します。

決定

  • Notifeeを使用して、通知チャンネルを作成する
  • 通知チャンネルは、アプリ起動後の初期化処理で作成する
  • 送信されたプッシュ通知にチャンネルの指定がなかった場合は、重要度がIMPORTANCE_HIGHの通知チャンネルで受信する
  • デモ機能として、重要度の違う通知チャンネルを指定してプッシュ通知を送信できる機能を追加する