Envoyer des données personnalisées
Ce guide vous aidera à mieux comprendre comment transmettre des données personnalisées à vos applications dans la charge utile des notifications push afin que votre application puisse réagir à ces notifications et effectuer diverses actions en conséquence.
Les manières de gérer les données personnalisées peuvent varier en fonction de vos objectifs commerciaux. Dans cet article, nous montrerons quelques exemples de base d’analyse de données personnalisées et d’exécution d’actions simples :
- changer la couleur de fond de l’application ;
- ouvrir une page personnalisée dans votre application.
Prérequis
Anchor link toCe guide couvre le développement natif iOS. Il est supposé que vous disposez d’une application iOS d’exemple configurée et recevant des notifications push conformément au guide de démarrage iOS.
Dans AppDelegate, dans la fonction didFinishLaunchingWithOptions, nous utiliserons self.viewController comme délégué pour le traitement des notifications push :
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { Pushwoosh.sharedInstance().delegate = self.viewController Pushwoosh.sharedInstance().registerForPushNotifications()
if let launchOptions = launchOptions { Pushwoosh.sharedInstance().handlePushReceived(launchOptions) } return true}Notre ViewController implémente le protocole PWMessagingDelegate :
extension ViewController: PWMessagingDelegateEt a donc la fonction onMessageOpened qui gère les notifications push reçues :
// User pressed on the push notificationfunc pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) {}Ouvrir un autre ViewController et changer la couleur de fond
Anchor link toMaintenant, nous récupérons customData depuis la charge utile du push. Par exemple, changeons la couleur de fond de la vue et le pourcentage de réduction. Nous supposons que les données personnalisées contiendront les éléments « r », « g », « b » et « d » au format d’objet JSON comme suit :
guard let customDataJson = message.customData, let redString = customDataJson["r"] as? String, let greenString = customDataJson["g"] as? String, let blueString = customDataJson["b"] as? String, let discount = customDataJson["d"] as? String else { return}setViewBackgroundColor(red: redString, green: greenString, blue: blueString, discount: discount)Nous utiliserons la fonction suivante pour ouvrir un nouveau ViewController et définir la couleur de fond ainsi que le pourcentage de réduction :
func setViewBackgroundColor(red: String, green: String, blue: String, discount: String) { let red = CGFloat((red as NSString).floatValue) let green = CGFloat((green as NSString).floatValue) let blue = CGFloat((blue as NSString).floatValue)
let color = UIColor(red: red / 255.0, green: green / 255.0, blue: blue / 255.0, alpha: 1)
if let topController = UIApplication.shared.topMostController() { let storyboard = UIStoryboard(name: "Main", bundle: nil) if let customViewController = storyboard.instantiateViewController(withIdentifier: "custom_page") as? CustomPageViewController { customViewController.discount = discount customViewController.bgColor = color topController.present(customViewController, animated: true, completion: nil) } }}Testons notre exemple. Accédez à Pushwoosh Journey et ajoutez un élément Push au canevas. Ensuite, cliquez sur Créer un nouveau contenu. Dans le formulaire de contenu Push qui s’ouvre, saisissez n’importe quel texte de notification push.

Ensuite, activez l’option Send custom data. Insérez le JSON dans le champ Custom data.
Comme nous avons décidé que notre format de données personnalisées serait un objet JSON avec les valeurs « r », « g », « b », nous devons utiliser le champ « custom data » dans le Panneau de Contrôle et le remplir avec l’objet JSON {"r":"30", "g":"144", "b":"255", "d":"25"} :

En appuyant sur la notification push, le CustomPageViewController s’ouvre, la couleur de fond est définie et la réduction est appliquée :

Code du CustomPageViewController :
class CustomPageViewController: UIViewController {
var bgColor: UIColor? var discount: String?
@IBOutlet weak var titleLabel: UILabel!
override func viewDidLoad() { super.viewDidLoad()
self.view.backgroundColor = self.bgColor
if self.discount != nil { self.titleLabel?.text = "ONLY TODAY GET \(self.discount!)% DISCOUNT!" } }
func showPromoPage(discount: String) { let vc = CustomPageViewController() vc.bgColor = self.view.backgroundColor vc.discount = discount vc.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
if self.presentedViewController != nil { self.dismiss(animated: true, completion: { self.present(vc, animated: true, completion: nil) }) } else { self.present(vc, animated: true, completion: nil) } }
@IBAction func closeButtonAction(_ sender: Any) { self.dismiss(animated: true) }}Nous supposons que la valeur de la réduction viendra en tant que paramètre « d » dans le JSON de la charge utile de la notification push. Comme les charges utiles des notifications push sont de taille limitée, il est préférable d’utiliser des noms courts pour les paramètres.
guard let customDataJson = message.customData, let redString = customDataJson["r"] as? String, let greenString = customDataJson["g"] as? String, let blueString = customDataJson["b"] as? String, let discount = customDataJson["d"] as? String else { return}Vous pouvez écrire du code pour initialiser et ouvrir différents View Controllers en fonction des paramètres que vous passez dans la charge utile de la notification push.
Ouvrir le view controller de test A/B
Anchor link toConsidérons un autre cas d’utilisation des données personnalisées dans une notification push. Par exemple, nous devons ouvrir un view controller pour un segment d’utilisateurs et un autre view controller pour un segment d’utilisateurs différent. Autrement dit, nous pouvons utiliser les données personnalisées pour des tests A/B dans votre application.
Créons deux view controllers. Un contrôleur (A) s’ouvrira avec une valeur de réduction, et le second contrôleur (B) s’ouvrira avec un paramètre de réduction différent.
Maintenant, écrivons le code qui ouvrira le view controller approprié en fonction de la charge utile de la notification push :
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { // MARK: - A/B Testing via Custom Data guard let customDataJson = message.customData, let viewController = customDataJson["vc"] as? String else { return }
if viewController == "A" { setControllerA() } else if viewController == "B" { setControllerB() }}
func setControllerA() { if let topController = UIApplication.shared.topMostController() { let storyboard = UIStoryboard(name: "Main", bundle: nil) if let customViewController = storyboard.instantiateViewController(withIdentifier: "a_vc") as? AViewController { customViewController.discountA = "50" topController.present(customViewController, animated: true, completion: nil) } }}
func setControllerB() { if let topController = UIApplication.shared.topMostController() { let storyboard = UIStoryboard(name: "Main", bundle: nil) if let customViewController = storyboard.instantiateViewController(withIdentifier: "b_vc") as? BViewController { customViewController.discountB = "100" topController.present(customViewController, animated: true, completion: nil) } }}Ajoutez votre JSON au champ Custom data.
{ "vc": "A"}
// Choose your Custom Data (A or B)
{ "vc": "B"}Selon les données personnalisées que vous avez envoyées dans la charge utile du push, soit 'vc': 'A' soit 'vc': 'B', un segment d’utilisateurs ouvrira un contrôleur, tandis qu’un autre segment d’utilisateurs ouvrira un contrôleur différent.
View Controller « A »
Anchor link to
View Controller « B »
Anchor link to
Changer l’icône de l’application via une notification push
Anchor link toUn autre exemple de la manière dont nous pouvons utiliser les notifications push dans iOS est de changer l’icône de l’application.
Tout d’abord, ajoutons trois icônes différentes aux assets. L’une sera utilisée comme icône par défaut de l’application, tandis que les deux autres changeront en fonction des données personnalisées de la notification push.

Pour activer les icônes d’application alternatives dans votre application iOS, vous devez ajouter la configuration nécessaire dans le fichier Info.plist. Voici les étapes pour le faire :
<key>CFBundleIcons</key><dict> <key>CFBundleAlternateIcons</key> <dict> <key>AppIcon-2</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon-2</string> </array> <key>UIPrerenderedIcon</key> <true/> </dict> <key>AppIcon-3</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon-3</string> </array> <key>UIPrerenderedIcon</key> <true/> </dict> </dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon-1</string> </array> <key>UIPrerenderedIcon</key> <true/> </dict></dict>Dans le rappel pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage), vous pouvez ajouter le code pour changer l’icône de l’application en fonction des données personnalisées reçues dans la notification push. Voici comment vous pouvez l’implémenter :
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { // MARK: - Change the app icon dynamically guard let customDataJson = message.customData, let appIcon = customDataJson["i"] as? String else { return }
UIApplication.shared.setAlternateIconName(appIcon) { error in if let error = error { print(error.localizedDescription) } else { print("Success!") } }}Ajoutez le code JSON :
{ "i": "AppIcon-2"}
En appuyant sur la notification push, le système vous demandera de changer l’icône de l’application sur l’appareil.

Vous pouvez trouver le projet utilisant les données personnalisées sur GitHub.