Como Configurar Notificações Push de Aplicações iOS com PushEngage

Pode agora implementar notificações push para a sua aplicação iOS utilizando o nosso SDK de Aplicações iOS. Precisaria da ajuda do seu programador, pois seria uma integração única antes de poder enviar notificações push utilizando o painel PushEngage.

Antes de Começar

  • Precisará de ter o Xcode instalado no seu sistema.
  • Uma conta de programador válida e um ID de Aplicação estão configurados no Portal de Programador Apple.

Seguiremos estes passos para ativar as notificações push para a sua Aplicação iOS.

Configurar a Sua Aplicação

Ativar Notificações Remotas

1. Abra o seu projeto Xcode e selecione o projeto raiz no Navegador de Projetos. Escolha o seu principal alvo de aplicação.

2. Navegue para Assinatura & Capacidades. Certifique-se de que a capacidade Modos de Segundo Plano está adicionada. Se não estiver, adicione-a clicando no botão “+ Capacidade”.

3. Da mesma forma, certifique-se de que a capacidade Notificações Push está adicionada. Se não estiver, adicione-a utilizando o botão “+ Capacidade”.

Se a capacidade Notificações Push não estiver visível no Xcode. Precisa de seguir os passos abaixo:

1. Vá à sua conta de Programador Apple.

2. Navegue para Certificados, Identificadores & Perfis.

3. Selecione o identificador da sua Aplicação. Edite a configuração do seu ID de Aplicação e certifique-se de que Notificações Push está ativado.

4. Regresse ao Xcode e tente adicionar a capacidade “Notificações Push” novamente.

Ativar Modos de Segundo Plano

1. No seu projeto Xcode, navegue para Assinatura & Capacidades.

2. Dentro de Modos de Segundo Plano, ative tanto Notificações Remotas como Busca em Segundo Plano.

Este passo garante que a sua aplicação pode gerir eficientemente notificações remotas e buscas em segundo plano.

Aqui está o guia para criar o seu certificado APNs.

Integrar o SDK iOS da PushEngage

O SDK iOS da PushEngage está disponível como um pacote Swift e um pod CocoaPods. Pedimos que reveja ambos os métodos, mas utilize apenas um deles ao completar a sua configuração.

Integrar o SDK iOS da PushEngage com SPM

Para integrar o SDK iOS da PushEngage utilizando o Swift Package Manager, siga estes passos:

  1. Abra o Xcode e navegue para o seu projeto. Selecione o separador de dependências do pacote. Clique no botão +.
  1. Cole a URL https://github.com/awesomemotive/pushengage-ios-sdk na barra de pesquisa. Clique em “Add Package”.
  1. Selecione o seu principal alvo da aplicação em “Add to Target” e clique em “Add Package”.

Integrar o SDK iOS da PushEngage com CocoaPods

Para integrar o SDK iOS da PushEngage usando CocoaPods, precisa de seguir estes passos:

Se o CocoaPods não estiver instalado, feche o seu projeto Xcode atual e execute o seguinte comando no diretório raiz do seu projeto

sudo gem install cocoapods

Execute o seguinte comando para inicializar um Podfile no seu projeto

pod init

Abra o Podfile recém-criado usando um editor de texto ou seguindo o comando no seu terminal no diretório raiz do projeto.

open Podfile

Adicione a dependência PushEngage sob o alvo do seu projeto. Certifique-se de que o seu Podfile se assemelha ao exemplo abaixo

# 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'
  post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
        config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'
      end
    end
  end
end

Guarde o Podfile e execute os seguintes comandos no terminal.

pod repo update
pod install

Abra o ficheiro <project-name>.xcworkspace recém-criado no Xcode.

Inicializar o SDK iOS da PushEngage

Assim que tiver integrado o SDK, teremos de inicializar o SDK iOS no seu AppDelegate.

Usando a linguagem Swift, é assim que pode fazê-lo

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(key: "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 a linguagem Objective-C, é assim que pode fazê-lo

#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 setAppIdWithKey:@"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

Por vezes, ao usar SwiftUI, o AppDelegate pode não estar disponível por defeito. Nesses casos, pode inicializar o SDK PushEngage no seu ficheiro App principal. Eis um exemplo em 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(key: "APP_ID_FROM_PUSH_ENGAGE_DASHBOARD")
        PushEngage.setIntialInfo(for: application,
                                             with: launchOptions)
        
        PushEngage.enableLogs = true
        return true
    }
}

Nota: Ao desenvolver a sua aplicação, pode achar útil ativar os logs do SDK PushEngage para fins de depuração. No entanto, é essencial desativar os logs na compilação de produção para evitar a exposição de informações sensíveis.

Criação da Extensão de Serviço de Notificação

A Extensão de Serviço de Notificação melhora a capacidade da sua aplicação iOS de receber notificações. Isto é usado para modificar o conteúdo da notificação ou para obter/processar quaisquer dados ao receber a notificação. Pode seguir os passos abaixo para criar uma Extensão de Serviço de Notificação:

1. Abra o Xcode e navegue até ao seu projeto. Escolha File » New » Target no menu.

2. Na janela de seleção de modelos, escolha Notification Service Extension e clique em Next.

3. Forneça um nome para a sua extensão, por exemplo, PushEngageNotificationServiceExtension, e clique em Finish.

4. Quando terminar de criar a Extensão de Serviço de Notificação, pode ser-lhe pedido para a ativar. Não a ative imediatamente.

Ativar a extensão mudaria o foco de depuração do Xcode da sua aplicação para a extensão. Se a ativar por engano, não se preocupe; pode voltar a depurar a sua aplicação dentro do Xcode.

Inicialização do SDK PushEngage para a Extensão de Serviço de Notificação

Para garantir o funcionamento correto do SDK PushEngage na sua Extensão de Serviço de Notificação iOS, precisa de seguir estes passos:

1. Abra o Podfile associado ao seu projeto.

2. Em seguida, precisa de adicionar a Dependência. Insira o seguinte trecho de código no seu Podfile:

target 'Your_Main_Application_Target' do
      pod 'PushEngage'
      post_install do |installer|
          installer.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
              config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO'
          end
        end
      end
     
      target 'Your_Notification_Service_Extension_Target' do
              pod 'PushEngage'
      end
end

3. Execute os seguintes comandos no seu terminal dentro do diretório raiz do seu projeto:

pod repo update
pod install

4. No seu alvo de Extensão de Serviço de Notificação, importe o framework PushEngage e adicione o código de inicialização necessário. Veja como pode fazê-lo.

Usando Swift

import UserNotifications
import PushEngage

@available(iOSApplicationExtension 10.0, *)
class PushEngageNotificationServiceExtension: 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 {
            PushEngage.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 = PushEngage.serviceExtensionTimeWillExpire(request, content: bestAttemptContent) else {
                contentHandler(bestAttemptContent)
                return
            }
            contentHandler(content)
        }
    }

}

Usando Objective-C

#import "NotificationService.h"
@import PushEngage;

@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) {
        [PushEngage didReceiveNotificationExtensionRequest:request bestContentHandler:self.bestAttemptContent];
        contentHandler(self.bestAttemptContent);
    }
}

- (void)serviceExtensionTimeWillExpire {

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

@end

Criação da Extensão de Conteúdo de Notificação

Para melhorar a forma como adiciona UI personalizada, terá de criar uma Extensão de Conteúdo de Notificação. Siga os passos abaixo para configurar a extensão:

1. No Xcode, vá a File » New » Target.

2. Selecione Notification Content Extension e clique em Next.

3. Não selecione “Ativar” no diálogo que aparece após clicar em Concluir. Cancelar mantém o Xcode a depurar a sua aplicação em vez da extensão. Se a ativar acidentalmente, volte a depurar a sua aplicação dentro do Xcode (ao lado do botão de execução).

4. No navegador de projetos, selecione o diretório do projeto de nível superior e selecione o destino NotificationContentExtension no projeto na lista de destinos criada no passo 2.

5. Defina o Destino de Implementação para iOS 10 ou superior, que é a versão do iOS que a Apple lançou com suporte para esta extensão. 

Inicialização do SDK PushEngage para a Extensão de Conteúdo de Notificação

Para garantir o funcionamento correto do SDK da PushEngage na sua Extensão de Conteúdo de Notificação iOS, siga estes passos:

1. Abra o Podfile associado ao seu projeto.

2. Adicionar Dependência, insira o seguinte trecho de código no seu Podfile:

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

3. Execute os seguintes comandos no seu terminal dentro do diretório raiz do seu projeto:

pod repo update

pod install

4. No seu alvo de Extensão de Conteúdo de Notificação, importe o framework PushEngage e adicione o código de inicialização necessário. Veja como pode fazê-lo com alguns exemplos de elementos de UI:

Usando Swift

import UIKit
import UserNotifications
import UserNotificationsUI
import PushEngage

@available(iOSApplicationExtension 10.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 = PushEngage.getCustomUIPayLoad(for: notification.request)
  //pass the payload to your custom View
            let view = CustomView(payLoadInfo: payLoad)
            hostingView = UIHostingController(rootView: view)
If let customView = self.hostingView {
            addChild(hostingView!)
}
        }
    }
    
}


Objective-C:

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

@import PushEngage;
@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 = [PushEngage 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

Adicionar Grupos de Aplicações

Os Grupos de Aplicações são essenciais para a comunicação entre a aplicação principal, a extensão de serviço de notificação e a extensão de conteúdo. Pode seguir estes passos para adicionar Grupos de Aplicações ao seu projeto iOS:

Se já tem um grupo de aplicações e só quer usar esse, salte para o passo n.º 5.

1. No seu projeto Xcode, no navegador de projetos, selecione o diretório raiz do projeto e selecione o alvo principal da aplicação.

2. Navegue até ao separador "Signing & Capabilities".

3. Clique no botão “+ Capability” e selecione App Groups na lista.

4. Clique no botão + para adicionar um App Group. Adicione um nome único ao seu App Group e clique em OK.

5. Na área de edição principal, selecione o alvo principal da sua aplicação e crie um grupo de aplicações. Forneça o nome do grupo no Info.plist da sua aplicação com a chave PushEngage_App_Group_Key.

6. Adicione a mesma chave e valor no ficheiro Info.plist da Extensão de Serviço de Notificação.

7. Selecione o mesmo grupo de aplicações no Alvo Principal da Aplicação e na SuaExtensãoDeServiçoDeNotificação.

Certifique-se de que está a selecionar a sua extensão de serviço de notificação no passo acima.

Deep Linking

A ligação profunda permite que os seus subscritores naveguem diretamente para um ecrã específico dentro da aplicação ou para uma página web designada ao interagir com notificações push. Por defeito, se fornecer um URL válido, o subscritor será redirecionado para essa página web.

Tratamento de URLs Web:

  • Forneça PushEngageInAppEnabled como YES no Info.plist, e o URL será carregado dentro da aplicação usando WKWebview.
  • Forneça PushEngageInAppEnabled como NO no Info.plist, se quiser que o seu subscritor seja redirecionado para o Safari para carregar o URL. 
  • Forneça PushEngageAutoHandleDeeplinkURL como YES no Info.plist, e o SDK irá tratar da ligação profunda de acordo com a configuração PushEngageInAppEnabled.
  • Forneça PushEngageAutoHandleDeeplinkURL como NO no Info.plist, e o controlo do tratamento da ligação profunda será dado à aplicação cliente a partir do SDK.
  • Se a ligação profunda não for um URL válido, terá de configurar a navegação usando setNotificationOpenHandler no AppDelegate dentro do método didFinishLaunchingWithOptions. Isto permite-lhe navegar para um ecrã específico com base na string fornecida, como mostrado abaixo. Se não for configurado, o SDK simplesmente abrirá a aplicação.
ios-deeplink

Usando 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(key: "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
    }
}

Usando 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 setAppIdWithKey:@"APP_ID_FROM_PUSH_ENGAGE_DASHBOARD"];
    [PushEngage setInitialInfoFor:application with:launchOptions];
    [PushEngage setNotificationOpenHandlerWithBlock:actionHandler];
    [PushEngage setEnableLogs:true];
    return YES;
}
@end

Gerir Notificações em Primeiro Plano

Quando as notificações chegam em primeiro plano, tem de tomar uma decisão sobre mostrar ou não o alerta de notificação ao dispositivo. Para lidar com notificações em primeiro plano, utilize setNotificationWillShowInForgroundHandler

Se o bloco de conclusão não for chamado por si, o SDK chamará o bloco de conclusão após 29 segundos. Em qualquer caso, notificação silenciosa ou de alerta quando a aplicação está em modo de primeiro plano.

Usando 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(key: "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
    }
}


Usando 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 setAppIdWithKey:@"APP_ID_FROM_PUSH_ENGAGE_DASHBOARD"];
    [PushEngage setInitialInfoFor:application with:launchOptions];
    [PushEngage setEnableLogs:true];
    return YES;
}
@end

Resolução de Problemas

Resolução de Problemas de Compilação Relacionados com Sandboxing

Problema:

Está a experienciar problemas de compilação relacionados com sandboxing.

Solução:

  • Abra o seu projeto no Xcode.
  • Navegue até Definições de Compilação.
  • Localize a opção User Script Sandboxing.
  • Defina-a para No.
Problemas com Method Swizzling nos SDKs Firebase e PushEngage

Problema:

Está a utilizar ambos os SDKs Firebase e PushEngage com o método swizzling ativado para ambos, e isso está a causar problemas.

Solução:

Desative o método swizzling para o SDK PushEngage e siga os passos manuais para lidar com os métodos PushEngage. Pode encontrar instruções detalhadas em:
Documentação do SDK iOS da PushEngage

Se quiser explorar mais capacidades do SDK iOS, pode consultar a nossa documentação detalhada da API.

Se encontrar algum problema, por favor contacte-nos clicando aqui. A nossa equipa de suporte poderá ajudá-lo.

Última atualização em 9 de março de 2026

Interaja e Mantenha Visitantes Depois de Saírem do Seu Website

Aumente o valor de cada visita web com Notificações Push que são difíceis de ignorar.

  • Plano Gratuito para Sempre
  • Configuração Fácil
  • Suporte 5 Estrelas