Pular para o conteúdo

Guia de integração básica do SDK para iOS 7.0+

Esta seção contém informações sobre como integrar o SDK da Pushwoosh em seu aplicativo iOS.

Pré-requisitos

Anchor link to

Para integrar o SDK da Pushwoosh para iOS em seu aplicativo, você precisará do seguinte:

Passos de integração

Anchor link to

1. Instalação

Anchor link to

Você pode integrar o SDK da Pushwoosh em seu aplicativo usando o Swift Package Manager ou o CocoaPods.

Swift Package Manager

Anchor link to

Na seção Package Dependencies, adicione o seguinte pacote:

https://github.com/Pushwoosh/Pushwoosh-XCFramework

Para usar o SDK da Pushwoosh para iOS, certifique-se de adicionar os quatro frameworks a seguir ao seu target do aplicativo ao integrar via Swift Package Manager:

  • PushwooshFramework
  • PushwooshCore
  • PushwooshBridge
  • PushwooshLiveActivities

Abra seu Podfile e adicione a dependência:

Terminal window
# Descomente a linha a seguir para definir uma plataforma global para o seu projeto
# platform :ios, '9.0'
target 'MyApp' do
# Comente a linha a seguir se você não quiser usar frameworks dinâmicos
use_frameworks!
pod 'PushwooshXCFramework'
end

Em seguida, no terminal, execute o seguinte comando para instalar as dependências:

Terminal window
pod install

2. Capabilities

Anchor link to

Para habilitar as Notificações Push em seu projeto, você precisa adicionar certas capabilities.

Na seção Signing & Capabilities, adicione as seguintes capabilities:

  • Push Notifications
  • Background Modes. Após adicionar esta capability, marque a caixa de Remote notifications.

Se você pretende usar Notificações Sensíveis ao Tempo (iOS 15+), adicione também a capability Time Sensitive Notifications.

3. Código de inicialização

Anchor link to

AppDelegate

Anchor link to

Adicione o seguinte código à sua classe AppDelegate:

import SwiftUI
import PushwooshFramework
@main
struct MyApp: App {
// Registra o AppDelegate como UIApplicationDelegate
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
class AppDelegate: NSObject, UIApplicationDelegate, PWMessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Código de inicialização
// Define um delegate personalizado para o tratamento de pushes
Pushwoosh.configure.delegate = self
// Registra para notificações push
Pushwoosh.configure.registerForPushNotifications()
return true
}
// Lida com o token recebido do APNS
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Pushwoosh.configure.handlePushRegistration(deviceToken)
}
// Lida com o erro ao receber o token
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
Pushwoosh.configure.handlePushRegistrationFailure(error)
}
//para notificações push silenciosas
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Pushwoosh.configure.handlePushReceived(userInfo)
completionHandler(.noData)
}
// Disparado quando um push é recebido
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageReceived message: PWMessage) {
print("onMessageReceived: ", message.payload!.description)
}
// Disparado quando um usuário toca na notificação
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) {
print("onMessageOpened: ", message.payload!.description)
}
}
struct ContentView: View {
var body: some View {
Text("Pushwoosh with SwiftUI")
.padding()
}
}

Info.plist

Anchor link to

No seu Info.plist:

4. Rastreamento de entrega de mensagens

Anchor link to

A Pushwoosh suporta o rastreamento de eventos de entrega para notificações push através da Notification Service Extension

Adicionar Notification Service Extension

Anchor link to
  1. No Xcode, selecione File > New > Target…
  2. Escolha Notification Service Extension e pressione Next.
  3. Digite o nome do target e pressione Finish.
  4. Quando solicitado para ativação, pressione Cancel.

Dependências para a Notification Service Extension (apenas CocoaPods)

Anchor link to

Nota: Se você estiver usando o Swift Package Manager para gerenciar dependências, pode pular este passo, pois as dependências são adicionadas automaticamente.

Abra seu Podfile e adicione a dependência para o target:

Podfile
# Descomente a linha a seguir para definir uma plataforma global para o seu projeto
# platform :ios, '9.0'
target 'MyApp' do
# Comente a linha a seguir se você não quiser usar frameworks dinâmicos
use_frameworks!
pod 'PushwooshXCFramework'
end
target 'MyAppNotificationExtension' do
use_frameworks!
pod 'PushwooshXCFramework'
end

Execute o seguinte comando no terminal para atualizar as dependências:

Terminal window
pod update

Adicionar SDK da Pushwoosh à Notification Service Extension

Anchor link to

Este código permite interceptar e processar notificações dentro da sua extensão de notificação.

import UserNotifications
import PushwooshFramework
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
// Pushwoosh **********
PWNotificationExtensionManager.shared().handle(request, contentHandler: contentHandler)
// ********************
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// Modifique o conteúdo da notificação aqui...
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Chamado pouco antes da extensão ser encerrada pelo sistema.
// Use isso como uma oportunidade para entregar sua "melhor tentativa" de conteúdo modificado, caso contrário, o payload original do push será usado.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}

Info.plist

Anchor link to

No Info.plist da sua Notification Service Extension, adicione:

  • Pushwoosh_APPID - O Código da sua Aplicação.

5. Execute o projeto

Anchor link to
  1. Compile e execute o projeto.
  2. Vá para o Painel de Controle da Pushwoosh e envie uma notificação push.
  3. Você deve ver a notificação no aplicativo.

Integração estendida da Pushwoosh para iOS

Anchor link to

Neste ponto, você já integrou o SDK e pode enviar e receber notificações push. Agora, vamos explorar a funcionalidade principal

Notificações push

Anchor link to

No SDK da Pushwoosh, existem dois callbacks projetados para lidar com notificações push:

  • onMessageReceived: Este método é invocado quando uma notificação push é recebida.
  • onMessageOpened: Este método é chamado quando o usuário interage com (abre) a notificação

Esses callbacks permitem que os desenvolvedores gerenciem o recebimento e a interação do usuário com as notificações push em seus aplicativos

import PushwooshFramework
class AppDelegate: NSObject, UIApplicationDelegate, PWMessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
Pushwoosh.configure.delegate = self;
}
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) {
if let payload = message.payload {
print("onMessageOpened: \(payload)")
}
}
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageReceived message: PWMessage) {
if let payload = message.payload {
print("onMessageReceived: \(payload)")
}
}
}

Configuração do usuário

Anchor link to

Ao focar no comportamento e nas preferências individuais do usuário, você pode entregar conteúdo personalizado, levando a um aumento da satisfação e lealdade do usuário

import PushwooshFramework
class Registration {
func afterUserLogin(user: User) {
let pushwoosh = Pushwoosh.configure
// define o ID do usuário
if let userId = user.userId {
pushwoosh.setUserId(userId)
}
// define o e-mail do usuário
if let userEmail = user.email {
pushwoosh.setEmail(userEmail)
}
// define o número de SMS do usuário
if let userSmsNumber = user.SmsNumber {
pushwoosh.registerSmsNumber(userSmsNumber)
}
// define o número de WhatsApp do usuário
if let userWhatsAppNumber = user.WhatsAppNumber {
pushwoosh.registerSmsNumber(userWhatsAppNumber)
}
// definindo informações adicionais do usuário como tags para a Pushwoosh
if let age = user.userDetails.age,
let name = user.userDetails.userName,
let lastLogin = user.userDetails.lastLoginDate {
pushwoosh.setTags([
"age": age,
"name": name,
"last_login": lastLogin
])
}
}
}

Tags são pares de chave-valor atribuídos a usuários ou dispositivos, permitindo a segmentação com base em atributos como preferências ou comportamento, o que possibilita o envio de mensagens direcionadas.

import PushwooshFramework
class UpdateUser {
func afterUserUpdateProfile(user: User) {
let pushwoosh = Pushwoosh.configure
// define a lista de categorias favoritas
pushwoosh.setTags(["favorite_categories" : user.getFavoriteCategories()])
// define as informações de pagamento
pushwoosh.setTags([
"is_subscribed": user.isSubscribed(),
"payment_status": user.getPaymentStatus(),
"billing_address": user.getBillingAddress()
])
}
}

Eventos são ações ou ocorrências específicas do usuário dentro do aplicativo que podem ser rastreadas para analisar o comportamento e acionar mensagens ou ações correspondentes

import PushwooshFramework
class Registration {
func afterUserLogin(user: User) {
if let userName = user.getUserName(), let lastLogin = user.getLastLoginDate() {
PWInAppManager.shared().postEvent("login", withAttributes: [
"name": userName,
"last_login": lastLogin
])
}
}
func afterUserPurchase(user: User, product: Product) {
let pushwoosh = Pushwoosh.configure
// Rastreia o evento de compra
PWInAppManager.shared().postEvent("purchase", withAttributes: [
"product_id": product.getId(),
"product_name": product.getName(),
"price": product.getPrice(),
"quantity": product.getQuantity()
])
// Define as tags do usuário
let lastPurchaseDate = Date().timeIntervalSince1970
let lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice()
pushwoosh.setTags([
"last_purchase_date": lastPurchaseDate,
"lifetime_spend": lifetimeSpend
])
}
}

Rich Media

Anchor link to

Rich media se refere a conteúdo interativo e multimídia, como imagens, vídeos ou HTML, usado em notificações e mensagens in-app para aumentar o engajamento do usuário

import PushwooshFramework
class ViewController: UIViewController, PWRichMediaPresentingDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let richMediaConfiguration = PWModalWindowConfiguration.shared()
PWRichMediaManager.shared().delegate = self
richMediaConfiguration.configureModalWindow(with: .PWModalWindowPositionBottom,
present: .PWAnimationPresentFromBottom,
dismiss: .PWAnimationDismissDown)
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, shouldPresent richMedia: PWRichMedia!) -> Bool {
print("Rich media will be presented with: \(richMedia.pushPayload!)")
return true
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, didPresent richMedia: PWRichMedia!) {
print("Rich media has been presented with: \(richMedia.pushPayload!)")
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, didClose richMedia: PWRichMedia!) {
print("Rich media has been closed with: \(richMedia.pushPayload!)")
}
func richMediaManager(_ richMediaManager: PWRichMediaManager!, presentingDidFailFor richMedia: PWRichMedia!, withError error: (any Error)!) {
print("Failed to present rich media with: \(richMedia.pushPayload!). Error: \(error.localizedDescription)")
}
}

Solução de problemas

Anchor link to

Falha ao compilar o módulo ‘PushwooshFramework’

Anchor link to

Ao compilar seu projeto, você pode encontrar um erro semelhante a:

Failed to build module 'PushwooshFramework'; this SDK is not supported by the compiler
(the SDK is built with 'Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)',
while this compiler is 'Apple Swift version 6.1.2 effective-5.10 (swiftlang-6.1.2.1.2 clang-1700.0.13.5)')

Causa: Este erro não está relacionado à incompatibilidade de versão do compilador Swift. A partir da versão 6.8.0 do SDK da Pushwoosh para iOS, o SDK é modularizado em vários componentes que interagem entre si. O erro ocorre quando nem todos os frameworks necessários são adicionados ao seu projeto.

Solução: Certifique-se de que todos os quatro frameworks necessários sejam adicionados ao seu target do aplicativo ao integrar via Swift Package Manager:

  • PushwooshFramework
  • PushwooshCore
  • PushwooshBridge
  • PushwooshLiveActivities

Para verificar isso no Xcode:

  1. Selecione seu projeto no Project Navigator
  2. Selecione o target do seu aplicativo
  3. Vá para General > Frameworks, Libraries, and Embedded Content
  4. Confirme que todos os quatro frameworks estão listados

Se você encontrar algum problema durante o processo de integração, consulte a seção de suporte e comunidade.