Можете ли вы установить идентификатор потока с уведомлениями FCM для ios

Сообщения Firebase FCM поддерживают tag для Android, что приводит к тому, что новое уведомление заменяет предыдущее более старым с тем же тегом. Есть ли способ сделать то же самое для ios?

Этот ответ предлагает использовать идентификатор потока в полезной нагрузке данных. Но это не сработало для меня.




Ответы (3)


В устаревшем протоколе HTTP-сервера FCM отсутствует ключ полезной нагрузки thread-id FCM. Обходной путь — использовать расширение службы уведомлений iOS. Отправьте идентификатор группировки в качестве ключа "thread-id" в полезной нагрузке данных FCM и позвольте расширению службы прочитать ключ "thread-id" и установить его в свойство threadIdentifier содержимого уведомления.

class NotificationService: UNNotificationServiceExtension {
    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        let userInfo: [AnyHashable : Any] = (bestAttemptContent?.userInfo)!  
        if let apsInfo = userInfo["aps"] as? [AnyHashable: Any], let bestAttemptContent = bestAttemptContent  {                
            //add thread-id to group notification.
            let patientId = userInfo["thread-id"] as! String
            bestAttemptContent.threadIdentifier = patientId
            contentHandler(bestAttemptContent)
        }
    }
}
person Shashidhar Yamsani    schedule 10.10.2018
comment
Можете ли вы объяснить, где я должен добавить этот код? Я использую Ionic/Cordova. - person Ari; 11.10.2018

Как я уже упоминал в моем ответе, на который вы ссылались:

Однако в настоящее время аналога параметра для thread-id в FCM нет.

Обходной путь, который я упомянул, заключается в том, чтобы поместить thread-id в полезную нагрузку данных, поскольку пользовательская пара значений ключа не была протестирована (я не так много баловался с iOS, поэтому это был долгий путь). Но логически, если вы можете получить значение полезной нагрузки данных, вы должны иметь возможность использовать это значение по мере необходимости.

Увы, до сих пор нет собственного способа установить параметр thread-id в полезной нагрузке iOS. Поддерживаются только те параметры, которые указаны в документах FCM. .

person AL.    schedule 11.04.2018
comment
Вы можете установить идентификатор потока для полезной нагрузки данных, и он будет работать нормально. - person Jeremy White; 15.02.2019

API FCM HTTP v1 должен поддерживать идентификатор потока. Проверьте поле APNS в https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages

person Chen Liang    schedule 20.06.2018
comment
Можете ли вы привести пример, где разместить идентификатор потока, чтобы это работало? Я пробовал так, но не получилось: "apns": {"payload": {"thread-id": "1234" }, }, - person Neneil; 03.07.2020
comment
Следует рассматривать как полезные данные: полезная нагрузка: { aps: { alert: { body : Знаете ли вы, что FCM теперь поддерживает watchOS?, title : Hello watch!, }, }, thread-id: 1234, }, - person Chen Liang; 06.07.2020