Suporte a notificações push
Acompanhe as interações dos usuários com notificações push para medir campanhas de reengajamento e atribuir conversões com precisão, integrando o Serviço de Notificação Push da Apple (APNs) com o SDK Singular.
Siga as diretrizes de implementação abaixo para garantir que os dados de notificação sejam passados corretamente para o Singular SDK para atribuição adequada.
Por que rastrear notificações push: As notificações push impulsionam o reengajamento, mas o rastreamento requer a integração correta. 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.
Guia de implementação
Registar para receber notificações push
Solicite a autorização dos utilizadores para receber notificações push e registe a aplicação com APNs utilizando odedeUNUserNotificationCenter.
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()
}
}
}
- (void)registerForPushNotifications:(UIApplication *)application {
// Set delegate to self
[UNUserNotificationCenter currentNotificationCenter].delegate = self;
// Define the push notification options
UNAuthorizationOptions pushAuthOptions = UNAuthorizationOptionAlert |
UNAuthorizationOptionBadge |
UNAuthorizationOptionSound;
// Request push notification authorization
[[UNUserNotificationCenter currentNotificationCenter]
requestAuthorizationWithOptions:pushAuthOptions
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (error) {
NSLog(@"registerForPushNotifications : failure - %@", error.localizedDescription);
}
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[application registerForRemoteNotifications];
});
}
}];
}
Melhores práticas: Solicite a autorização de notificação no início do ciclo de vida da aplicação, idealmente após demonstrar valor aos utilizadores para melhorar as taxas de aceitação.
Processar respostas de notificação
Processar respostas de notificação quando os usuários tocam em notificações push e encaminhar os dados de carga útil para o Singular para rastreamento.
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()
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)(void))completionHandler {
// Extract the push notification payload (user info)
NSDictionary *userInfo = response.notification.request.content.userInfo;
// Log the userInfo dictionary for debugging purposes
NSLog(@"didReceiveNotificationResponse userInfo = %@", userInfo);
// Pass the notification data to Singular for tracking
[Singular handlePushNotification:userInfo];
// Call the completion handler to indicate processing is complete
completionHandler();
}
Melhores práticas: Sempre chame o manipulador de conclusão imediatamente para garantir que o sistema saiba que o processamento da notificação está concluído. A conclusão atrasada pode resultar em avisos do sistema ou limitação.
Configurar SDK para cargas úteis de push
Adicione seletores de carga útil de notificação push à configuração do SDK para especificar onde os links Singular estão localizados na estrutura de dados da notificação.
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)
}
- (SingularConfig *)getConfig {
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"SDK_KEY"
andSecret:@"SDK_SECRET"];
// Configure push notification link paths
config.pushNotificationLinkPath = @[
@[@"sng_link"],
@[@"rootObj", @"nestedObj", @"anotherNested", @"singularLink"]
];
return config;
}
// Start the Singular SDK with the configuration
SingularConfig *config = [self getConfig];
[Singular start:config];
Configuração do seletor:
-
Chaves simples: Use
["sng_link"]para chaves de nível superior na carga útil - Chaves aninhadas: Use odede["rootObj", "nestedObj", "key"] para percorrer estruturas JSON aninhadas
- Múltiplos caminhos: Defina vários conjuntos de selectores para verificar diferentes localizações possíveis para ligações Singular
Guia de validação
Verificar a carga útil na sessão inicial
Confirme que os links de notificação push são passados corretamente para o Singular inspecionando a chamada da API de início de sessão.
O SDK do Singular inclui a carga útil da notificação push no parâmetro singular_link na solicitação da sessão inicial quando os usuários tocam nas notificações.
Exemplo de solicitação de início de sessão:
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 Singular para verificar o rastreamento de notificações por push. Verifique o campo URL do Deeplink para confirmar que o link de rastreamento foi capturado corretamente.
Configuração avançada
Configuração de domínio ESP
Configure domínios externos se você envolver links do Singular dentro do Provedor de serviços de e-mail (ESP) ou outros domínios de terceiros.
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
}
- (SingularConfig *)getConfig {
SingularConfig *config = [[SingularConfig alloc] initWithApiKey:@"SDK_KEY"
andSecret:@"SDK_SECRET"];
// Configure ESP domains for wrapped links
config.espDomains = @[@"sl.esp.link", @"custom.domain.com"];
return config;
}
Nota de segurança: Por padrão, somente domínios sng.linkpredefinidos na página Gerenciar links do Singular são permitidos. Configure domínios ESP explicitamente se estiver usando links agrupados.
Roteamento dinâmico de deep link
Implemente vários destinos de deep link a partir de uma única notificação, configurando um link de rastreamento Singular com substituições de redirecionamento dinâmico.
Exemplo de caso de uso: Uma notificação de notícias de última hora com várias opções de ação
-
Ler as últimas notícias:
newsapp://article?id=12345 -
Tópicos em destaque:
newsapp://trending -
Desporto:
newsapp://sports
Em vez de criar várias ligações de seguimento, utilize uma ligação Singular e substitua os redireccionamentos dinamicamente com base na seleção do utilizador. Consulte Substituição de redirecionamentos em links de rastreamento singularespara obter detalhes de implementação.
Considerações importantes
Notas de implementação
-
Nenhum manipulador de retorno de chamada: Ao contrário de
singularLinksHandler, o recurso de notificação por push não fornece retornos de chamada de carga. Implemente a sua própria lógica de ligação profunda para encaminhar os utilizadores para conteúdos específicos na sua aplicação -
Fluxo de atribuição: quando os utilizadores tocam nas notificações, a Singular recupera o payload e inclui-o no evento de início de sessão desencadeado por
Singular.start(). O backend processa esses dados para atribuir o ponto de contato da notificação push e registrar o rastreamento de reengajamento -
Restrições de domínio: Por predefinição, só são permitidos os domínios de ligação Singular (
sng.link) da página Gerir ligações. Configure os domínios ESP explicitamente para links agrupados usandoespDomains
Sucesso: Seguindo essas etapas, seu aplicativo agora rastreia as interações de notificação por push com o Singular, melhorando os insights de desempenho da campanha e garantindo uma atribuição precisa de reengajamento.