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.

La manière de gérer les données personnalisées peut varier en fonction de vos objectifs commerciaux. Dans cet article, nous présenterons quelques exemples de base d’analyse de données personnalisées et de réalisation 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’un exemple d’application iOS configuré 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 possède 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 les customData de la charge utile de la notification 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 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 sur le 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 Données personnalisées.

Comme nous avons décidé que notre format de données personnalisées serait un objet JSON contenant les valeurs « r », « g », « b », nous devons utiliser le champ « données personnalisées » dans le Control Panel 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 sera transmise via le paramètre « d » dans le JSON de la charge utile de la notification push. Comme la taille des charges utiles des notifications push est 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 ViewControllers en fonction des paramètres que vous transmettez dans la charge utile de la notification push.

Ouvrir un ViewController pour les tests 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 ViewController pour un segment d’utilisateurs et un autre ViewController pour un segment d’utilisateurs différent. Autrement dit, nous pouvons utiliser des données personnalisées pour effectuer des tests A/B dans votre application.

Créons deux ViewControllers. 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 ViewController 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 dans le champ Données personnalisées.

{
"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 de la notification push, soit 'vc': 'A' soit 'vc': 'B', un segment d’utilisateurs ouvrira un contrôleur, tandis qu’un autre segment d’utilisateurs en ouvrira un différent.

ViewController “A”

Anchor link to

ViewController “B”

Anchor link to

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

Anchor link to

Un autre exemple d’utilisation des notifications push dans iOS est le changement de l’icône de l’application.

Tout d’abord, ajoutons trois icônes différentes aux ressources (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 la fonction de rappel (callback) 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"
}

Lorsque vous appuyez sur la notification push, le système vous invitera à changer l’icône de l’application sur l’appareil.

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