Personalizando o SDK do iOS
Integração
Anchor link to- Links diretos (Deep linking)
- Rastreamento de compras no aplicativo
- Notificações push de Geozones
- Criando uma fila de Rich Media
- Reprodução automática de um vídeo enviado em uma Notificação Rica com force touch
- Som de push personalizado
- Push Provisório do iOS
Links diretos (Deep linking)
Anchor link toNo seu arquivo Info.plist, adicione o array URL types com URL Identifier e URL Scheme.
No exemplo abaixo, o URL Scheme é com.pushwoosh e o URL Identifier é promotion.

No seu arquivo App Delegate (geralmente AppDelegate.m para iOS 12 e inferior, ou SceneDelegate.m para iOS 13 e superior), adicione a função de delegate openURL apropriada, conforme descrito no exemplo abaixo. O exemplo verifica a página correta, analisa o valor “id” da URL e abre o PromoPageViewController em resposta.
AppDelegate.swift
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { let components = URLComponents(url: url, resolvingAgainstBaseURL: false) let page = components?.host var promotionId: String?
if page == "promotion" { return }
let items = components?.queryItems ?? []
for item in items { if item.name == "id" { promotionId = item.value } }
//show PromoPageViewController}- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; NSString *page = components.host; NSString *promotionId = nil;
//return if this is not a promotion deep link if(![page isEqualToString:@"promotion"]) return NO;
for(NSURLQueryItem *item in components.queryItems) { if([item.name isEqualToString:@"id"]) promotionId = item.value; }
PromoPageViewController *vc = [[PromoPageViewController alloc] init]; vc.promotionId = promotionId [self presentViewController:vc animated:YES completion:nil];}SceneDelegate.swift
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { guard let urlContext = URLContexts.first else { return }
let components = URLComponents(url: urlContext.url, resolvingAgainstBaseURL: false) let page = components?.host var promotionId: String?
guard page == "promotion" else { return }
let items = components?.queryItems ?? []
for item in items { if item.name == "id" { promotionId = item.value } }
//show PromoPageViewController}- (void)scene:(UIWindowScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts { UIOpenURLContext *urlContext = URLContexts.anyObject; if (!urlContext) { return; }
NSURLComponents *components = [NSURLComponents componentsWithURL:urlContext.URL resolvingAgainstBaseURL:NO]; NSString *page = components.host; NSString *promotionId = nil;
if (![page isEqualToString:@"promotion"]) { return; }
for (NSURLQueryItem *item in components.queryItems) { if ([item.name isEqualToString:@"id"]) { promotionId = item.value; } }
//show PromoPageViewController}Rastreamento de compras no aplicativo
Anchor link toPor padrão, o rastreamento de compras no aplicativo está desativado. Se você deseja rastrear compras no aplicativo ao configurar Jornadas do Cliente (Customer Journeys), defina a flag Pushwoosh_PURCHASE_TRACKING_ENABLED como true no arquivo info.plist. Você pode encontrar uma lista de flags disponíveis na tabela.
Se você deseja rastrear compras no aplicativo manualmente, pode usar o código abaixo.
No método delegate paymentQueue:updatedTransactions:, chame o método sendSKPaymentTransactions do PushManager
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { // In-Apps Tracking Pushwoosh code here Pushwoosh.sharedInstance().sendSKPaymentTransactions(transactions) // the rest of the code, consume transactions, etc }- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
[[PushNotificationManager pushManager] sendSKPaymentTransactions:transactions];
//the rest of the code, consume transactions, etc}
Notificações push de Geozones
Anchor link toAs notificações push de Geozones são encapsuladas em um framework separado, PushwooshGeozones.
- Adicione o PushwooshGeozones.framework ao seu projeto
Para adicionar o PushwooshGeozones.framework ao seu projeto usando um gerenciador de dependências, coloque as seguintes linhas no seu podfile ou cartfile:
pod 'PushwooshXCFramework/Geozones'github "Pushwoosh/pushwoosh-ios-sdk"Se você quiser usar o PushwooshGeozones.xcframework, insira a seguinte URL do Pacote:
PushwooshGeozones-XCFramework
Alternativamente, você pode simplesmente arrastar e soltar o framework em Link Binaries With Libraries nas Build Phases do seu projeto.
- Adicione as seguintes chaves ao seu Info.plist:
- NSLocationWhenInUseUsageDescription – (obrigatório) para que o aplicativo rastreie Geozones apenas enquanto estiver em execução em primeiro plano.
- NSLocationAlwaysAndWhenInUseUsageDescription – (obrigatório) para que o aplicativo rastreie Geozones tanto em primeiro plano quanto em segundo plano e para mostrar um pop-up de diálogo de solicitação de permissão.
- NSLocationAlwaysUsageDescription – (opcional) para que o aplicativo rastreie Geozones o tempo todo; deve ser usado se seu aplicativo for direcionado para iOS 10 e versões anteriores.
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key><string>for app to track Geozones in both conditions and to show a permission request dialog</string><key>NSLocationWhenInUseUsageDescription</key><string>for app to track Geozones only while running in the foreground</string>- Importe o framework
import PushwooshGeozones#import <PushwooshGeozones/PWGeozonesManager.h>- Inicie o rastreamento de Geozones
PWGeozonesManager.shared()?.startLocationTracking()[[PWGeozonesManager sharedManager] startLocationTracking];Exemplo
Anchor link tooverride func viewDidLoad() { super.viewDidLoad()
// Inicie o rastreamento de Geozones quando necessário PWGeozonesManager.shared().startLocationTracking()}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view.
// Inicie o rastreamento de Geozones quando necessário [[PWGeozonesManager sharedManager] startLocationTracking];}Criando uma fila de Rich Media
Anchor link toCaso haja várias páginas de Rich Media para exibir simultaneamente (por exemplo, eventos de gatilho para dois ou mais In-Apps ocorrem em um momento, ou uma página de Rich Media já está sendo exibida no momento em que um evento de gatilho diferente ocorre), você pode configurar uma fila para a exibição de páginas de Rich Media. Para criar uma fila, siga os passos descritos abaixo.
- Crie uma classe que implemente PWRichMediaPresentingDelegate:
@interface ChainedRichMediaPresentingDelegate () <PWRichMediaPresentingDelegate>
@property (nonatomic) NSMutableArray *queue;
@property (nonatomic) BOOL inAppIsPresenting;
@end
@implementation ChainedRichMediaPresentingDelegate
- (instancetype)init { self = [super init];
if (self) { _queue = [NSMutableArray new]; }
return self;}
- (BOOL)richMediaManager:(PWRichMediaManager *)richMediaManager shouldPresentRichMedia:(PWRichMedia *)richMedia { [_queue addObject:richMedia]; return !_inAppIsPresenting;}
- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didPresentRichMedia:(PWRichMedia *)richMedia { _inAppIsPresenting = YES;}
- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didCloseRichMedia:(PWRichMedia *)richMedia { _inAppIsPresenting = NO;
[_queue removeObject:richMedia];
if (_queue.count) { [[PWRichMediaManager sharedManager] presentRichMedia:_queue.firstObject]; }}
- (void)richMediaManager:(PWRichMediaManager *)richMediaManager presentingDidFailForRichMedia:(PWRichMedia *)richMedia withError:(NSError *)error { [self richMediaManager:richMediaManager didCloseRichMedia:richMedia];}
@end2. Defina o delegate:
[PWRichMediaManager sharedManager].delegate = [ChainedRichMediaPresentingDelegate new];Reprodução automática de um vídeo enviado em uma Notificação Rica com force touch
Anchor link toPara fazer com que um vídeo enviado como um anexo de Notificação Rica seja reproduzido automaticamente quando a notificação for expandida sem qualquer interação do usuário, siga os passos abaixo:
- Adicione a Extensão de Conteúdo de Notificação ao seu projeto:
- No Xcode, selecione File > New > Target.
- Escolha Notification Content Extension.
- Atribua um nome e conclua a configuração.

Se solicitado com a mensagem “Activate scheme”, escolha Cancel.

- Ajuste as propriedades e métodos na Extensão de Conteúdo da seguinte forma:
import UIKitimport UserNotificationsimport UserNotificationsUIimport AVKit
class NotificationViewController: UIViewController, UNNotificationContentExtension { var playerController: AVPlayerViewController! @IBOutlet weak var playerBackgroundView: UIView!
override func viewDidLoad() { super.viewDidLoad() // Faça qualquer inicialização de interface necessária aqui. }
func didReceive(_ notification: UNNotification) { let attachment = notification.request.content.attachments.first
playerController = AVPlayerViewController() // Defina a altura programaticamente // preferredContentSize.height = 250
if let url = attachment?.url { setupVideoPlayer(url: url) } else { print("No valid URL...") } }
private func setupVideoPlayer(url: URL) { guard let playerController = self.playerController else { return } let player = AVPlayer(url: url) playerController.player = player playerController.view.frame = self.playerBackgroundView.bounds playerBackgroundView.addSubview(playerController.view) addChild(playerController) playerController.didMove(toParent: self) player.play() }- Incorpore uma UIView no MainInterface.storyboard:

- Vincule o IBOutlet playerBackgroundView com a UIView que você acabou de adicionar:

- Atualize o arquivo info.plist com a seguinte entrada:
UNNotificationExtensionUserInteractionEnabled = true
Para anexar um vídeo à sua notificação, insira a URL de um vídeo no campo Media Attachment no Painel de Controle:

Ao enviar uma notificação via solicitação da API /createMessage, inclua a URL no parâmetro “ios_attachment” e certifique-se de que a flag “mutable-content” esteja definida como `1`.
Som de push personalizado
Anchor link toPara reproduzir um som personalizado ao receber uma notificação push, primeiro coloque o arquivo de áudio na pasta raiz do seu projeto.

Em seguida, especifique o nome do arquivo de som nos parâmetros de push – preencha o campo Sound das configurações específicas do iOS da sua mensagem ou especifique o nome do arquivo como um valor para o parâmetro “ios_sound” da solicitação da API createMessage.
O arquivo de áudio para som personalizado do iOS deve estar em um dos seguintes formatos: .aif, .caf, .wav. Certifique-se de especificar o formato no nome do arquivo; caso contrário, ele será ignorado pelo SDK do iOS da Pushwoosh.
Push Provisório do iOS
Anchor link toComo funciona
Anchor link toAs notificações push provisórias aparecem silenciosamente na Central de Notificações do usuário, mas não na tela de bloqueio. Este tipo de push não precisa ser permitido explicitamente por um usuário: você pode começar a enviá-los assim que um usuário instalar e iniciar seu aplicativo.
No entanto, os usuários ainda podem se inscrever para suas notificações push proeminentes: ao abrir o Push Provisório, eles têm duas opções para escolher sua experiência – manter os pushes na Central de Notificações sem alertas e sons ou permitir que você envie pushes de forma proeminente para que apareçam na tela de bloqueio.
Os Pushes Provisórios são projetados para permitir que os usuários tomem decisões informadas sobre se gostariam de receber notificações do seu aplicativo. Como a solicitação de inscrição nativa da APN é mostrada aos usuários apenas uma vez e para se inscrever mais tarde, eles devem ir para as configurações do sistema do telefone, e alguns usuários podem não se inscrever por não saberem o valor que recebem com seus pushes. Os Pushes Provisórios dão aos usuários esse entendimento: eles podem ver qual conteúdo você entrega em notificações push e decidir se precisam ser notificados sobre esse conteúdo de forma proeminente.
Como implementar
Anchor link to1. Integre o SDK do iOS da Pushwoosh seguindo o guia.
2. Adicione a seguinte string ao AppDelegate do seu projeto antes de chamar o método registerForPushNotifications():
if #available(iOS 12.0, *) { Pushwoosh.sharedInstance().additionalAuthorizationOptions = UNAuthorizationOptions.provisional}if (@available(iOS 12.0, *)) { [Pushwoosh sharedInstance].additionalAuthorizationOptions = UNAuthorizationOptionProvisional;}É isso! Os usuários do aplicativo receberão mensagens diretamente em sua Central de Notificações assim que instalarem o aplicativo.
Compartilhe 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 ideias conosco através deste formulário.