В PendingIntent из FCM Service отсутствуют некоторые дополнительные функции в Activity - PullRequest
0 голосов
/ 02 мая 2020

Я реализовал 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 появляются. Есть какие-нибудь подсказки о том, что здесь происходит?

...