Come Impostare le Notifiche Push dell'App iOS con PushEngage

Ora puoi implementare le notifiche push per la tua applicazione iOS utilizzando il nostro SDK per app iOS. Avrai bisogno dell'aiuto del tuo sviluppatore poiché si tratterebbe di un'integrazione una tantum prima di poter inviare loro notifiche push utilizzando la dashboard di PushEngage.

Prima di iniziare

  • Avrai bisogno di Xcode installato sul tuo sistema.
  • Un account sviluppatore valido e un ID app sono configurati sul portale sviluppatori Apple.

Seguiremo questi passaggi per abilitare le notifiche push per la tua applicazione iOS.

Configurazione della tua app

Abilita notifiche remote

1. Apri il tuo progetto Xcode e seleziona il progetto principale nel Navigatore Progetto. Scegli il tuo target principale dell'app.

2. Vai a Firma e funzionalità. Assicurati che la funzionalità Modalità in background sia aggiunta. In caso contrario, aggiungila facendo clic sul pulsante “+ Funzionalità”.

3. Allo stesso modo, assicurati che la funzionalità Notifiche push sia aggiunta. In caso contrario, aggiungila utilizzando il pulsante “+ Funzionalità”.

Se la funzionalità Notifiche push non è visibile in Xcode. Devi seguire i passaggi seguenti:

1. Vai al tuo account sviluppatore Apple.

2. Naviga a Certificates, Identifiers & Profiles.

3. Seleziona l'identificatore della tua App. Modifica la configurazione del tuo App ID e assicurati che Push Notifications sia abilitato.

4. Torna a Xcode e prova ad aggiungere nuovamente la funzionalità “Push Notifications”.

Abilita modalità in background

1. Nel tuo progetto Xcode, naviga a Signing & Capabilities.

2. All'interno di Background Modes, abilita sia Remote notifications che Background Fetch.

Questo passaggio assicura che la tua app possa gestire in modo efficiente le notifiche remote e i recuperi in background.

Qui è disponibile la guida per la creazione del tuo certificato APNs.

Integrazione dell'SDK iOS di PushEngage

L'SDK iOS di PushEngage è disponibile come pacchetto Swift e come pod CocoaPods. Ti chiediamo di esaminare entrambi i metodi, ma di utilizzarne solo uno durante il completamento della configurazione.

Integrazione dell'SDK iOS di PushEngage con SPM

Per integrare l'SDK iOS di PushEngage utilizzando Swift Package Manager, segui questi passaggi:

  1. Apri Xcode e naviga al tuo progetto. Seleziona la scheda delle dipendenze del pacchetto. Fai clic sul pulsante +.
  1. Incolla l'URL https://github.com/awesomemotive/pushengage-ios-sdk nella barra di ricerca. Fai clic su “Add Package”.
  1. Seleziona il tuo target principale dell'app sotto “Add to Target” e fai clic su “Add Package”.

Integrazione dell'SDK iOS di PushEngage con CocoaPods

Per integrare l'SDK iOS di PushEngage utilizzando CocoaPods, devi seguire questi passaggi:

Se CocoaPods non è installato, chiudi il tuo progetto Xcode corrente ed esegui il seguente comando nella directory principale del tuo progetto

sudo gem install cocoapods

Esegui il seguente comando per inizializzare un Podfile nel tuo progetto

pod init

Apri il Podfile appena creato utilizzando un editor di testo o seguendo il comando nel tuo terminale nella directory principale del progetto.

open Podfile

Aggiungi la dipendenza PushEngage sotto il target del tuo progetto. Assicurati che il tuo Podfile sia simile all'esempio seguente

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'YourProjectName' do
  # Add PushEngage SDK dependency
  pod 'PushEngage'
end

Salva il Podfile ed esegui i seguenti comandi nel terminale.

pod repo update
pod install

Apri il file <project-name>.xcworkspace appena creato in Xcode.

Inizializzazione dell'SDK iOS di PushEngage

Una volta integrato l'SDK, dovremo inizializzare l'SDK iOS nel tuo AppDelegate.

Usando il linguaggio Swift, ecco come puoi farlo

import PushEngage
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    override init() {
        super.init()
        PushEngage.swizzleInjection(isEnabled: true)
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
       // Set your PushEngage App ID (replace       "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD" with your actual App ID)
        PushEngage.setAppId(id: "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD")
        // Start PushEngage initial info
        PushEngage.setInitialInfo(for: application, with: launchOptions)
        // Enable logs for debugging (optional)
        PushEngage.enableLogs = true
        return true
    }
}

Usando il linguaggio Objective-C, ecco come puoi farlo

#import "AppDelegate.h"
@import PushEngage;
@implementation AppDelegate

- (instancetype)init {
    self = [super init];
    if (self) {
       [PushEngage swizzleInjectionWithIsEnabled:YES];
    }
    return self;
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Set your PushEngage App ID (replace "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD" with your actual App ID)
    [PushEngage setAppIDWithId:@"APP_ID_FROM_PUSH_ENGAGE_DASHBOARD"];
    // Set initial info
    [PushEngage setInitialInfoFor:application with:launchOptions];
    // Enable logs for debugging (optional)
    [PushEngage setEnableLogs:YES];
    return YES;
}

@end

A volte, quando si utilizza SwiftUI, l'AppDelegate potrebbe non essere disponibile per impostazione predefinita. In questi casi, puoi inizializzare l'SDK PushEngage nel tuo file App principale. Ecco un esempio in SwiftUI

import SwiftUI
import PushEngage

@main
struct PEDemoApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

class AppDelegate: NSObject, UIApplicationDelegate {
    
    override init() {
        super.init()
        PushEngage.swizzleInjection(isEnabled: true)
    }
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        PushEngage.setAppID(id: "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD")
        PushEngage.setIntialInfo(for: application,
                                             with: launchOptions)
        
        PushEngage.enableLogs = true
        return true
    }
}

Nota: Durante lo sviluppo della tua applicazione, potresti trovare utile abilitare i log dall'SDK PushEngage per scopi di debug. Tuttavia, è essenziale disabilitare i log nella build di produzione per evitare di esporre informazioni sensibili.

Creazione dell'estensione del servizio di notifica

La Notification Service Extension migliora la capacità della tua app iOS di ricevere notifiche. Viene utilizzata per modificare il contenuto della notifica o per recuperare/elaborare dati alla ricezione della notifica. Puoi seguire i passaggi seguenti per creare una Notification Service Extension:

1. Apri Xcode e naviga al tuo progetto. Scegli File » New » Target dal menu.

2. Nella finestra di selezione del template, scegli Notification Service Extension e fai clic su Next.

3. Fornisci un nome per la tua estensione, ad esempio, PushEngageNotificationServiceExtension, e fai clic su Fine.

4. Al termine della creazione della Notificaton Service Extension, potrebbe esserti richiesto di attivarla. Non attivarla immediatamente.

L'attivazione dell'estensione sposterebbe il focus del debug di Xcode dalla tua app all'estensione. Se la attivi per errore, non preoccuparti; puoi tornare al debug della tua app all'interno di Xcode.

Inizializzazione dell'SDK di PushEngage per l'estensione del servizio di notifica

Per garantire il corretto funzionamento del SDK PushEngage nella tua Notificaton Service Extension iOS, devi seguire questi passaggi:

1. Apri il Podfile associato al tuo progetto.

2. Quindi devi aggiungere la Dipendenza. Inserisci il seguente snippet di codice nel tuo Podfile:

target 'Your_Main_Application_Target' do
  use_frameworks!
  pod 'PushEngage'
end

target 'Your_Notification_Service_Extension_Target' do
  use_frameworks!
  pod 'PushEngageExtension'
end

3. Esegui i seguenti comandi nel tuo terminale all'interno della directory principale del tuo progetto:

pod repo update
pod install

4. Nella tua target di Notificaton Service Extension, importa il framework PushEngage e aggiungi il codice di inizializzazione necessario. Ecco come puoi farlo.

Utilizzo di Swift

import UserNotifications
import PushEngageExtension

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?
    var request: UNNotificationRequest?

    override func didReceive(_ request: UNNotificationRequest,
                             withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.request = request
        self.contentHandler = contentHandler
        self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestContent = bestAttemptContent {
            PushEngageExtension.didReceiveNotificationExtensionRequest(request, bestContentHandler: bestContent)
            contentHandler(bestContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Called just before the extension will be terminated by the system.
        // Use this as an opportunity to deliver your "best attempt" at modified
        // content, otherwise the original push payload will be used.
        if let contentHandler = contentHandler, let request = request, let bestAttemptContent = bestAttemptContent {
            guard let content = PushEngageExtension.serviceExtensionTimeWillExpire(request, content: bestAttemptContent) else {
                contentHandler(bestAttemptContent)
                return
            }
            contentHandler(content)
        }
    }
}

Utilizzo di Objective-C

#import "NotificationService.h"
@import PushEngageExtension;

@interface NotificationService ()

@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
@property (nonatomic, strong) UNNotificationRequest *request;

@end

@implementation NotificationService

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request
                   withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.request = request;
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    if (self.bestAttemptContent) {
        [PushEngageExtension didReceiveNotificationExtensionRequest:request
                                                 bestContentHandler:self.bestAttemptContent];
        contentHandler(self.bestAttemptContent);
    }
}

- (void)serviceExtensionTimeWillExpire {
    if (self.contentHandler && self.request && self.bestAttemptContent) {
        UNNotificationContent *content = [PushEngageExtension serviceExtensionTimeWillExpire:self.request
                                                                                     content:self.bestAttemptContent];
        if (content) {
            self.contentHandler(content);
            return;
        }
    }
    self.contentHandler(self.bestAttemptContent);
}

@end

Creazione dell'estensione del contenuto di notifica

Per migliorare il modo in cui aggiungere un'interfaccia utente personalizzata, dovrai creare una Notificaton Content Extension. Segui i passaggi seguenti per configurare l'estensione:

1. In Xcode, vai su File » Nuovo » Target.

2. Seleziona Notificaton Content Extension e fai clic su Avanti.

3. Non selezionare “Attiva” nella finestra di dialogo che appare dopo aver fatto clic su Fine. Annullando, Xcode continuerà a eseguire il debug della tua app invece dell'estensione. Se la attivi accidentalmente, torna al debug della tua app all'interno di Xcode (accanto al pulsante di esecuzione).

4. Nel navigatore di progetto, seleziona la directory principale del progetto e seleziona il target NotificatonContentExtension nel progetto dall'elenco dei target creato al passaggio n. 2.

5. Imposta il Deployment Target su iOS 10 o versioni successive, che è la versione di iOS in cui Apple ha rilasciato il supporto per questa estensione. 

Inizializzazione dell'SDK di PushEngage per l'estensione del contenuto di notifica

Per garantire il corretto funzionamento del SDK PushEngage nella tua Notificaton Content Extension iOS, devi seguire questi passaggi:

1. Apri il Podfile associato al tuo progetto.

2. Aggiungi Dipendenza, inserisci il seguente snippet di codice nel tuo Podfile:

target 'Your_Main_Application_Target' do
  pod 'PushEngage'
  target 'Your_Notification_Content_Extension' do
    pod 'PushEngageExtension'
  end
end

3. Esegui i seguenti comandi nel tuo terminale all'interno della directory principale del tuo progetto:

pod repo update

pod install

4. Nella tua target di Notificaton Content Extension, importa il framework PushEngage e aggiungi il codice di inizializzazione necessario. Ecco come puoi farlo con alcuni esempi di elementi UI:

Utilizzo di Swift

import UIKit
import UserNotifications
import UserNotificationsUI
import SwiftUI
import PushEngageExtension

@available(iOSApplicationExtension 13.0, *)
class NotificationViewController: UIViewController, UNNotificationContentExtension {

    fileprivate var hostingView: UIHostingController<ContentView>?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .white
    }

    func didReceive(_ notification: UNNotification) {
        if notification.request.content.categoryIdentifier == "your_identifier" {
            let payLoad = PushEngageExtension.getCustomUIPayLoad(for: notification.request)
            // Pass the payload to your custom SwiftUI view
            let view = ContentView(payLoadInfo: payLoad)
            hostingView = UIHostingController(rootView: view)
            if let hostingView = hostingView {
                addChild(hostingView)
                hostingView.view.translatesAutoresizingMaskIntoConstraints = false
                self.view.addSubview(hostingView.view)
                NSLayoutConstraint.activate([
                    hostingView.view.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
                    hostingView.view.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
                    hostingView.view.topAnchor.constraint(equalTo: self.view.topAnchor),
                    hostingView.view.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
                ])
            }
        }
    }
}

Objective-C:

#import "NotificationViewController.h"
#import <UserNotifications/UserNotifications.h>
#import <UserNotificationsUI/UserNotificationsUI.h>

@import PushEngageExtension;
@import UIKit;

@interface NotificationViewController () <UNNotificationContentExtension>

@property IBOutlet UILabel *label;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIButton *firstButton;
@property (weak, nonatomic) IBOutlet UIButton *secondButton;

@end

@implementation NotificationViewController

- (IBAction)firstbuttonAction:(id)sender {
    // do what action you want to perform.
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any required interface initialization here.
}

- (void)didReceiveNotification:(UNNotification *)notification {

    NotificationViewController * __block blockSelf = self;
    CustomUIModel *object = [PushEngageExtension getCustomUIPayLoadFor:notification.request];
    dispatch_async(dispatch_get_main_queue(), ^{
        blockSelf.label.text = object.title;
        blockSelf.imageView.image = object.image;
        [blockSelf.firstButton setTitle:object.buttons.firstObject.text forState:UIControlStateNormal];
        [blockSelf.secondButton setTitle:object.buttons.lastObject.text forState:UIControlStateNormal];
        blockSelf = NULL;
    });
}

@end

Aggiungi gruppi di app

I gruppi di app sono essenziali per la comunicazione tra l'app principale, l'estensione di notifica e l'estensione di contenuto. Puoi seguire questi passaggi per aggiungere gruppi di app al tuo progetto iOS:

Se hai un gruppo di app esistente e vuoi usarne solo uno, salta al passaggio n. 5.

1. Nel tuo progetto Xcode, nel navigatore di progetto, seleziona la directory principale del progetto e seleziona il target principale dell'app.

2. Naviga alla scheda Firma e funzionalità.

3. Fai clic sul pulsante “+ Funzionalità” e seleziona Gruppi di app dall'elenco.

4. Fai clic sul pulsante + per aggiungere un Gruppo di app. Aggiungi un nome univoco al tuo Gruppo di app e fai clic su OK.

5. Nell'area dell'editor principale, seleziona il target principale della tua app e crea un gruppo di app. Fornisci il nome del gruppo nella tua Info.plist dell'applicazione con la chiave PushEngage_App_Group_Key.

6. Aggiungere la stessa chiave e lo stesso valore nel file Info.plist della Notification Service Extension.

7. Selezionare lo stesso gruppo di app nel Target dell'Applicazione Principale e nella YourNotificationServiceExtension.

Assicurati di scegliere la tua estensione del servizio di notifica nel passaggio precedente.

Deep Linking

Il deep linking consente ai tuoi abbonati di navigare direttamente a una schermata specifica all'interno dell'applicazione o a una pagina web designata quando interagiscono con le notifiche push. Per impostazione predefinita, se fornisci un URL valido, l'abbonato verrà reindirizzato a quella pagina web.

Gestione degli URL Web:

  • Fornire PushEngageInAppEnabled su YES in Info.plist, quindi l'URL verrà caricato all'interno dell'applicazione utilizzando WKWebview.
  • Fornire PushEngageInAppEnabled su NO in Info.plist, se si desidera che il proprio abbonato venga reindirizzato a Safari per caricare l'URL. 
  • Fornire PushEngageAutoHandleDeeplinkURL su YES in Info.plist, quindi l'SDK gestirà il deep link in base alla configurazione di PushEngageInAppEnabled.
  • Fornire PushEngageAutoHandleDeeplinkURL su NO in Info.plist, quindi il controllo della gestione del deep link verrà dato all'app client dall'SDK.
  • Se il deep link non è un URL valido, è necessario configurare la navigazione utilizzando setNotificationOpenHandler in AppDelegate all'interno del metodo didFinishLaunchingWithOptions. Ciò consente di navigare a una schermata specifica in base alla stringa fornita, come mostrato di seguito. Se non configurato, l'SDK aprirà semplicemente l'applicazione.
ios-deeplink

Utilizzo di Swift:

class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    
    
    override init() {
        super.init()
        // method Swizzling enabled for the application.
        PushEngage.swizzleInjection(isEnabled: true)
    }

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

     PushEngage.setAppID(id: "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD")
     PushEngage.setInitialInfo(for: application,with: launchOptions)
        
        
     // Notification open handler.
     // deep linking screen
     // here ShoesScreen and pepay are example deep link texts
     PushEngage.setNotificationOpenHandler { (result) in
            //replace this block with your own handling
            let additionData = result.notification.additionalData
            if result.notificationAction.actionID == "ShoesScreen" {
                print(additionData ?? [])
                let storyBoard = UIStoryboard(name: "Main", bundle: .main)
                let viewController = storyBoard.instantiateViewController(withIdentifier: "SportViewController")
                let navcontroller = application.windows.first?.rootViewController as? UINavigationController
                navcontroller?.popToRootViewController(animated: true)
                navcontroller?.pushViewController(viewController, animated: true)
            } else if result.notificationAction.actionID == "SalesScreen" {
                let storyBoard = UIStoryboard(name: "Main", bundle: .main)
                let viewController = storyBoard.instantiateViewController(withIdentifier: "NotificationApiTestViewconttoller")
                let navcontroller = application.windows.first?.rootViewController as? UINavigationController
                navcontroller?.popToRootViewController(animated: true)
                navcontroller?.pushViewController(viewController, animated: true)
            } else if result.notificationAction.actionID == "pepay" {
                let storyBoard = UIStoryboard(name: "Main", bundle: .main)
                let viewController = storyBoard.instantiateViewController(withIdentifier: "PEPay")
                let navcontroller = application.windows.first?.rootViewController as? UINavigationController
                navcontroller?.popToRootViewController(animated: true)
                navcontroller?.pushViewController(viewController, animated: true)
            }
        }
        
        PushEngage.enableLogs = true
        
        return true
    }
}

Utilizzo di Objective-C:

@implementation AppDelegate


- (instancetype)init
{
    self = [super init];
    if (self) {
       [PushEngage swizzleInjectionWithIsEnabled: YES];
    }
    return self;
}

typedef void (^PEnotificationOpenHandler)(PENotificationOpenResult * nonnull);

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    UNUserNotificationCenter.currentNotificationCenter.delegate = self;
    PEnotificationOpenHandler actionHandler = ^void(PENotificationOpenResult *result) {
       //replace this block with your own handling
        if ([result.notificationAction.actionID isEqualToString: @"ShoesScreen"]) {
            AddToCart *controller = [AddToCart new];
            UINavigationController *navigationController = (UINavigationController *) application.windows.firstObject.rootViewController;
            [navigationController popToRootViewControllerAnimated:YES];
            [navigationController pushViewController:controller animated:YES];
        } else if ([result.notificationAction.actionID isEqualToString: @"SalesScreen"]) {
            SportsViewcontroller *controller = [SportsViewcontroller new];
            UINavigationController *navigationController = (UINavigationController *) application.windows.firstObject.rootViewController;
            [navigationController popToRootViewControllerAnimated:YES];
            [navigationController pushViewController:controller animated:YES];
        }
    };
    application.applicationIconBadgeNumber = 0;
    [PushEngage setAppIDWithId:@"APP_ID_FROM_PUSH_ENGAGE_DASHBOARD"];
    [PushEngage setInitialInfoFor:application with:launchOptions];
    [PushEngage setNotificationOpenHandlerWithBlock:actionHandler];
    [PushEngage setEnableLogs:true];
    return YES;
}
@end

Gestione delle notifiche in primo piano

Quando le notifiche arrivano in primo piano, devi decidere se mostrare o meno l'avviso di notifica al dispositivo. Per gestire le notifiche in primo piano, usa setNotificationWillShowInForgroundHandler

Se il blocco di completamento non viene chiamato da te, l'SDK chiamerà il blocco di completamento dopo 29 secondi. In ogni caso, notifica silenziosa o di avviso quando l'applicazione è in modalità primo piano.

Utilizzo di Swift

class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    
    
    override init() {
        super.init()
        // method Swizzling enabled for the application.
       PushEngage.swizzleInjection(isEnabled: true)
    }

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        PushEngage.setAppID(id: "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD")
        PushEngage.setInitialInfo(for: application, with: launchOptions)
        
        // Notification handler when notification deliver's and app is in foreground.
        
        PushEngage.setNotificationWillShowInForgroundHandler { notification, completion in
            if notification.contentAvailable == 1 {
                // in case the developer failed to set the completion handler. After 29 sec the handler will call from the SDK after 29 sec.
                completion(nil)
            } else {
                completion(notification)
            }
        }
        
        PushEngage.enableLogs = true
        
        return true
    }
}


Utilizzo di Objective-C

@implementation AppDelegate


- (instancetype)init
{
    self = [super init];
    if (self) {
       [PushEngage swizzleInjectionWithIsEnabled: YES];
    }
    return self;
}
// please create this handlers 
typedef void (^ _Nonnull PENotificationDisplayHandler)(PENotification * _Nullable);

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    UNUserNotificationCenter.currentNotificationCenter.delegate = self;
    
    [PushEngage setNotificationWillShowInForgroundHandlerWithBlock:^(PENotification * _Nonnull notification, PENotificationDisplayHandler completion) {
        if (notification.contentAvailable == 1) {
            completion(nil);
        } else {
            completion(notification);
        }
    }];
    [PushEngage setAppIDWithId:@"APP_ID_FROM_PUSH_ENGAGE_DASHBOARD"];
    [PushEngage setInitialInfoFor:application with:launchOptions];
    [PushEngage setEnableLogs:true];
    return YES;
}
@end

Risoluzione dei problemi

Risoluzione dei problemi di compilazione relativi al sandboxing

Problema:

Stai riscontrando problemi di compilazione relativi al sandboxing.

Soluzione:

  • Apri il tuo progetto in Xcode.
  • Naviga in Build Settings.
  • Individua l'opzione User Script Sandboxing.
  • Impostala su No.
Problemi con il Method Swizzling negli SDK Firebase e PushEngage

Problema:

Stai utilizzando sia l'SDK Firebase che l'SDK PushEngage con il method swizzling abilitato per entrambi, e ciò sta causando problemi.

Soluzione:

Disabilita il method swizzling per l'SDK PushEngage e segui i passaggi manuali per la gestione dei metodi PushEngage. Puoi trovare istruzioni dettagliate su:
Documentazione SDK iOS PushEngage

Se desideri esplorare ulteriormente le capacità dell'SDK iOS, puoi consultare la nostra documentazione API dettagliata.

Se riscontri problemi, ti preghiamo di contattarci cliccando qui. Il nostro team di supporto sarà in grado di aiutarti.

Ancora bloccato? Come possiamo aiutarti?
Ultimo aggiornamento il 9 luglio 2026

Coinvolgi e fidelizza i visitatori dopo che hanno lasciato il tuo sito web

Aumenta il valore di ogni visita web con notifiche push difficili da ignorare.

  • Piano gratuito per sempre
  • Configurazione semplice
  • Supporto a 5 stelle