Как получить необработанные полезные данные ответа OneSignal и дополнительные данные на iOS?IOS

Программируем под IOS
Ответить
Anonymous
 Как получить необработанные полезные данные ответа OneSignal и дополнительные данные на iOS?

Сообщение Anonymous »

У нас есть мобильное приложение, написанное на ReactNative (Android и iOS). response-native-onesignal используется для обработки push-уведомлений. Теперь нам нужно иметь возможность обработать уведомление сразу после его получения (без вмешательства пользователя), скажем, воспроизвести текст в речь «Спасибо. Платеж XX принят». даже если приложение свернуто/в фоновом режиме. Поэтому расширение службы уведомлений — единственное решение.
Я понял (почти), как это сделать на Android: ссылка. С другой стороны, я полный нуб в iOS. Вот мой код:
NotificationService.swift

Код: Выделить всё

import UserNotifications

import OneSignalExtension

class NotificationService: UNNotificationServiceExtension {

var contentHandler: ((UNNotificationContent) -> Void)?
var receivedRequest: UNNotificationRequest!
var bestAttemptContent: UNMutableNotificationContent?

override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.receivedRequest = request
self.contentHandler = contentHandler
self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

/* added by me*/
let rawPayload = request.content.userInfo
print("NSE full raw payload: \(rawPayload)")
var additionalData: [AnyHashable: Any]? = nil

if let customData = rawPayload["custom"] as? [AnyHashable: Any] {
if let aData = customData["a"] as? [AnyHashable: Any] {
additionalData = aData
print("NSE: Found Additional Data: \(additionalData ?? [:])")
}
}
/* added by me*/

if let bestAttemptContent = bestAttemptContent {
/* DEBUGGING: Uncomment the 2 lines below to check this extension is executing
Note, this extension only runs when mutable-content is set
Setting an attachment or action buttons automatically adds this */
// print("Running NotificationServiceExtension")
// bestAttemptContent.body = "[Modified] " + bestAttemptContent.body

/* added by me */
print("Running NSE: "+bestAttemptContent.body)
/* added by me*/
OneSignalExtension.didReceiveNotificationExtensionRequest(self.receivedRequest, with: bestAttemptContent, withContentHandler: self.contentHandler)
}
}

override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
OneSignalExtension.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
}
Скорее всего, NotificationService.swift автоматически генерируется с помощью реакции-native-onesignal, поэтому я добавил только некоторые части, помеченные как «добавленные мной». При запуске приложения в симуляторе iOS 18 я не увидел ни одной полной необработанной полезной нагрузки NSE или строк NSE: Found Extra Data в журнале терминала XCode. Что здесь не так?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ata-on-ios
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»