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