Saltar al contenido

Seguimiento de la entrega de mensajes en iOS

Existe un método de API en Pushwoosh que rastrea la entrega de notificaciones push. Las aplicaciones de iOS no son compatibles con este método de forma nativa, porque las notificaciones push en iOS son manejadas por el SO, no por el SDK de Pushwoosh. Puedes agregar el seguimiento de entrega agregando una Extensión de Servicio de Notificación a tu proyecto. Esta página muestra cómo implementar el seguimiento de entrega de mensajes para aplicaciones de iOS.

Agregar la Extensión de Servicio de Notificación

Anchor link to
  1. En Xcode, selecciona File > New > Target…

  2. Selecciona Notification Service Extension y presiona Next.

Selector de plantillas de destino de Xcode con la Extensión de Servicio de Notificación seleccionada
  1. Ingresa el nombre del producto y presiona Finish.
  1. Presiona Cancel en el aviso Activate scheme.
Aviso de Activate scheme con Cancel resaltado

Al cancelar, mantienes a Xcode depurando tu aplicación en lugar de la extensión que acabas de crear. Si la activaste por accidente, puedes volver a depurar tu aplicación dentro de Xcode.

Dependencias para la Extensión de Servicio de Notificación (solo CocoaPods)

Anchor link to

Si usas Swift Package Manager para gestionar las dependencias, puedes omitir este paso, ya que las dependencias se agregan automáticamente.

Abre tu Podfile y agrega la dependencia para el destino:

Podfile
target 'NotificationServiceExtension' do
use_frameworks!
pod 'PushwooshXCFramework'
end

Ejecuta los siguientes comandos en la terminal para instalar las dependencias:

Terminal window
rm -rf Podfile.lock
pod deintegrate
pod setup
pod repo update
pod install

Agregar código para el seguimiento de eventos de entrega de mensajes

Anchor link to

Haz que tu extensión sea una subclase de PushwooshNotificationServiceExtension. Una subclase vacía es suficiente: Pushwoosh envía el evento de entrega de mensajes, establece el contador, descarga el archivo adjunto multimedia y maneja el fallback de tiempo de espera automáticamente.

Reemplaza el contenido generado de tu archivo NotificationService:

import UserNotifications
import PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}

ID de la aplicación

Anchor link to

Desde la versión 7.1.0, la extensión hereda Pushwoosh_APPID (y otras claves Pushwoosh_*) del Info.plist de la aplicación anfitriona, por lo que ya no necesitas duplicarlo en la extensión. Agrega Pushwoosh_APPID al Info.plist de la extensión solo cuando quieras anular el valor del anfitrión:

NotificationService/Info.plist
<key>Pushwoosh_APPID</key>
<string>XXXXX-XXXXX</string>

Grupo de aplicaciones (contador y proxy inverso)

Anchor link to

Se necesita un Grupo de aplicaciones (App Group) compartido entre la aplicación y la extensión para sincronizar el contador del ícono y para leer la configuración del proxy inverso que almacena la aplicación anfitriona.

  1. Agrega la capacidad App Groups al destino de la extensión y habilita el mismo grupo que en la aplicación anfitriona. Esto es obligatorio — sin el contenedor compartido, el contador del ícono y la configuración del proxy inverso no se pueden sincronizar.

  2. Proporciona el nombre del Grupo de aplicaciones. Al igual que Pushwoosh_APPID, la extensión hereda PW_APP_GROUPS_NAME del Info.plist de la aplicación anfitriona desde la versión 7.1.0, por lo que si ya lo configuraste allí para los contadores, no necesitas agregarlo a la extensión. Configúralo en el Info.plist de la extensión solo para anular el valor del anfitrión, o proporciónalo programáticamente anulando pushwooshAppGroupsName.

App Info.plist
<key>PW_APP_GROUPS_NAME</key>
<string>group.com.example.app</string>

Personalizar la notificación (opcional)

Anchor link to

La clase base expone algunos puntos de anulación, de menor a mayor control. Pushwoosh sigue ejecutando el evento de entrega, el contador, el archivo adjunto y el fallback de tiempo de espera en todos los casos.

Establece el Grupo de aplicaciones programáticamente en lugar de usar la clave del Info.plist:

override func pushwooshAppGroupsName() -> String? {
"group.com.example.app"
}

Ejecuta una preparación asíncrona antes de que Pushwoosh procese el push — por ejemplo, precargando medios de Push Stories — sin anular el didReceive estándar. Llama a completion exactamente una vez, en el hilo principal:

override func pushwooshPrepare(for request: UNNotificationRequest,
completion: @escaping () -> Void) {
// async work here
completion()
}

Modifica el contenido antes de que se muestre anulando didReceive. Llama a super con tu propio manejador de contenido, muta el contenido dentro de él y luego reenvíalo al manejador original:

override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
super.didReceive(request) { content in
let mutable = (content.mutableCopy() as? UNMutableNotificationContent) ?? content
// customize `mutable` here
contentHandler(mutable)
}
}

Integración heredada

Anchor link to

Esta API de bajo nivel impulsa el mismo procesamiento (evento de entrega, contador, archivo adjunto) desde una UNNotificationServiceExtension simple:

import UserNotifications
import PushwooshFramework
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
PWNotificationExtensionManager.sharedManager()
.handleNotificationRequest(request, contentHandler: contentHandler)
}
}

Comparte tus comentarios con nosotros

Anchor link to

Tus comentarios nos ayudan a crear una mejor experiencia, por lo que nos encantaría saber de ti si tienes algún problema durante el proceso de integración del SDK. Si encuentras alguna dificultad, no dudes en compartir tus pensamientos con nosotros a través de este formulario.