SDK do iOS - Suporte a notificações push

Suporte a notificações push

Acompanhe as interações dos usuários com notificações push para medir campanhas de re-engajamento e atribuir conversões com precisão, integrando o Apple Push Notification Service (APNs) ao SDK do Singular.

Siga as diretrizes de implementação abaixo para garantir que os dados das notificações sejam corretamente repassados ao SDK do Singular para uma atribuição adequada.

Por que rastrear notificações push: As notificações push impulsionam o re-engajamento, mas seu rastreamento requer uma integração correta. O Singular garante que os usuários que interagem com as notificações sejam atribuídos corretamente, otimizando campanhas de marketing e estratégias de engajamento.

Pré-requisitos: Antes que os tokens de APNs sejam gerados e o Singular consiga extrair payloads push, verifique se todos os itens a seguir estão em vigor:

  • A capacidade Push Notifications está habilitada no Xcode em Signing & Capabilities para o target do app.
  • Uma chave APNs (.p8) ou certificado (.p12) foi carregado no dashboard do Singular para seu app.
  • O app é compilado com um perfil de provisionamento que inclui o entitlement aps-environment .
  • Os testes são realizados em um dispositivo físico — tokens de APNs não são emitidos no Simulador do iOS.
  • Singular.start(_:) foi executado antes que o SDK possa extrair um Singular link a partir de um payload de notificação via pushNotificationLinkPath .

Guia de implementação

Registrar para notificações push

Solicite autorização dos usuários para receber notificações push e registre o app junto ao APNs usando 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()
        }
    }
}

Melhor prática: Solicite a autorização de notificação cedo no ciclo de vida do app, idealmente depois de demonstrar valor aos usuários, para melhorar as taxas de opt-in.


Tratar respostas de notificação

Processe as respostas de notificação quando os usuários tocarem nas notificações push e encaminhe os dados do payload ao Singular para rastreamento.

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()
}

Melhor prática: Sempre chame o completion handler prontamente para garantir que o sistema saiba que o processamento da notificação foi concluído. Conclusões atrasadas podem resultar em avisos do sistema ou throttling.


Configurar o SDK para payloads push

Adicione seletores de payload de notificação push à configuração do seu SDK para especificar onde os Singular links estão localizados na estrutura de dados da notificação.

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)
}

Configuração de seletores:

  • Chaves simples: Use ["sng_link"] para chaves de nível superior no payload
  • Chaves aninhadas: Use ["rootObj", "nestedObj", "key"] para percorrer estruturas JSON aninhadas
  • Múltiplos caminhos: Defina múltiplos arrays de seletores para verificar diferentes locais possíveis dos Singular links

Guia de validação

Verificar o payload no Start Session

Confirme que os links de notificação push são corretamente repassados ao Singular inspecionando a chamada de API de start session.

O SDK do Singular inclui o payload de notificação push no parâmetro singular_link da solicitação de start session quando os usuários tocam nas notificações.

Exemplo de solicitação 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

Verificação alternativa: Use o console do SDK do Singular para verificar o rastreamento de notificações push. Verifique o campo Deeplink URL para confirmar que o tracking link foi capturado corretamente.


Configuração avançada

Configuração de domínios ESP

Configure domínios externos se você envelopar os Singular links dentro de um Email Service Provider (ESP) ou outros domínios de terceiros.

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 segurança: Por padrão, apenas os domínios sng.link pré-definidos na página Manage Links do Singular são permitidos. Configure os domínios ESP explicitamente se usar links envelopados.


Roteamento dinâmico de deep links

Implemente múltiplos destinos de deep link a partir de uma única notificação configurando um Singular tracking link com substituições de redirecionamento dinâmicas.

Exemplo de caso de uso: Uma notificação de notícias de última hora com múltiplas opções de ação

  • Ler as últimas notícias: newsapp://article?id=12345
  • Em alta: newsapp://trending
  • Esportes: newsapp://sports

Em vez de criar múltiplos tracking links, use um único Singular link e substitua os redirecionamentos dinamicamente com base na seleção do usuário. Consulte Substituindo redirecionamentos em Singular Tracking Links para detalhes de implementação.


Considerações importantes

Notas de implementação

  • Sem callback handler: Diferente de singularLinksHandler , o recurso de notificações push não fornece callbacks de payload. Implemente sua própria lógica de deep linking para encaminhar os usuários a conteúdos específicos dentro do seu app
  • Fluxo de atribuição: Quando os usuários tocam nas notificações, o Singular recupera o payload e o inclui no evento de start session disparado por Singular.start() . O backend processa esses dados para atribuir o touchpoint da notificação push e registrar o rastreamento de re-engajamento
  • Restrições de domínio: Por padrão, apenas os domínios de Singular link ( sng.link ) da página Manage Links são permitidos. Configure os domínios ESP explicitamente para links envelopados usando espDomains

Sucesso: Seguindo essas etapas, seu app agora rastreia interações com notificações push por meio do Singular, melhorando os insights de desempenho de campanhas e garantindo uma atribuição precisa de re-engajamento.