web-dev-qa-db-fra.com

Comment publier et recevoir les données supplémentaires de One Signal notification?

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])
8
burakgunduz

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"]
}
8
jkasten

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 :)

4
nab

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)
0
sputn1k