App Clips do iOS
Os App Clips permitem que os usuários concluam uma tarefa rapidamente sem baixar seu aplicativo completo. Com a Pushwoosh, você pode enviar notificações push para usuários de App Clips — o iOS concede automaticamente acesso a notificações por 8 horas quando o App Clip é aberto.
O que você precisa
Anchor link to- SDK da Pushwoosh para iOS 7.0.33+
- Xcode 15+
- Um aplicativo Pushwoosh separado para o seu App Clip (ID de pacote diferente = aplicativo separado)
- Um dispositivo real para testes (tokens de push não funcionam no simulador)
1. Crie um aplicativo Pushwoosh
Anchor link toSeu App Clip tem um ID de pacote diferente (por exemplo, com.yourapp.Clip), então ele precisa de um aplicativo Pushwoosh separado com sua própria chave APNs.
- Acesse o Painel de Controle da Pushwoosh
- Crie um novo aplicativo com o ID de pacote do App Clip
- Faça o upload da sua chave de autenticação APNs
- Copie o Código do Aplicativo e o Token da API
2. Crie um alvo (target) de App Clip
Anchor link to- No Xcode: File → New → Target → App Clip
- Adicione a capacidade (capability) de Push Notifications ao alvo do App Clip
Para capturas de tela detalhadas sobre como adicionar capacidades, consulte o guia de integração básica.
3. Adicione os frameworks da Pushwoosh
Anchor link toNo alvo do App Clip, em Build Phases → Link Binary With Libraries, adicione:
PushwooshFramework.frameworkPushwooshCore.frameworkPushwooshBridge.framework
4. Configure o Info.plist
Anchor link to<!-- Pushwoosh --><key>Pushwoosh_APPID</key><string>XXXXX-XXXXX</string><key>Pushwoosh_API_TOKEN</key><string>YOUR_API_TOKEN</string>
<!-- Ephemeral push (8-hour auto-grant, no dialog) --><key>NSAppClip</key><dict> <key>NSAppClipRequestEphemeralUserNotification</key> <true/> <key>NSAppClipRequestLocationConfirmation</key> <false/></dict>
<key>UIBackgroundModes</key><array> <string>remote-notification</string></array>5. Inicialize o SDK
Anchor link toimport SwiftUIimport PushwooshFramework
class AppClipDelegate: NSObject, UIApplicationDelegate, PWMessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { Pushwoosh.configure.delegate = self Pushwoosh.configure.registerForPushNotifications() return true }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Pushwoosh.configure.handlePushRegistration(deviceToken) }
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { Pushwoosh.configure.handlePushRegistrationFailure(error as NSError) }
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Pushwoosh.configure.handlePushReceived(userInfo) completionHandler(.noData) }
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { print("Push opened: \(message.payload ?? [:])") }}
@mainstruct YourAppClip: App { @UIApplicationDelegateAdaptor(AppClipDelegate.self) var appDelegate
var body: some Scene { WindowGroup { ContentView() } }}import UIKitimport PushwooshFramework
@mainclass AppDelegate: UIResponder, UIApplicationDelegate, PWMessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { Pushwoosh.configure.delegate = self Pushwoosh.configure.registerForPushNotifications() return true }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Pushwoosh.configure.handlePushRegistration(deviceToken) }
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { Pushwoosh.configure.handlePushRegistrationFailure(error as NSError) }
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Pushwoosh.configure.handlePushReceived(userInfo) completionHandler(.noData) }
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { print("Push opened: \(message.payload ?? [:])") }}Com permissões efêmeras, o iOS concede acesso a push por 8 horas automaticamente. Se você quiser usar o modo efêmero sem mostrar uma caixa de diálogo de permissão, chame UIApplication.shared.registerForRemoteNotifications() diretamente em vez de Pushwoosh.configure.registerForPushNotifications().
Para solicitar permissão de push permanente (caixa de diálogo padrão), use Pushwoosh.configure.registerForPushNotifications() como mostrado acima.
Permissões de push efêmeras
Anchor link toQuando um usuário abre seu App Clip, o iOS concede acesso a notificações push por 8 horas sem perguntar. Após 8 horas, a permissão expira. O usuário deve reabrir o App Clip para obter mais 8 horas.
Para obter um token de push por 8 horas sem mostrar uma caixa de diálogo de permissão:
UIApplication.shared.registerForRemoteNotifications()Para obter um token de push permanente (mostra a caixa de diálogo de permissão padrão):
Pushwoosh.configure.registerForPushNotifications()Limitações
Anchor link to| Limitação | Detalhes |
|---|---|
| Sem notificações ricas (rich notifications) | App Clips não podem incluir uma Notification Service Extension — sem imagens, sem Communication Notifications |
| Limite de tamanho | 15 MB (iOS 16) / 50 MB (iOS 17+) |
| Janela de push de 8 horas | A permissão efêmera expira após 8 horas |
| Sem processamento em segundo plano | O push silencioso tem funcionalidade limitada |
| ID do Dispositivo | identifierForVendor retorna zeros — o SDK lida com isso automaticamente (7.0.33+) |
Como fica
Anchor link to
Notificação push recebida em um App Clip com permissões efêmeras