SDK de iOS - Soporte para notificaciones push

Soporte para notificaciones push

Realiza un seguimiento de las interacciones de los usuarios con las notificaciones push para medir las campañas de re-engagement y atribuir conversiones con precisión, integrando Apple Push Notification Service (APNs) con el SDK de Singular.

Sigue las pautas de implementación a continuación para garantizar que los datos de las notificaciones se transmitan correctamente al SDK de Singular y se atribuyan adecuadamente.

Por qué hacer seguimiento de las notificaciones push: Las notificaciones push impulsan el re-engagement, pero su seguimiento requiere una integración correcta. Singular garantiza que los usuarios que interactúan con las notificaciones sean atribuidos adecuadamente, optimizando las campañas de marketing y las estrategias de engagement.

Requisitos previos: Antes de que se generen los tokens de APNs y Singular pueda extraer los payloads push, verifica que se cumplan todos los siguientes puntos:

  • La capacidad Push Notifications está habilitada en Xcode dentro de Signing & Capabilities para el target de la app.
  • Se ha cargado una clave APNs (.p8) o certificado (.p12) en el dashboard de Singular para tu app.
  • La app se compila con un perfil de aprovisionamiento que incluye el entitlement aps-environment .
  • Las pruebas se realizan en un dispositivo físico — los tokens de APNs no se emiten en el simulador de iOS.
  • Singular.start(_:) se ha ejecutado antes de que el SDK pueda extraer un Singular link desde un payload de notificación a través de pushNotificationLinkPath .

Guía de implementación

Registrarse para notificaciones push

Solicita autorización a los usuarios para recibir notificaciones push y registra la app con APNs utilizando UNUserNotificationCenter.

Swift Objective-C
import UserNotifications

// Set the current instance as the delegate for UNUserNotificationCenter
UNUserNotificationCenter.current().delegate = self

// Define the notification authorization options (alert, badge, sound)
let pushAuthOptions: UNAuthorizationOptions = [.alert, .badge, .sound]

// Request notification authorization from the user
UNUserNotificationCenter.current().requestAuthorization(options: pushAuthOptions) { granted, error in
    // If an error occurs during authorization, print the error description
    if let error = error {
        print("registerForPushNotifications : failure - \(error.localizedDescription)")
    }

    // If the user granted permission, register for remote notifications
    if granted {
        // Ensure registration is done on the main thread
        DispatchQueue.main.async {
            UIApplication.shared.registerForRemoteNotifications()
        }
    }
}

Mejor práctica: Solicita la autorización de notificaciones de forma temprana en el ciclo de vida de la app, idealmente después de demostrar valor a los usuarios, para mejorar las tasas de opt-in.


Manejar respuestas de notificaciones

Procesa las respuestas de notificaciones cuando los usuarios toquen las notificaciones push y reenvía los datos del payload a Singular para su seguimiento.

Swift Objective-C
func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {

    // Extract the notification payload
    let userInfo = response.notification.request.content.userInfo

    // Pass the notification data to Singular for tracking
    Singular.handlePushNotification(userInfo)

    // Call the completion handler to indicate processing is complete
    completionHandler()
}

Mejor práctica: Llama siempre al completion handler con prontitud para asegurar que el sistema sepa que el procesamiento de la notificación se ha completado. Una finalización retrasada puede generar advertencias del sistema o throttling.


Configurar el SDK para payloads push

Agrega selectores de payload de notificaciones push a la configuración de tu SDK para especificar dónde se ubican los Singular links dentro de la estructura de datos de la notificación.

Swift Objective-C
func getConfig() -> SingularConfig? {
    guard let config = SingularConfig(apiKey: "SDK_KEY", andSecret: "SDK_SECRET") else {
        return nil
    }

    // Configure push notification link paths
    config.pushNotificationLinkPath = [
        ["sng_link"],
        ["rootObj", "nestedObj", "anotherNested", "singularLink"]
    ]

    return config
}

// Start the Singular SDK with the configuration
if let config = getConfig() {
    Singular.start(config)
}

Configuración de selectores:

  • Claves simples: Usa ["sng_link"] para claves de nivel superior dentro del payload
  • Claves anidadas: Usa ["rootObj", "nestedObj", "key"] para recorrer estructuras JSON anidadas
  • Múltiples rutas: Define múltiples arreglos de selectores para comprobar diferentes ubicaciones posibles de los Singular links

Guía de validación

Verificar el payload en Start Session

Confirma que los links de notificaciones push se transmitan correctamente a Singular inspeccionando la llamada al API de start session.

El SDK de Singular incluye el payload de notificación push bajo el parámetro singular_link en la solicitud de start session cuando los usuarios tocan las notificaciones.

Ejemplo de solicitud de Start Session:

https://skan.singular.net:443/api/v1/start?
dnt=-1
&update_time=0
&singular_link=https://sl.sng.link/Cclbu/2a7n?_dl=com.singular.app&_smtype=3
&i=com.singular.SwiftScene
&sdk=Singular/12.7.1
&p=iOS
&v=18.2.1

Verificación alternativa: Usa la consola del SDK de Singular para verificar el seguimiento de notificaciones push. Comprueba el campo Deeplink URL para confirmar que el tracking link se capturó correctamente.


Configuración avanzada

Configuración de dominios ESP

Configura dominios externos si envuelves los Singular links dentro de un Email Service Provider (ESP) u otros dominios de terceros.

Swift Objective-C
func getConfig() -> SingularConfig? {
    guard let config = SingularConfig(apiKey: "SDK_KEY", andSecret: "SDK_SECRET") else {
        return nil
    }

    // Configure ESP domains for wrapped links
    config.espDomains = ["sl.esp.link", "custom.domain.com"]

    return config
}

Nota de seguridad: De forma predeterminada, solo se permiten los dominios sng.link predefinidos en la página Manage Links de Singular. Configura los dominios ESP explícitamente si utilizas enlaces envueltos.


Enrutamiento dinámico de deep links

Implementa múltiples destinos de deep link desde una única notificación configurando un Singular tracking link con anulaciones dinámicas de redirección.

Ejemplo de caso de uso: Una notificación de noticias de última hora con múltiples opciones de acción

  • Leer las últimas noticias: newsapp://article?id=12345
  • Tendencias: newsapp://trending
  • Deportes: newsapp://sports

En lugar de crear múltiples tracking links, utiliza un único Singular link y anula las redirecciones dinámicamente según la selección del usuario. Consulta Anular redirecciones en Singular Tracking Links para más detalles de implementación.


Consideraciones importantes

Notas de implementación

  • Sin callback handler: A diferencia de singularLinksHandler , la funcionalidad de notificaciones push no proporciona callbacks de payload. Implementa tu propia lógica de deep linking para enrutar a los usuarios a contenido específico dentro de tu app
  • Flujo de atribución: Cuando los usuarios tocan las notificaciones, Singular recupera el payload y lo incluye en el evento de start session que se dispara con Singular.start() . El backend procesa estos datos para atribuir el touchpoint de la notificación push y registrar el seguimiento de re-engagement
  • Restricciones de dominio: De forma predeterminada, solo se permiten los dominios Singular link ( sng.link ) de la página Manage Links. Configura los dominios ESP explícitamente para enlaces envueltos utilizando espDomains

Éxito: Al seguir estos pasos, tu app ahora realiza el seguimiento de las interacciones con notificaciones push mediante Singular, mejorando los insights de rendimiento de campañas y garantizando una atribución precisa de re-engagement.