Primer de push para iOS
Um primer de push é um diálogo de opt-in que você exibe antes do prompt de permissão de push do sistema iOS. O iOS mostra o prompt do sistema apenas uma vez por instalação — se o usuário tocar em Não Permitir, o push é perdido até que ele o reative nos Ajustes. O primer permite que você explique o valor primeiro e pergunte no momento certo, para que você use o prompt do sistema de uma única vez em usuários que já disseram sim.
Disponível desde a versão 7.1.1. O primer faz parte do PushwooshFramework; nenhum módulo extra é necessário.

Como funciona
Anchor link toO primer é totalmente ciente do estado. Ele lê o status atual de autorização de notificação e decide o que fazer, então é seguro chamá-lo a cada inicialização:
- Não determinado — mostra o primer; ao aceitar, ele aciona o prompt de permissão do sistema.
- Autorizado ou provisório — suprime silenciosamente o primer (nada é mostrado).
- Negado — mostra o primer; ao aceitar, ele direciona o usuário para as configurações de notificação do aplicativo (quando
fallbackToSettingsestá ativado).
Você decide quando chamar o primer (por exemplo, após a integração ou após uma ação chave). O SDK não impõe nenhum tempo próprio, exceto pelo limitador opcional minInterval descrito abaixo.
Uso básico
Anchor link toConfigure o primer com um construtor fluente e chame present. A configuração mínima precisa de um título, uma mensagem e os títulos dos dois botões.
import PushwooshFramework
Pushwoosh.configure.pushPrimer .title("Fique por dentro") .message("Seja o primeiro a ser notificado sobre ofertas e atualizações de pedidos") .acceptButton("Ativar notificações") .declineButton("Agora não") .present()Estilos e posições
Anchor link toUse style para escolher entre um alerta do sistema e uma folha personalizada, e position para posicionar a folha personalizada. Cada posição tem seu próprio design padrão.
| Valor | Descrição |
|---|---|
.alert | UIAlertController do sistema. A posição é ignorada. |
.sheet + .bottom | Folha inferior que desliza para cima, com um agarrador e botões de largura total (padrão). |
.sheet + .top | Banner compacto que desce do topo, como uma notificação. |
.sheet + .center | Diálogo centralizado que escala e aparece gradualmente. |
Pushwoosh.configure.pushPrimer .style(.sheet) .position(.top) .title("Fique por dentro") .message("Seja o primeiro a ser notificado sobre ofertas e atualizações de pedidos") .acceptButton("Ativar notificações") .declineButton("Agora não") .present()
Personalização
Anchor link toTodas as configurações visuais são opcionais — omita-as para usar os padrões nativos que se adaptam aos modos claro e escuro.
Pushwoosh.configure.pushPrimer .style(.sheet) .position(.center) .title("Fique por dentro") .message("Seja o primeiro a ser notificado sobre ofertas e atualizações de pedidos") .acceptButton("Ativar notificações") .declineButton("Agora não") .image(UIImage(named: "PrimerHero")) // imagem local, ou .imageURL("https://…") .backgroundColor(.systemBackground) .titleColor(.label) .messageColor(.secondaryLabel) .acceptButtonColor(.systemBlue) .acceptButtonTextColor(.white) .declineButtonColor(.clear) .declineButtonTextColor(.secondaryLabel) .cornerRadius(24) .buttonCornerRadius(14) .buttonBorderColor(.separator) .present()Referência de personalização:
| Setter | Descrição |
|---|---|
image / imageURL | Um UIImage local ou uma URL remota. Renderizado como um círculo nos layouts central e inferior, e como o ícone no banner superior. Uma imagem local tem precedência sobre uma URL. |
backgroundColor | Cor de fundo sólida do cartão. |
backgroundGradient | Um array de cores renderizado como um gradiente suave de várias cores. Substitui backgroundColor. |
titleColor / messageColor | Cores do texto do título e da mensagem. |
acceptButtonColor / acceptButtonTextColor | Cores de fundo e de texto do botão de aceitar. A cor de aceitar também tinge o ícone padrão. |
declineButtonColor / declineButtonTextColor | Cores de fundo e de texto do botão de recusar. |
cornerRadius | Raio do canto do cartão. |
buttonCornerRadius / buttonBorderColor | Raio do canto e cor da borda de ambos os botões. |
Configurações de comportamento
Anchor link toFallback para Ajustes
Anchor link toPor padrão, quando as notificações já estão negadas, o primer é mostrado e o botão de aceitar leva o usuário para as configurações de notificação do aplicativo. Passe false para suprimir completamente o primer no estado negado.
.fallbackToSettings(false)Frequência de exibição
Anchor link toPor padrão, o primer não tem limitação de frequência integrada — ele é exibido sempre que você chama present (e é suprimido automaticamente assim que as notificações são autorizadas). Use minInterval para limitar a frequência com que o primer reaparece. A última vez que foi exibido é persistida entre as inicializações.
.minInterval(7 * 24 * 60 * 60) // mostrar no máximo uma vez por semanaLidando com o resultado
Anchor link toPasse uma conclusão para present para reagir ao resultado.
Pushwoosh.configure.pushPrimer .title("Fique por dentro") .message("Seja o primeiro a ser notificado sobre ofertas e atualizações de pedidos") .acceptButton("Ativar notificações") .declineButton("Agora não") .present { outcome in switch outcome { case .accepted: break // exibido, usuário aceitou, prompt do sistema solicitado case .declined: break // exibido, usuário recusou case .suppressed: break // não exibido (já autorizado ou limitado) case .redirectedToSettings: break // estado negado, usuário enviado para Ajustes @unknown default: break } }O resultado final do prompt do sistema (o estado concedido/negado e o token do dispositivo) chega através dos callbacks de registro regulares — o primer reutiliza registerForPushNotifications ao aceitar e não duplica essa cadeia.