Rastreamento de entrega de mensagens no iOS
Existe um método de API no Pushwoosh que rastreia a entrega de notificações push. Os aplicativos iOS não suportam este método nativamente, porque as notificações push no iOS são gerenciadas pelo SO, não pelo SDK do Pushwoosh. Você pode adicionar o rastreamento de entrega adicionando uma Notification Service Extension ao seu projeto. Esta página mostra como implementar o rastreamento de entrega de mensagens para aplicativos iOS.
Adicionar a Notification Service Extension
Anchor link to-
No Xcode, selecione File > New > Target…
-
Selecione Notification Service Extension e pressione Next.
- Insira o nome do produto e pressione Finish.
- Pressione Cancel no prompt Activate scheme.
Ao cancelar, você mantém o Xcode depurando seu aplicativo em vez da extensão que acabou de criar. Se você a ativou por acidente, pode voltar a depurar seu aplicativo dentro do Xcode.
Dependências para a Notification Service Extension (somente CocoaPods)
Anchor link toSe você usa o Swift Package Manager para gerenciar dependências, pode pular esta etapa, pois as dependências são adicionadas automaticamente.
Abra seu Podfile e adicione a dependência para o destino:
target 'NotificationServiceExtension' do use_frameworks! pod 'PushwooshXCFramework'endExecute os seguintes comandos no terminal para instalar as dependências:
rm -rf Podfile.lockpod deintegratepod setuppod repo updatepod installAdicionar código para rastrear eventos de entrega de mensagens
Anchor link toFaça sua extensão ser uma subclasse de PushwooshNotificationServiceExtension. Uma subclasse vazia é suficiente: o Pushwoosh envia o evento de entrega de mensagem, define o contador, baixa o anexo de mídia e lida com o fallback de tempo limite automaticamente.
Substitua o conteúdo gerado do seu arquivo NotificationService:
import UserNotificationsimport PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}#import <PushwooshFramework/PushwooshNotificationServiceExtension.h>
@interface NotificationService : PushwooshNotificationServiceExtension
@end
@implementation NotificationService
@endID do Aplicativo
Anchor link toDesde a versão 7.1.0, a extensão herda Pushwoosh_APPID (e outras chaves Pushwoosh_*) do Info.plist do aplicativo hospedeiro, então você não precisa mais duplicá-lo na extensão. Adicione Pushwoosh_APPID ao Info.plist da extensão apenas quando quiser substituir o valor do hospedeiro:
<key>Pushwoosh_APPID</key><string>XXXXX-XXXXX</string>App Group (contador e proxy reverso)
Anchor link toUm App Group compartilhado entre o aplicativo e a extensão é necessário para sincronizar a contagem do contador (badge) e para ler as configurações de proxy reverso que o aplicativo hospedeiro armazena.
-
Adicione a capacidade App Groups ao destino da extensão e habilite o mesmo grupo lá que no aplicativo hospedeiro. Isso é obrigatório — sem o contêiner compartilhado, a contagem do contador e as configurações de proxy reverso não podem ser sincronizadas.
-
Forneça o nome do App Group. Assim como
Pushwoosh_APPID, a extensão herdaPW_APP_GROUPS_NAMEdo Info.plist do aplicativo hospedeiro desde a versão 7.1.0, então se você já o definiu lá para os contadores, não precisa adicioná-lo à extensão. Defina-o no Info.plist da extensão apenas para substituir o valor do hospedeiro, ou forneça-o programaticamente substituindopushwooshAppGroupsName.
<key>PW_APP_GROUPS_NAME</key><string>group.com.example.app</string>Personalizar a notificação (opcional)
Anchor link toA classe base expõe alguns pontos de substituição, do menor para o maior controle. O Pushwoosh ainda executa o evento de entrega, contador, anexo e fallback de tempo limite em todos os casos.
Defina o App Group programaticamente em vez de usar a chave do Info.plist:
override func pushwooshAppGroupsName() -> String? { "group.com.example.app"}Execute a preparação assíncrona antes que o Pushwoosh processe o push — por exemplo, pré-buscando mídias do Push Stories — sem substituir o didReceive padrão. Chame completion exatamente uma vez, na thread principal:
override func pushwooshPrepare(for request: UNNotificationRequest, completion: @escaping () -> Void) { // trabalho assíncrono aqui completion()}Modifique o conteúdo antes que ele seja mostrado, substituindo didReceive. Chame super com seu próprio manipulador de conteúdo, altere o conteúdo dentro dele e, em seguida, encaminhe-o para o manipulador original:
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { super.didReceive(request) { content in let mutable = (content.mutableCopy() as? UNMutableNotificationContent) ?? content // personalize `mutable` aqui contentHandler(mutable) }}Integração legada
Anchor link toEsta API de baixo nível aciona o mesmo processamento (evento de entrega, contador, anexo) a partir de um UNNotificationServiceExtension simples:
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];}
@endCompartilhe seu feedback conosco
Anchor link toSeu feedback nos ajuda a criar uma experiência melhor, então adoraríamos ouvir de você se tiver algum problema durante o processo de integração do SDK. Se você enfrentar alguma dificuldade, não hesite em compartilhar suas opiniões conosco através deste formulário.