web-dev-qa-db-ja.com

アプリがFirebaseでバックグラウンドにあるときにプッシュ通知をポップアップとして表示する

反応ネイティブアプリでプッシュ通知を設定していますAndroid Firebase Cloud Messagingを使用しているユーザー。これまでのところほぼこれを行っています チュートリアル 。プッシュ通知をロック画面に表示するようにし、アプリがフォアグラウンドにあるときにそれらを処理することに成功しました。ただし、アプリがバックグラウンドにある場合、ポップアップとして通知を表示することはできません。通知トレイに表示されますが、Gmailやwhatsappの通知のようにポップアップは表示されません。

私の問題は、メッセージと共に正しいパラメーターを送信していないことです。私はFirebaseコンソールを使用しているため、あまり柔軟ではありません。受信時にポップアップとして表示されるように通知を(プログラムで)構成するにはどうすればよいですか?

編集:

通知チャネルの設定は新しいAndroidデバイスで機能します-Android 8.1(APIレベル27)でテスト済み)。

古いデバイスでは、Android 6.0(APIレベル23)でテスト)-ヘッドアップ通知がまだ表示されません。awssns consoleを使用して次のメッセージを送信しています:

{ 
  priority: 'high',
  content_available: true,
  notification: { 
     title: 'hello',
     body: 'Just test',
     Android_channel_id: 'test-channel',
     sound: 'default' 
  },
  data: { title: 'title', body: 'body', sound: 'default' }
}

AndroidチャネルIDの有無にかかわらず、Firebaseコンソール設定の優先度高とサウンド有効を使用してメッセージを送信しました。何も機能しませんでした。通知はトレイバーに静かに届きます。これ ディスカッション は同じ問題を示していますが、 解決策 指摘された1人がうまくいきませんでした。反応ネイティブライブラリコードの編集はあまり行いませんでした。セクション古いAndroidバージョン(フォアグラウンド)の問題、ヘッドアップがフォアグラウンドに表示されますが、バックグラウンドには表示されません。これはここで意図された動作です。

さらに、これはこの反応ネイティブパッケージ( githubの問題githubの問題 )を使用している多くの人々にとって未解決の問題であるようです。

だから、私は私の質問を作り直すべきだと思います。 Android 7.1以下(6.0でテスト中):

  1. ヘッドアップ通知を表示するには、priority = 'high'およびnotification.sound = 'default'の設定で十分でしょうか? (私の研究からそれははずです)

  2. 通知なしでトレイバーに到着した通知からヘッドアップとして機能するようにするには、アプリケーションコードをさらに構成する必要がありますか?

2
Vinicius

この質問に貢献してくれてありがとう@ismailalaoui。システムトレイで受信したときに、ヘッドアップでショーを通知することができなかったため、回避策を講じる必要がありました。私は、react-native-firebaseでそれをどのように実行したかを示します。

新しいAndroidデバイス、 通知チャネルを作成する必要があります 。App.jsに以下を追加します。

componentDidMount(){
  ...
  const channel = new firebase.notifications.Android.Channel('test-channel', 'Test Channel', firebase.notifications.Android.Importance.Max).setDescription('My apps test channel'); //add this line

  firebase.notifications().Android.createChannel(channel); //add this line
}

古いデバイスでは、回避策を講じる必要がありました。通知メッセージを使用する代わりに、データメッセージを使用したので、バックグラウンドで聞くことができます。 項目4を参照

まず、新しいファイルbgMessaging.jsを作成します。

import firebase from 'react-native-firebase';

export default async (message) => {
  // handle your message
  const notification = new firebase.notifications.Notification()
  .setNotificationId(message.messageId)
  .setTitle(message.data.title)
  .setBody(message.data.body)
  .Android.setChannelId('test-channel')
  .Android.setSmallIcon('ic_launcher')
  .Android.setPriority(firebase.notifications.Android.Priority.Max)
  .setSound('default');

  await firebase.notifications().displayNotification(notification);
  console.log({message})
  return Promise.resolve();
}

Index.jsファイルに、以下を追加します。

import bgMessaging from './src/bgMessaging'; // <-- Import the file you just created

...

AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => bgMessaging); 

react-native-firebaseは、ヘッドレスJSを使用して、bgMessagingで定義したJavaScriptコードを実行しています。 docs によると、サービスをAndroidManifest.xmlに追加する必要があります。 Android/app/src/main/AndroidManifest.xmlに以下を追加します:

<application>
  ...
  <service Android:name="io.invertase.firebase.messaging.RNFirebaseBackgroundMessagingService" /> <!--Add this-->
  ...
</application>
4
Vinicius

whatsAppのようにポップアップで通知を表示するには、IMPORTANCE_HIGHで通知チャネルの重要度を設定する必要があります

公式ドキュメントから ここ

音を出し、ヘッドアップ通知として表示されます

int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance)

編集:

Lollipop->Nougatを実行しているデバイスの場合、設定する必要がありますバイブレーションまたは着信音でヘッドアップを機能させます。ただし、ヘッドアップ通知を生成するためにVIBRATE権限を必要としない簡単なハックを次に示します。 リンク

notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
if (Build.VERSION.SDK_INT >= 21) notificationBuilder.setVibrate(new long[0]);
1
ismail alaoui