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-
En Xcode, selecciona File > New > Target…
-
Selecciona Notification Service Extension y presiona Next.
- Ingresa el nombre del producto y presiona Finish.
- Presiona Cancel en el aviso Activate scheme.
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 toSi 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:
target 'NotificationServiceExtension' do use_frameworks! pod 'PushwooshXCFramework'endEjecuta los siguientes comandos en la terminal para instalar las dependencias:
rm -rf Podfile.lockpod deintegratepod setuppod repo updatepod installAgregar código para el seguimiento de eventos de entrega de mensajes
Anchor link toHaz 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 UserNotificationsimport PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}#import <PushwooshFramework/PushwooshNotificationServiceExtension.h>
@interface NotificationService : PushwooshNotificationServiceExtension
@end
@implementation NotificationService
@endID de la aplicación
Anchor link toDesde 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:
<key>Pushwoosh_APPID</key><string>XXXXX-XXXXX</string>Grupo de aplicaciones (contador y proxy inverso)
Anchor link toSe 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.
-
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.
-
Proporciona el nombre del Grupo de aplicaciones. Al igual que
Pushwoosh_APPID, la extensión heredaPW_APP_GROUPS_NAMEdel 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 anulandopushwooshAppGroupsName.
<key>PW_APP_GROUPS_NAME</key><string>group.com.example.app</string>Personalizar la notificación (opcional)
Anchor link toLa 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 toEsta API de bajo nivel impulsa el mismo procesamiento (evento de entrega, contador, archivo adjunto) desde una UNNotificationServiceExtension simple:
import UserNotificationsimport PushwooshFramework
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { PWNotificationExtensionManager.sharedManager() .handleNotificationRequest(request, contentHandler: contentHandler) }}#import "PWNotificationExtensionManager.h"
@interface NotificationService : UNNotificationServiceExtension
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *))contentHandler { [[PWNotificationExtensionManager sharedManager] handleNotificationRequest:request contentHandler:contentHandler];}
@endComparte tus comentarios con nosotros
Anchor link toTus 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.