Pular para o conteúdo

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
  1. No Xcode, selecione File > New > Target…

  2. Selecione Notification Service Extension e pressione Next.

Seletor de modelo de destino do Xcode com a Notification Service Extension selecionada
  1. Insira o nome do produto e pressione Finish.
  1. Pressione Cancel no prompt Activate scheme.
Prompt 'Activate scheme' com 'Cancel' destacado

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 to

Se 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:

Podfile
target 'NotificationServiceExtension' do
use_frameworks!
pod 'PushwooshXCFramework'
end

Execute os seguintes comandos no terminal para instalar as dependências:

Terminal window
rm -rf Podfile.lock
pod deintegrate
pod setup
pod repo update
pod install

Adicionar código para rastrear eventos de entrega de mensagens

Anchor link to

Faç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 UserNotifications
import PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}

ID do Aplicativo

Anchor link to

Desde 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:

NotificationService/Info.plist
<key>Pushwoosh_APPID</key>
<string>XXXXX-XXXXX</string>

App Group (contador e proxy reverso)

Anchor link to

Um 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.

  1. 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.

  2. Forneça o nome do App Group. Assim como Pushwoosh_APPID, a extensão herda PW_APP_GROUPS_NAME do 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 substituindo pushwooshAppGroupsName.

App Info.plist
<key>PW_APP_GROUPS_NAME</key>
<string>group.com.example.app</string>

Personalizar a notificação (opcional)

Anchor link to

A 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 to

Esta API de baixo nível aciona o mesmo processamento (evento de entrega, contador, anexo) a partir de um UNNotificationServiceExtension simples:

import UserNotifications
import PushwooshFramework
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
PWNotificationExtensionManager.sharedManager()
.handleNotificationRequest(request, contentHandler: contentHandler)
}
}

Compartilhe seu feedback conosco

Anchor link to

Seu 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.