Pré-solicitação de push para iOS
Uma pré-solicitação de push é uma caixa de diálogo de opt-in suave que você exibe antes da solicitação de permissão de push do sistema iOS. O iOS exibe a solicitação 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. A pré-solicitação permite que você explique o valor primeiro e pergunte no momento certo, para que você use a única chance da solicitação do sistema com usuários que já disseram sim.
Disponível desde a versão 7.1.1. A pré-solicitação faz parte do PushwooshFramework; nenhum módulo extra é necessário.

Como funciona
Anchor link toA pré-solicitação é totalmente ciente do estado. Ela lê o status atual de autorização de notificação e decide o que fazer, então é seguro chamá-la a cada inicialização:
- Não determinado — exibe a pré-solicitação; ao aceitar, aciona a solicitação de permissão do sistema.
- Autorizado ou provisório — suprime silenciosamente a pré-solicitação (nada é exibido).
- Negado — exibe a pré-solicitação; ao aceitar, encaminha o usuário para as configurações de notificação do aplicativo (quando
fallbackToSettingsestá ativado).
Você decide quando chamar a pré-solicitação (por exemplo, após a integração do usuário ou após uma ação principal). O SDK não impõe nenhum tempo próprio, exceto pela limitação opcional minInterval descrita abaixo.
Uso básico
Anchor link toConfigure a pré-solicitação 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("Receba notificações sobre ofertas e atualizações de pedidos primeiro") .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 puxador e botões de largura total (padrão). |
.sheet + .top | Banner compacto que desce do topo, como uma notificação. |
.sheet + .center | Caixa de diálogo centralizada que aumenta de escala e aparece gradualmente. |
Pushwoosh.configure.pushPrimer .style(.sheet) .position(.top) .title("Fique por dentro") .message("Receba notificações sobre ofertas e atualizações de pedidos primeiro") .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("Receba notificações sobre ofertas e atualizações de pedidos primeiro") .acceptButton("Ativar notificações") .declineButton("Agora não") .image(UIImage(named: "PrimerHero")) // local image, or .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 um URL remoto. Renderizado como um círculo nos layouts central e inferior, e como o ícone no banner superior. Uma imagem local tem precedência sobre um URL. |
backgroundColor | Cor de fundo sólida do cartão. |
backgroundGradient | Um array de cores renderizado como um gradiente suave multicolorido. Sobrescreve backgroundColor. |
titleColor / messageColor | Cores do texto do título e da mensagem. |
acceptButtonColor / acceptButtonTextColor | Cores de fundo e do texto do botão de aceitar. A cor de aceitar também tinge o ícone padrão. |
declineButtonColor / declineButtonTextColor | Cores de fundo e do 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, a pré-solicitação é exibida e o botão de aceitar leva o usuário para as configurações de notificação do aplicativo. Passe false para suprimir completamente a pré-solicitação no estado negado.
.fallbackToSettings(false)Frequência de exibição
Anchor link toPor padrão, a pré-solicitação não tem limitação integrada — ela é exibida sempre que você chama present (e é suprimida automaticamente assim que as notificações são autorizadas). Use minInterval para limitar a frequência com que a pré-solicitação reaparece. A última vez que foi exibida é mantida entre as inicializações.
.minInterval(7 * 24 * 60 * 60) // show at most once a weekLidando com o resultado
Anchor link toPasse uma conclusão para present para reagir ao resultado.
Pushwoosh.configure.pushPrimer .title("Fique por dentro") .message("Receba notificações sobre ofertas e atualizações de pedidos primeiro") .acceptButton("Ativar notificações") .declineButton("Agora não") .present { outcome in switch outcome { case .accepted: break // shown, user accepted, system prompt requested case .declined: break // shown, user declined case .suppressed: break // not shown (already authorized, or throttled) case .redirectedToSettings: break // denied state, user sent to Settings @unknown default: break } }O resultado final da solicitação do sistema (o estado concedido/negado e o token do dispositivo) chega através dos callbacks de registro regulares — a pré-solicitação reutiliza registerForPushNotifications ao aceitar e não duplica essa cadeia.