Есть ли способ отправить беззвучный APNS с помощью Google Firebase? Похоже, что если приложение находится в фоновом режиме, оно всегда будет показывать уведомление пользователю.
Спасибо?
Есть ли способ отправить беззвучный APNS с помощью Google Firebase? Похоже, что если приложение находится в фоновом режиме, оно всегда будет показывать уведомление пользователю.
Спасибо?
Вы можете отправлять тихие сообщения APNS с использованием API сервера FCM https://firebase.google.com/docs/cloud-messaging/http-server-ref
В частности, вам необходимо использовать:
Этот параметр указывает настраиваемые пары ключ-значение сообщения полезная нагрузка.
Например, с данными: { "score": "3x1" }:
В iOS, если сообщение отправляется через APNS, оно представляет пользовательские данные поля. Если он отправлен через сервер соединений FCM, это будет представленный как словарь ключевых значений в AppDelegate Применение: didReceiveRemoteNotification:.
Ключ не должен быть зарезервированным словом ( "от" или любым словом, начинающимся с "google" или "gcm" ). Не используйте ни слова, определенные в этом таблицы (например, collapse_key).
Рекомендуются значения в типах строк. Вы должны преобразовать значения в объекты или другие нестрочные типы данных (например, целые или логические) строка
В iOS используйте это поле для представления контента, доступного в APNS полезная нагрузка. Когда отправляется уведомление или сообщение, и для этого установлено значение true, неактивное клиентское приложение пробуждается. На Android, сообщения данных пробуждаются приложение по умолчанию. В Chrome в настоящее время не поддерживается.
Полная документация: https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream-http-messages-json
Для действительно бесшумного уведомления (как для фона, так и фона) с использованием FCM-сервера используйте следующие поля:
"to" : "[token]",
"content_available": true,
"priority": "high",
"data" : {
"key1" : "abc",
"key2" : 123
}
ПРИМЕЧАНИЕ. Убедитесь, что вы используете контент "content_available" НЕ "с содержимым" с помощью FCM. Он конвертируется для APNS и не будет получен должным образом в противном случае. Разница несколько раз подстегнула меня.
Я объясняю эту тему более подробно в моем блоге. http://blog.boxstory.com/2017/01/how-to-send-silent-push-notification-in.html
** ключевая точка: "content_available: true"
{
"to" : "<device>",
"priority": "normal",
"content_available": true, <-- this key is converted to 'content-available:1'
"notification" : {
"body" : "noti body",
"title" : "noti title",
"link": "noti link "
}
}
Примечание. Если приведенный выше пример JSON отправлен, то уведомление будет видно пользователю. Используйте ниже, если вы не хотите, чтобы пользователь видел push-уведомление.
{
"to": "<device>",
"priority": "normal",
"content_available": true <-- this key is converted to 'content-available:1'
}
Для парней, которые не используют Legacy HTTP
как показано в других ответах, и используют новейший v1 HTTP protocol
, я наконец-то нашел правильный способ отправки тихих уведомлений.
Пример NodeJS с использованием firebase-admin
:
const message = {
apns: {
payload: {
aps: {
"content-available": 1,
alert: ""
}
}
}
};
admin
.messaging()
.send(message)
.then(response => {
// Response is a message ID string.
console.log("Successfully sent message:", response);
})
.catch(error => {
console.log("Error sending message:", error);
});
Объяснение:
apns
не конвертируется Firebase в v1 HTTP protocol
поэтому для этого вам нужно оригинальное "content-available": 1
.alert: ""
также необходимо. Если вы когда-нибудь попытаетесь отправить тихие уведомления, используя что-то вроде Pusher
, вы обнаружите, что только content-available
не может вызвать его. Вместо этого добавление дополнительного поля, такого как sound
или alert
может заставить его работать. См. Silent Push Notification в iOS 7 не работает. Поскольку Firebase запрещает пустой звук, мы можем использовать пустое оповещение для этого.