Enviar datos personalizados
Esta guía le ayudará a comprender mejor cómo pasar datos personalizados a sus aplicaciones en la carga útil de la notificación push para que su aplicación pueda reaccionar a dichos pushes y realizar diversas acciones en consecuencia.
Las formas en que maneja los datos personalizados pueden variar según sus objetivos comerciales. En este artículo mostraremos algunos ejemplos básicos de análisis de datos personalizados y realización de acciones simples:
- cambiar el color de fondo de la aplicación;
- abrir una página personalizada en su aplicación.
Prerrequisitos
Anchor link toEsta guía cubre el desarrollo nativo de iOS. Se asume que tiene una aplicación de ejemplo de iOS configurada y que recibe notificaciones push según la guía de inicio de iOS.
En AppDelegate, en la función didFinishLaunchingWithOptions, usaremos self.viewController como delegado para el procesamiento de notificaciones 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}Nuestro ViewController implementa el protocolo PWMessagingDelegate:
extension ViewController: PWMessagingDelegateY por lo tanto tiene la función onMessageOpened que maneja las notificaciones push recibidas:
// El usuario presionó la notificación pushfunc pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) {}Abrir otro ViewController y cambiar el color de fondo
Anchor link toAhora estamos obteniendo customData de la carga útil del push. Por ejemplo, cambiemos el color de fondo de la vista y el porcentaje de descuento. Asumimos que los datos personalizados contendrán los elementos “r”, “g”, “b” y "d" en formato de objeto JSON de la siguiente manera:
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)Usaremos la siguiente función para abrir un nuevo ViewController y establecer el color de fondo y el porcentaje de descuento:
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) } }}Probemos nuestro ejemplo. Navegue a Pushwoosh Journey y agregue un elemento Push al lienzo. A continuación, haga clic en Crear nuevo contenido. En el formulario de contenido Push que se abre, ingrese cualquier texto de notificación push.

Luego, active Enviar datos personalizados. Inserte el JSON en el campo de datos personalizados.
Como hemos decidido que nuestro formato de datos personalizados sería un objeto JSON con los valores “r”, “g”, “b” en él, necesitamos usar el campo “datos personalizados” en el Panel de Control y llenarlo con el objeto JSON {"r":"30", "g":"144", "b":"255", "d":"25"}:

Al tocar la notificación push, se abre el CustomPageViewController, se establece el color de fondo y se aplica el descuento:

Código de 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) }}Asumimos que el valor del descuento vendrá como parámetro "d" en el JSON de la carga útil de la notificación push. Como las cargas útiles de las notificaciones push tienen un tamaño limitado, es preferible usar nombres cortos para los parámetros.
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}Puede escribir código para inicializar y abrir diferentes ViewControllers dependiendo de los parámetros que pase en la carga útil de la notificación push.
Abrir el ViewController de pruebas A/B
Anchor link toConsideremos otro caso de uso para datos personalizados en una notificación push. Por ejemplo, necesitamos abrir un ViewController para un segmento de usuarios y otro ViewController para un segmento de usuarios diferente. En pocas palabras, podemos usar datos personalizados para pruebas A/B en su aplicación.
Creemos dos ViewControllers. Un controlador (A) se abrirá con un valor de descuento, y el segundo controlador (B) se abrirá con un parámetro de descuento diferente.
Ahora escribamos el código que abrirá el ViewController apropiado según la carga útil de la notificación push:
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { // MARK: - Pruebas A/B a través de datos personalizados 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) } }}Agregue su JSON al campo de datos personalizados.
{ "vc": "A"}
// Elija sus datos personalizados (A o B)
{ "vc": "B"}Dependiendo de los datos personalizados que envió en la carga útil del push, ya sea 'vc': 'A' o 'vc': 'B', un segmento de usuarios abrirá un controlador, mientras que otro segmento de usuarios abrirá un controlador diferente.
ViewController “A”
Anchor link to
ViewController “B”
Anchor link to
Cambiar el icono de la aplicación a través de una notificación push
Anchor link toOtro ejemplo de cómo podemos usar las notificaciones push en iOS es para cambiar el icono de la aplicación.
Primero, agreguemos tres iconos diferentes a los assets. Uno se usará como el icono predeterminado de la aplicación, mientras que los otros dos cambiarán según los datos personalizados en la notificación push.

Para habilitar iconos de aplicación alternativos en su aplicación de iOS, debe agregar la configuración necesaria en el archivo Info.plist. Aquí están los pasos para hacerlo:
<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>En el callback pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage), puede agregar el código para cambiar el icono de la aplicación según los datos personalizados recibidos en la notificación push. Así es como puede implementarlo:
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { // MARK: - Cambiar el icono de la aplicación dinámicamente 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!") } }}Agregue el código JSON:
{ "i": "AppIcon-2"}
Al tocar la notificación push, el sistema le pedirá que cambie el icono de la aplicación en el dispositivo.

Puede encontrar el proyecto que utiliza datos personalizados en GitHub.