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());
}
}
問題は、通知トレイでそれを使用していることです。
こちらをご覧ください link
バックグラウンドとフォアグラウンドの両方の通知とデータペイロードの両方を持つメッセージ。この場合、通知はデバイスのシステムトレイに配信され、データペイロードはランチャーアクティビティのインテントの追加で配信されます。
アプリがバックグラウンドにあるときに{data:"something"}(data-message)
で{notification:"something"}(display-message)
を使用すると、データペイロードはインテントの追加部分に配信されますが、onMessageReceived()
メソッドには配信されません。通知を表示するためのコードを実装します。したがって、アプリがフォアグラウンドにあるときonMessageReceived()
はトリガーであり、希望する通知を表示しますが、onMessageReceived()
ではない場合は代わりにトリガーを取得しませんAndroidシステムは通知ペイロードでそれを処理します。サーバー側コードから{notification:"something"}(display-message/notification tray)
を削除するだけで、常にonMessageReceived()
を確認できます。
フォアグラウンドでもバックグラウンドでも、onMessageReceived()
は常にトリガーされますので、こちらをご覧ください link
FCMメッセージには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
アプリが閉じられたり、バックグラウンドで実行されているときに、コードがトリガーされることはありません。こちらをご覧ください: Firebase Notification
必要なことは、アプリの起動方法を確認し、通知をタップするか、ランチャーアイコンをタップすることです。これを行うには、一部のデータを通知に追加し、アプリの最初の開始アクティビティで取得する必要があります。それらを正常に取得できる場合は、通知をタップすることでアプリが起動したことを意味し、その後、必要な操作を実行できます。