Прямой ответ не отображается при получении уведомления из фона (уведомление Pu sh) - PullRequest
1 голос
/ 05 апреля 2020

Я работаю над приложением, основанным на чате, и пытаюсь реализовать прямой ответ из уведомления, но оно работает только на переднем плане, когда я получаю уведомление pu sh от firebase, оно выглядит как обычное уведомление, настроенное в файл manifest. xml, а не как onMessageReceived функция, как мы знаем.

Функция уведомления

private fun sendNotification(notification: RemoteMessage.Notification) {
    val intent = Intent(this, PaymentActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }

    val pendingIntent = PendingIntent.getActivity(
        this,
        0 /* Request code */,
        intent,
        PendingIntent.FLAG_UPDATE_CURRENT
    )

    val chatIntent = Intent(applicationContext, ChatReceiver::class.java)
    val chatPendingIntent: PendingIntent = PendingIntent.getBroadcast(
        applicationContext,
        CONVERSATION_ID,
        chatIntent,
        PendingIntent.FLAG_UPDATE_CURRENT)

    var replyLabel = "Replay to your elf."
    var remoteInput = RemoteInput.Builder(KEY_TEXT_REPLY).run {
        setLabel(replyLabel)
        build()
    }

    var action: NotificationCompat.Action =
        NotificationCompat.Action.Builder(
            R.drawable.ic_reply_24dp,
            replyLabel,
            chatPendingIntent
        )
            .addRemoteInput(remoteInput)
            .setAllowGeneratedReplies(true)
            .build()
    val wearableExtender = NotificationCompat.WearableExtender().addAction(action)

    val notificationBuilder = NotificationCompat.Builder(this, CHAT_CHANNEL_ID).apply {
        setSmallIcon(R.drawable.ic_logo_blue)
        setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.ic_logo_blue))
        setContentTitle(notification.title)
        setContentText(notification.body)
        setAutoCancel(true)
        priority = NotificationCompat.PRIORITY_HIGH
        addAction(action)
        setContentIntent(pendingIntent)
        setGroup(GROUP_KEY_CHAT)
        extend(wearableExtender)
        if (notification.channelId != null) {
            setChannelId(notification.channelId!!)
        } else {
            setChannelId(CHAT_CHANNEL_ID)
        }
    }

    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build())
}

ChatReceiver

class ChatReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        context?.toast("Got it.")

        ContextCompat.getSystemService(context!!, NotificationManager::class.java)?.cancelAll()
    }
}

AndroidManifest. xml

...
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/ic_internal_notification" />
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/colorAccent" />

        <service android:name=".common.utils.MyFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />    
            </intent-filter>
        </service>
        <receiver
            android:name=".common.receiver.ChatReceiver"
            android:enabled="true"
            android:exported="true">

        </receiver>
    </application>

</manifest>

Forground Background

1 Ответ

0 голосов
/ 06 апреля 2020

Сообщения данных Установите соответствующий ключ с вашими пользовательскими парами ключ-значение для отправки полезной нагрузки данных клиентскому приложению. Например, в этом приложении обмена сообщениями в формате того же приложения, что и выше, представлено сообщение с форматированием JSON, в котором информация ожидается, что инкапсулированный в общий ключ данных и клиентское приложение интерпретируют содержимое:

{"message": {"token": "bk3RNwTe3H0: CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1 ...", "data": {"Nick" : "Mario", "body": "great match!", "Room": "PortugalVSDenmark"}}}

для получения дополнительной информации посетите https://firebase.google.com/docs/cloud-messaging/concept-options#notification -messages-with-option-data- полезная нагрузка

...