Saltar al contenido

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 to

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

Y por lo tanto tiene la función onMessageOpened que maneja las notificaciones push recibidas:

// El usuario presionó la notificación push
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) {}

Abrir otro ViewController y cambiar el color de fondo

Anchor link to

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

Formulario de creación de notificaciones push en el Panel de Control de Pushwoosh con campo de texto y conmutador de datos personalizados

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

Campo de datos personalizados en el formulario de notificación push que muestra un objeto JSON con valores de color RGB y parámetro de descuento

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

ViewController de página personalizada que se muestra con el color de fondo y el porcentaje de descuento aplicados desde los datos personalizados de la notificación push

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 to

Consideremos 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 A mostrando el valor de descuento para el segmento de prueba A/B

ViewController “B”

Anchor link to
ViewController B mostrando un valor de descuento diferente para el segmento de prueba A/B

Cambiar el icono de la aplicación a través de una notificación push

Anchor link to

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

Catálogo de assets de Xcode que muestra tres iconos de aplicación diferentes para el cambio dinámico de iconos

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"
}
Campo de datos personalizados en el formulario de notificación push con objeto JSON que especifica el nombre del icono de la aplicación alternativo

Al tocar la notificación push, el sistema le pedirá que cambie el icono de la aplicación en el dispositivo.

Diálogo de aviso del sistema iOS pidiendo permiso al usuario para cambiar el icono de la aplicación en el dispositivo

Puede encontrar el proyecto que utiliza datos personalizados en GitHub.