Уведомление о пожарной безопасности Firebase

Есть ли способ отправить беззвучный APNS с помощью Google Firebase? Похоже, что если приложение находится в фоновом режиме, оно всегда будет показывать уведомление пользователю.

Спасибо?

Ответ 1

Вы можете отправлять тихие сообщения APNS с использованием API сервера FCM https://firebase.google.com/docs/cloud-messaging/http-server-ref

В частности, вам необходимо использовать:

  • Поле data​​strong > :

Этот параметр указывает настраиваемые пары ключ-значение сообщения полезная нагрузка.

Например, с данными: { "score": "3x1" }:

В iOS, если сообщение отправляется через APNS, оно представляет пользовательские данные поля. Если он отправлен через сервер соединений FCM, это будет представленный как словарь ключевых значений в AppDelegate Применение: didReceiveRemoteNotification:.

Ключ не должен быть зарезервированным словом ( "от" или любым словом, начинающимся с "google" или "gcm" ). Не используйте ни слова, определенные в этом таблицы (например, collapse_key).

Рекомендуются значения в типах строк. Вы должны преобразовать значения в объекты или другие нестрочные типы данных (например, целые или логические) строка

  • Поле content-available:

В iOS используйте это поле для представления контента, доступного в APNS полезная нагрузка. Когда отправляется уведомление или сообщение, и для этого установлено значение true, неактивное клиентское приложение пробуждается. На Android, сообщения данных пробуждаются приложение по умолчанию. В Chrome в настоящее время не поддерживается.

Полная документация: https://firebase.google.com/docs/cloud-messaging/http-server-ref#downstream-http-messages-json

Ответ 2

Для действительно бесшумного уведомления (как для фона, так и фона) с использованием FCM-сервера используйте следующие поля:

"to" : "[token]",
"content_available": true,
"priority": "high",
"data" : {
  "key1" : "abc",
  "key2" : 123
}

ПРИМЕЧАНИЕ. Убедитесь, что вы используете контент "content_available" НЕ "с содержимым" с помощью FCM. Он конвертируется для APNS и не будет получен должным образом в противном случае. Разница несколько раз подстегнула меня.

Ответ 3

Я объясняю эту тему более подробно в моем блоге. http://blog.boxstory.com/2017/01/how-to-send-silent-push-notification-in.html

** ключевая точка: "content_available: true"

это образец JSON

{
    "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'
}

Ответ 4

Для парней, которые не используют 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 запрещает пустой звук, мы можем использовать пустое оповещение для этого.