Android уведомление с сериализуемой полезной нагрузкой - PullRequest
1 голос
/ 02 августа 2020

У меня есть приложение Android с одним действием и я использую FCM для обмена сообщениями. В onMessageReceived я готовлю PendingIntent для запуска действия:

val intent = Intent(this, MainActivity::class.java)
intent.putExtra(KEY, mySerializableObject)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT)

, где mySerializableObject - это экземпляр MySerializableClass, который реализует интерфейс Serializable. Члены класса берутся из полезных данных сообщения FCM:

val a = remoteMessage.data[KEY_A]
val b = remoteMessage.data[KEY_B]
val mySerializableObject = MySerializableClass(a, b)

В onResume действия, которое я хочу восстановить mySerializableObject:

val serializable = intent.getSerializableExtra(KEY)

Если действие находится на переднем плане, тогда serializable равно not null и может быть преобразовано в MySerializableClass.

Однако, если действие находится в фоновом режиме, то serializable равно null. Оказывается, что intent.extras включает элементы данных сообщения FCM:

val a1 = extras.getString(KEY_A)
val b1 = extras.getString(KEY_B)

Насколько я понимаю, указанное выше PendingIntent не связано с данными FCM. Каким же образом уведомление может включать поля данных?

...