J'ai consulté la documentation de OneSignal, mais je ne comprenais pas bien, en tant que débutant, comment définir un dictionnaire comme données supplémentaires d'une notification de publication (telles que postID, userID, type) dans iOS Native SDK à l'aide de Swift pour décider et rediriger les utilisateurs lorsque la notification interagissait.
Pour poster je fais seulement comme ça:
OneSignal.sendTag("username", value: "\(user)")
OneSignal.postNotification(["contents": ["en": "@\(user) added an additive to your '\(title)' experience: \"\(strLast)\""],
"include_player_ids": [postOwnerPlayerID],
Pour recevoir:
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])
Vous définissez le champ data
comme une clé du dictionnaire passée à OneSignal.postNotification
comme suit.
OneSignal.postNotification(["contents": ["en": "Test Message"],
"include_player_ids": ["3009e210-3166-11e5-bc1b-db44eb02b120"],
"data": ["postID": "id"]])
Ensuite, vous devez préparer vos clés à partir de additionalData
à partir de payload
dans la fonction handleNotificationAction
.
if let additionalData = payload?.additionalData {
let postID: String? = additionalData["postID"]
}
Exemple depuis iOS dans objC pour envoyer des données supplémentaires ...
[OneSignal postNotification:@{@"contents":@{@"en":text},
@"include_player_ids":oneSignalIds,
@"data":@{@"key": @"value"},
}];
Et pour recevoir les données ...
[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}];
J'espère que ça aide quelqu'un :)
Merci à @jkasten m'a aidé dans la bonne direction! m'a aidé à me débarrasser de l'avertissement AnyHashable
que je recevais.
Code Swift 3 (remplacez PATH par le paramètre additionalData que vous souhaitez générer):
let PATH = notification!.payload.additionalData["PATH"]
print("PATH: ",PATH as Any)