Passer au contenu

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 to

Ce 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: PWMessagingDelegate

Et a donc la fonction onMessageOpened qui gère les notifications push reçues :

// User pressed on the push notification
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) {}

Ouvrir un autre ViewController et changer la couleur de fond

Anchor link to

Maintenant, 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.

Formulaire de création de notification push dans le Panneau de Contrôle Pushwoosh avec champ de texte et bascule pour les données personnalisées

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"} :

Champ de données personnalisées dans le formulaire de notification push montrant un objet JSON avec des valeurs de couleur RVB et un paramètre de réduction

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

ViewController de page personnalisée affiché avec la couleur de fond et le pourcentage de réduction appliqués à partir des données personnalisées de la notification push

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 to

Considé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 A affichant la valeur de la réduction pour le segment de test A/B

View Controller « B »

Anchor link to
View Controller B affichant une valeur de réduction différente pour le segment de test A/B

Changer l’icône de l’application via une notification push

Anchor link to

Un 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.

Catalogue d'assets Xcode montrant trois icônes d'application différentes pour le changement d'icône dynamique

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"
}
Champ de données personnalisées dans le formulaire de notification push avec un objet JSON spécifiant le nom de l'icône d'application alternative

En appuyant sur la notification push, le système vous demandera de changer l’icône de l’application sur l’appareil.

Boîte de dialogue du système iOS demandant à l'utilisateur la permission de changer l'icône de l'application sur l'appareil

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