ios - open - ¿Cómo publicar los datos adicionales de la notificación One Signal y recibirlos?
push notifications service (3)
Establece el campo de data
como una clave en el diccionario pasado a OneSignal.postNotification
como el siguiente.
OneSignal.postNotification(["contents": ["en": "Test Message"],
"include_player_ids": ["3009e210-3166-11e5-bc1b-db44eb02b120"],
"data": ["postID": "id"]])
Luego debe preparar sus llaves de additionalData
de la payload
en la función handleNotificationAction
.
if let additionalData = payload?.additionalData {
let postID: String? = additionalData["postID"]
}
Comprobé la documentación de OneSignal pero no pude entender claramente como principiante cómo configurar el diccionario como datos adicionales de una notificación posterior (como postID, ID de usuario, tipo) en iOS SDK nativo usando Swift para decidir y redirigir cuando el usuario interactuó con la notificación.
Para publicar solo estoy haciendo eso:
OneSignal.sendTag("username", value: "/(user)")
OneSignal.postNotification(["contents": ["en": "@/(user) added an additive to your ''/(title)'' experience: /"/(strLast)/""],
"include_player_ids": [postOwnerPlayerID],
Para recibir:
OneSignal.initWithLaunchOptions(launchOptions, appId: "______", handleNotificationReceived: nil, handleNotificationAction: {
(result) in
// This block gets called when the user reacts to a notification received
let payload = result?.notification.payload
//Try to fetch the action selected
if let additionalData = payload?.additionalData {
print("payload")
print(additionalData)
}
// After deciding which action then I can redirect user..
let username: String? = UserDefaults.standard.string(forKey: KEY_UID)
if username != nil {
if let tabbarController = self.window!.rootViewController as? UITabBarController {
tabbarController.selectedViewController = tabbarController.viewControllers?[2]
// NotificationCenter.default.post(name: Foundation.Notification.Name(rawValue: "notificationsUp"), object: nil)
}
}
}, settings: [kOSSettingsKeyInFocusDisplayOption : OSNotificationDisplayType.none.rawValue])
Ejemplo de iOS en objC para enviar datos adicionales ...
[OneSignal postNotification:@{@"contents":@{@"en":text},
@"include_player_ids":oneSignalIds,
@"data":@{@"key": @"value"},
}];
Y para recibir los datos ...
[OneSignal initWithLaunchOptions:launchOptions
appId:ONESIGNAL_APPID
handleNotificationReceived:^(OSNotification *notification) {
if (notification.payload.additionalData) {
NSDictionary* additionalData = notification.payload.additionalData;
if (additionalData[@"key"]){
NSLog(@"Received Data - %@", additionalData[@"key"]);
}
}
}
handleNotificationAction:nil
settings:@{kOSSettingsKeyInAppAlerts:@YES}];
Espero que ayude a alguien :)
¡Gracias a @jkasten me ayudó en la dirección correcta! me ayudó a deshacerme de la advertencia de AnyHashable
que estaba recibiendo.
Código de Swift 3 (cambie la RUTA al parámetro adicionalData que desea mostrar):
let PATH = notification!.payload.additionalData["PATH"]
print("PATH: ",PATH as Any)