Я реализовал FirebaseMessagingService для получения уведомлений FCM, когда мое Приложение находится на переднем плане. Я получаю уведомления с полями data и уведомлений . Я также реализовал BroadcastReceiver для управления уведомлениями только с полезной нагрузкой data .
Когда приходит мое уведомление, обе службы обнаруживают его. Однако только мой класс FCMService что-то делает с этим. Он добавляет данные из полезной нагрузки к цели в ClickAction из уведомления и толкает уведомление вперед.
Вот мой FCMService:
public class FCMService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage message) {
super.onMessageReceived(message);
createNotificationChannel();
Log.i("FCM NOTIFICATION", "Arrived");
if(message.getNotification() == null){
return;
}
Intent intent = new Intent(message.getNotification().getClickAction());
Map<String, String> data = message.getData();
Bundle extras = new Bundle();
for (Map.Entry<String, String> pair : data.entrySet()){
extras.putString(pair.getKey(), pair.getValue());
Log.i(pair.getKey(), pair.getValue());
}
intent.putExtras(extras);
//intent.putExtra("bundle", extras);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "CHANNEL_ID")
.setContentTitle(message.getNotification().getTitle())
.setContentText(message.getNotification().getBody())
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setStyle(new NotificationCompat.BigTextStyle())
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setSmallIcon(R.drawable.fcm_icon)
.setAutoCancel(true)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
private void createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "Channel Name";
String description = "Channel Description";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel("CHANNEL_ID", name, importance);
channel.setDescription(description);
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
}
Вы можете увидеть что я регистрирую все пары ключ / значение в полезной нагрузке моего сообщения. Все мои значения Строки . Но когда я получаю Intent в MainActivity , отображаются только НЕКОТОРЫЕ из этих полей. Чтобы быть точным, только первые 3 ключ / значение отображаются в дополнительных функциях.
Я перечислил все ключи / значения в своем намерении в MainActivity как это:
Bundle b = getIntent().getExtras();
Set<String> keys = b.keySet();
Iterator it = keys.iterator();
while (it.hasNext()){
String k = (String)it.next();
Object o = b.get(k);
Log.i(k, o.toString());
}
Тем не менее, только первые 3 появляются. Есть какие-нибудь подсказки о том, что здесь происходит?