Вопрос или проблема
Мы использовали Firebase для отправки сообщений приложениям уже некоторое время, но нам пришлось обновиться до платформы v1, так как старая была отключена. Мы смогли отправить сообщения, но теперь, когда мы отправляем, звуковые уведомления (уведомления) не воспроизводятся. Я думаю, это связано с тем, как мы отправляем нагрузку.
Вот что мы использовали для отправки (значения в знаках фунта):
<cfset bodyData = { "to": "#get_messages.UDID#",
"priority": "high",
"notification" : {
"title": "WENS Crisis",
"body" : "#body#",
"EMB_id": "#get_messages.EMB_id#",
"message_log_id": "#get_messages.message_log_id#",
"reference_alertID": "#get_messages.reference_alertID#",
"recipient": "#recipient#",
"recipient_firstname": "#get_recipient.sub_firstname#",
"recipient_lastname": "#get_recipient.sub_lastname#",
"recipient_profile_image": "http://crisis.wensnetwork.com/wens_crisis/app_profiles/#get_recipient.app_profile_image#",
"reply_resolve": "#get_messages.reply_resolve#",
"reply_public": "#get_messages.reply_public#",
"msg_type": "1",
"tracker": "#get_messages.tracker#",
"app_message_id": "#get_messages.app_message_id#",
"content_available": "true",
"sound": "#sounds#",
"content_available": "1",
"apns-priority": "5",
"image": ""
},
"data" : {
"title": "WENS Crisis",
"body" : "#body#",
"EMB_id": "#get_messages.EMB_id#",
"message_log_id": "#get_messages.message_log_id#",
"reference_alertID": "#get_messages.reference_alertID#",
"recipient": "#recipient#",
"recipient_firstname": "#get_recipient.sub_firstname#",
"recipient_lastname": "#get_recipient.sub_lastname#",
"recipient_profile_image": "http://crisis.wensnetwork.com/wens_crisis/app_profiles/#get_recipient.app_profile_image#",
"reply_resolve": "#get_messages.reply_resolve#",
"reply_public": "#get_messages.reply_public#",
"msg_type": "1",
"tracker": "#get_messages.tracker#",
"app_message_id": "#get_messages.app_message_id#",
"content_available": "true",
"sound": "#sounds#",
"content_available": "1",
"apns-priority": "5",
"image": ""
}
} >
Это работало идеально на старой платформе.
Но теперь нам пришлось перейти на новую структуру JSON:
<cfset bodyData="{ "message": {
"token": "#get_messages.UDID#",
"notification": {
"title": "WENS Crisis",
"body": "#body#",
"image": ""
},
"data": {
"title": "WENS Crisis",
"body": "#body#",
"EMB_id": "#get_messages.EMB_id#",
"sound": "#sounds#",
"message_log_id": "#get_messages.message_log_id#",
"reference_alertID": "#get_messages.reference_alertID#",
"recipient": "#recipient#",
"recipient_firstname": "#get_recipient.sub_firstname#",
"recipient_lastname": "#get_recipient.sub_lastname#",
"recipient_profile_image": "http://crisis.wensnetwork.com/wens_crisis/app_profiles/#get_recipient.app_profile_image#",
"reply_resolve": "#get_messages.reply_resolve#",
"reply_public": "#get_messages.reply_public#",
"msg_type": "1",
"tracker": "#get_messages.tracker#",
"app_message_id": "#get_messages.app_message_id#",
"content_available": "1",
"apns-priority": "5",
"image": ""
}
}
}" >
Большая разница в том, что я вижу, что ничто не назначено тегу “notification”, и подозреваю, что поэтому тоны не воспроизводятся. Тег “sound” – это то место, где мы добавляем, какой тон воспроизводить. Но ничего не происходит.
Ответ или решение
Проблема: Звуки уведомлений не отправляются в Firebase FCM v1
Вы описали ситуацию, когда переход на новую версию Firebase Cloud Messaging (FCM) v1 привел к проблемам с воспроизведением звуков уведомлений. Несмотря на то, что в старой версии все работало корректно, изменения в структуре JSON-платформы могут влиять на отправку уведомлений. Разберемся подробнее в особенностях новой структуры и возможных причинах отсутствия звуков.
Новая структура сообщения в FCM v1
Вы привели две структуры JSON для отправки уведомлений: одну для старой версии и одну для новой версии FCM v1. Основные изменения заключаются в том, что в v1 структуру изменили, и теперь основное внимание уделяется полю message
. Однако важно учесть, что для корректного воспроизведения звуков уведомлений (alert sounds) необходимо обратиться к полю notification
.
Корректное использование полей notification
и data
При отправке уведомления через FCM:
- Поле
notification
используется для указания заголовка и текста сообщения, а также для управления поведением системного уведомления (например, его звука). - Поле
data
предназначено для передачи произвольных данных, которые могут быть использованы в приложении (но не отвечают за системные звуки уведомлений).
В вашей новой структуре не указано поле sound
внутри notification
. Из-за этого системное уведомление не получает указание воспроизводить определённый звук. Чтобы исправить ситуацию, вам нужно внести следующие коррективы в структуру сообщения:
{
"message": {
"token": "#get_messages.UDID#",
"notification": {
"title": "WENS Crisis",
"body": "#body#",
"sound": "#sounds#", // Добавьте sound сюда
"image": ""
},
"data": {
...
}
}
}
Рекомендации по решению проблемы
-
Переместите параметр
sound
в полеnotification
. Убедитесь, что вашsound
указан именно там, чтобы FCM мог контролировать, какой звук уведомления воспроизводить на устройстве пользователя. -
Проверьте правильность имени звукового файла. Убедитесь, что имя файла звучания указано правильно, и что этот файл доступен для вашего приложения. Файлы звуков должны находиться в определённой директории, которая доступна приложению, например, в папке ресурсов.
-
Тестируйте на реальных устройствах. Убедитесь, что тестирование проводится на устройствах, поддерживающих звук уведомлений, с включёнными уведомлениями и без режима "Не беспокоить".
-
Проверьте настройки приложения. Убедитесь, что в настройках самого приложения включены уведомления, и звук не отключен для вашего приложения в системных настройках телефона.
-
Логи и отладка. Включите отладку и логи отправляемых уведомлений, чтобы убедиться, что сервер корректно обрабатывает и отправляет сообщения с необходимыми параметрами.
Заключение
Переход на новую версию FCM может вызвать некоторые сложности, связанные с изменением структуры данных. Для успешной отправки уведомлений с звуковыми сигналами убедитесь, что файлы sound
правильно указаны в поле notification
. После внесения изменений и проведения тестирования, звуки уведомлений должны заработать, как и раньше. Если проблема всё равно сохраняется, стоит обратиться в службу поддержки Firebase для получения дополнительной помощи и консультаций.