Personalización del SDK de iOS
Integración
Anchor link to- Enlaces profundos
- Seguimiento de compras in-app
- Notificaciones push de Geozonas
- Creación de una cola de Rich Media
- Reproducción automática de un video enviado en una Notificación Enriquecida con force touch
- Sonido de push personalizado
- Push Provisional de iOS
Enlaces profundos
Anchor link toEn su archivo Info.plist agregue el array URL types con un URL Identifier y un URL Scheme.
En el ejemplo siguiente, el URL Scheme es com.pushwoosh y el URL Identifier es promotion.

En su archivo App Delegate (generalmente AppDelegate.m para iOS 12 y versiones anteriores, o SceneDelegate.m para iOS 13 y versiones posteriores), agregue la función de delegado openURL apropiada como se describe en el ejemplo a continuación. El ejemplo comprueba la página correcta, analiza el valor “id” de la URL y abre PromoPageViewController en respuesta.
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}Seguimiento de compras in-app
Anchor link toPor defecto, el seguimiento de las compras in-app está deshabilitado. Si desea realizar un seguimiento de las compras in-app al configurar Customer Journeys, establezca el indicador Pushwoosh_PURCHASE_TRACKING_ENABLED en true en el archivo info.plist. Puede encontrar una lista de los indicadores disponibles en la tabla.
Si desea realizar un seguimiento manual de las compras in-app, puede utilizar el siguiente código.
En el método delegado paymentQueue:updatedTransactions:, llame al método sendSKPaymentTransactions de 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}
Notificaciones push de Geozonas
Anchor link toLas notificaciones push de Geozonas están encapsuladas en un framework separado PushwooshGeozones.
- Agregue PushwooshGeozones.framework a su proyecto
Para agregar PushwooshGeozones.framework a su proyecto utilizando un gestor de dependencias, coloque las siguientes
líneas en su podfile o cartfile:
pod 'PushwooshXCFramework/Geozones'github "Pushwoosh/pushwoosh-ios-sdk"Si desea utilizar PushwooshGeozones.xcframework, ingrese la siguiente URL del paquete:
PushwooshGeozones-XCFramework
Alternativamente, puede simplemente arrastrar y soltar el framework en Link Binaries With Libraries en las Build Phases de su proyecto.
- Agregue las siguientes claves a su Info.plist:
- NSLocationWhenInUseUsageDescription – (requerido) para que la aplicación rastree Geozonas solo mientras se ejecuta en primer plano.
- NSLocationAlwaysAndWhenInUseUsageDescription – (requerido) para que la aplicación rastree Geozonas tanto en primer plano como en segundo plano y para mostrar un cuadro de diálogo de solicitud de permiso emergente.
- NSLocationAlwaysUsageDescription – (opcional) para que la aplicación rastree Geozonas en todo momento; debe usarse si su aplicación se dirige a iOS 10 y versiones 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 el framework
import PushwooshGeozones#import <PushwooshGeozones/PWGeozonesManager.h>- Inicie el seguimiento de Geozonas
PWGeozonesManager.shared()?.startLocationTracking()[[PWGeozonesManager sharedManager] startLocationTracking];Ejemplo
Anchor link tooverride func viewDidLoad() { super.viewDidLoad()
// Iniciar el seguimiento de Geozonas cuando sea necesario PWGeozonesManager.shared().startLocationTracking()}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view.
// Iniciar el seguimiento de Geozonas cuando sea necesario [[PWGeozonesManager sharedManager] startLocationTracking];}Creación de una cola de Rich Media
Anchor link toEn caso de que haya varias páginas de Rich Media para mostrar simultáneamente (por ejemplo, los eventos de activación para dos o más In-Apps tienen lugar en un momento, o una página de Rich Media ya se está mostrando en el momento en que ocurre un evento de activación diferente), puede configurar una cola para la visualización de páginas de Rich Media. Para crear una cola, siga los pasos que se describen a continuación.
- Cree una clase 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. Establezca el delegado:
[PWRichMediaManager sharedManager].delegate = [ChainedRichMediaPresentingDelegate new];Reproducción automática de un video enviado en una Notificación Enriquecida con force touch
Anchor link toPara que un video enviado como un adjunto de Notificación Enriquecida se reproduzca automáticamente cuando la notificación se expande sin ninguna interacción del usuario, siga los pasos a continuación:
- Agregue la Extensión de Contenido de Notificación a su proyecto:
- En Xcode, seleccione File > New > Target.
- Elija Notification Content Extension.
- Asígnele un nombre y complete la configuración.

Si se le solicita el mensaje “Activar esquema”, elija Cancelar.

- Ajuste las propiedades y métodos en la Extensión de Contenido de la siguiente manera:
import UIKitimport UserNotificationsimport UserNotificationsUIimport AVKit
class NotificationViewController: UIViewController, UNNotificationContentExtension { var playerController: AVPlayerViewController! @IBOutlet weak var playerBackgroundView: UIView!
override func viewDidLoad() { super.viewDidLoad() // Realice aquí cualquier inicialización de interfaz requerida. }
func didReceive(_ notification: UNNotification) { let attachment = notification.request.content.attachments.first
playerController = AVPlayerViewController() // Establecer la altura programáticamente // 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 una UIView en MainInterface.storyboard:

- Vincule el IBOutlet playerBackgroundView con la UIView que acaba de agregar:

- Actualice el archivo info.plist con la siguiente entrada:
UNNotificationExtensionUserInteractionEnabled = true
Para adjuntar un video a su notificación, ingrese la URL de un video en el campo Adjunto de Medios en el Panel de Control:

Al enviar una notificación a través de la solicitud de la API /createMessage, incluya la URL en el parámetro “ios_attachment” y asegúrese de que el indicador “mutable-content” esté establecido en `1`.
Sonido de push personalizado
Anchor link toPara reproducir un sonido personalizado al recibir una notificación push, primero coloque el archivo de audio en la carpeta raíz de su proyecto.

Luego, especifique el nombre del archivo de sonido en los parámetros de push: complete el campo Sonido de la configuración específica de iOS de su mensaje o especifique el nombre del archivo como un valor para el parámetro “ios_sound” de la solicitud de la API createMessage.
El archivo de audio para el sonido personalizado de iOS debe estar en uno de los siguientes formatos: .aif, .caf, .wav. Asegúrese de especificar el formato en el nombre del archivo; de lo contrario, el SDK de iOS de Pushwoosh lo ignorará.
Push Provisional de iOS
Anchor link toCómo funciona
Anchor link toLas notificaciones push provisionales aparecen silenciosamente en el Centro de Notificaciones del usuario, pero no en la pantalla de bloqueo. Este tipo de pushes no necesita ser permitido explícitamente por un usuario: puede comenzar a enviarlos tan pronto como un usuario instale e inicie su aplicación.
Sin embargo, los usuarios aún pueden suscribirse a sus notificaciones push destacadas: al abrir el Push Provisional, tienen dos opciones para elegir su experiencia: mantener los pushes en el Centro de Notificaciones sin alertas ni sonidos, o permitirle enviar pushes de forma destacada para que aparezcan en la pantalla de bloqueo.
Los Pushes Provisionales están diseñados para permitir que los usuarios tomen decisiones informadas sobre si les gustaría recibir notificaciones de su aplicación. Como la solicitud de suscripción nativa de APN se muestra a los usuarios solo una vez y para suscribirse más tarde, deben ir a la configuración del sistema de su teléfono, y algunos usuarios podrían no suscribirse ya que no son conscientes del valor que obtienen con sus pushes. Los Pushes Provisionales brindan a los usuarios esta comprensión: pueden ver qué contenido entrega en las notificaciones push y decidir si necesitan ser notificados sobre este contenido de manera destacada.
Cómo implementar
Anchor link to1. Integre el SDK de iOS de Pushwoosh siguiendo la guía.
2. Agregue la siguiente cadena al AppDelegate de su proyecto antes de llamar al método registerForPushNotifications():
if #available(iOS 12.0, *) { Pushwoosh.sharedInstance().additionalAuthorizationOptions = UNAuthorizationOptions.provisional}if (@available(iOS 12.0, *)) { [Pushwoosh sharedInstance].additionalAuthorizationOptions = UNAuthorizationOptionProvisional;}¡Eso es todo! Los usuarios de la aplicación recibirán mensajes directamente en su Centro de Notificaciones una vez que instalen la aplicación.
Comparta sus comentarios con nosotros
Anchor link toSus comentarios nos ayudan a crear una mejor experiencia, por lo que nos encantaría saber de usted si tiene algún problema durante el proceso de integración del SDK. Si encuentra alguna dificultad, no dude en compartir sus pensamientos con nosotros a través de este formulario.