web-dev-qa-db-ja.com

アプリが閉じられたときのFirebase通知

Firebase通知をAndroidアプリケーションに実装しました。アプリケーションの実行中は通知がカスタムレイアウトで表示されますが、アプリケーションの実行中は通知はデフォルトのレイアウトで表示されます。アプリケーションが実行されていないときに通知レイアウトを自分のレイアウトに変更することもできます。また、ユーザーが通知を切り替えられるように共有設定を保存しますが、アプリケーションが実行されていないときに通知が表示されます。

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if(SettingsFragment.getReceiceNotification()){ //if user wants to receive notification

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    RemoteViews remoteViews = new RemoteViews(getPackageName(),R.layout.Push_notification_layout);

    remoteViews.setImageViewResource(R.id.Push_notif_icon,R.mipmap.ic_bird_black);

    Intent intent = new Intent(this,MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT);


    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
    notificationBuilder.setContent(remoteViews);
    notificationBuilder.setContentTitle("Radyo Türkkuşu");
    notificationBuilder.setContentText(remoteMessage.getNotification().getBody());

    notificationBuilder.setAutoCancel(true);
    notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
    notificationBuilder.setContentIntent(pendingIntent);
    remoteViews.setTextViewText(R.id.Push_title, "Radyo Türkkuşu");
    remoteViews.setTextViewText(R.id.Push_context, remoteMessage.getNotification().getBody());
    //notificationBuilder.setLights (ContextCompat.getColor(MainActivity.context, R.color.pushColor), 5000, 5000);
    notificationManager.notify(0,notificationBuilder.build());
    }

}
22
orkun

問題は、通知トレイでそれを使用していることです。

こちらをご覧ください link

バックグラウンドとフォアグラウンドの両方の通知とデータペイロードの両方を持つメッセージ。この場合、通知はデバイスのシステムトレイに配信され、データペイロードはランチャーアクティビティのインテントの追加で配信されます。

アプリがバックグラウンドにあるときに{data:"something"}(data-message){notification:"something"}(display-message)を使用すると、データペイロードはインテントの追加部分に配信されますが、onMessageReceived()メソッドには配信されません。通知を表示するためのコードを実装します。したがって、アプリがフォアグラウンドにあるときonMessageReceived()はトリガーであり、希望する通知を表示しますが、onMessageReceived()ではない場合は代わりにトリガーを取得しませんAndroidシステムは通知ペイロードでそれを処理します。サーバー側コードから{notification:"something"}(display-message/notification tray)を削除するだけで、常にonMessageReceived()を確認できます。

フォアグラウンドでもバックグラウンドでも、onMessageReceived()は常にトリガーされますので、こちらをご覧ください link

27
teck wei

FCMメッセージには2つのタイプがあります

  1. 通知メッセージ
  2. データメッセージ

Firebaseコンソールから送信されるメッセージは、通知メッセージです。 onMessageReceived()でメッセージを取得するには、Data Messageを使用します。サーバー側で以下のコードを使用して、データ通知メッセージを送信します

{
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   "data" : {
     "Nick" : "Mario",
     "body" : "great match!",
     "Room" : "PortugalVSDenmark"
   },
 }

リファレンス https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages

11
Shshank Bhong

アプリが閉じられたり、バックグラウンドで実行されているときに、コードがトリガーされることはありません。こちらをご覧ください: Firebase Notification

必要なことは、アプリの起動方法を確認し、通知をタップするか、ランチャーアイコンをタップすることです。これを行うには、一部のデータを通知に追加し、アプリの最初の開始アクティビティで取得する必要があります。それらを正常に取得できる場合は、通知をタップすることでアプリが起動したことを意味し、その後、必要な操作を実行できます。

0
Freddie