Passer au contenu

Guide d'intégration de base du SDK iOS

Cette section contient des informations sur la manière d’intégrer le SDK Pushwoosh dans votre application iOS.

Prérequis

Anchor link to

Pour intégrer le SDK iOS de Pushwoosh dans votre application, vous aurez besoin des éléments suivants :

Étapes d’intégration

Anchor link to

1. Installation

Anchor link to

Vous pouvez intégrer le SDK Pushwoosh dans votre application en utilisant soit Swift Package Manager, soit CocoaPods.

Swift Package Manager

Anchor link to

Dans la section Package Dependencies, ajoutez le paquet suivant :

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

Pour utiliser le SDK iOS de Pushwoosh, assurez-vous d’ajouter les quatre frameworks suivants à la cible de votre application lors de l’intégration via Swift Package Manager :

  • PushwooshFramework
  • PushwooshCore
  • PushwooshBridge
  • PushwooshLiveActivities

Ouvrez votre Podfile et ajoutez la dépendance :

Terminal window
# Décommentez la ligne suivante pour définir une plateforme globale pour votre projet
# platform :ios, '9.0'
target 'MyApp' do
# Commentez la ligne suivante si vous ne voulez pas utiliser de frameworks dynamiques
use_frameworks!
pod 'PushwooshXCFramework'
end

Ensuite, dans le terminal, exécutez la commande suivante pour installer les dépendances :

Terminal window
pod install

2. Capacités

Anchor link to

Pour activer les notifications push dans votre projet, vous devez ajouter certaines capacités.

Dans la section Signing & Capabilities, ajoutez les capacités suivantes :

  • Notifications Push
  • Modes d'arrière-plan. Après avoir ajouté cette capacité, cochez la case Notifications à distance.

Si vous prévoyez d’utiliser les notifications urgentes (Time Sensitive Notifications) (iOS 15+), ajoutez également la capacité Time Sensitive Notifications.

3. Code d’initialisation

Anchor link to

AppDelegate

Anchor link to

Ajoutez le code suivant à votre classe AppDelegate :

import SwiftUI
import PushwooshFramework
@main
struct MyApp: App {
// Enregistrer AppDelegate en tant que 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 {
// Code d'initialisation
// Définir un délégué personnalisé pour la gestion des pushes
Pushwoosh.sharedInstance().delegate = self
// S'enregistrer pour les notifications push
Pushwoosh.sharedInstance().registerForPushNotifications()
return true
}
// Gérer le jeton reçu d'APNS
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Pushwoosh.sharedInstance().handlePushRegistration(deviceToken)
}
// Gérer l'erreur de réception du jeton
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
Pushwoosh.sharedInstance().handlePushRegistrationFailure(error)
}
// pour les notifications push silencieuses
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Pushwoosh.sharedInstance().handlePushReceived(userInfo)
completionHandler(.noData)
}
// Déclenché à la réception d'un push
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageReceived message: PWMessage) {
print("onMessageReceived: ", message.payload!.description)
}
// Déclenché lorsqu'un utilisateur appuie sur la notification
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

Dans votre Info.plist :

4. Suivi de la livraison des messages

Anchor link to

Pushwoosh prend en charge le suivi des événements de livraison pour les notifications push via l’extension de service de notification (Notification Service Extension).

Ajouter une extension de service de notification

Anchor link to
  1. Dans Xcode, sélectionnez File > New > Target…
  2. Choisissez Notification Service Extension et appuyez sur Next.
  3. Saisissez le nom de la cible et appuyez sur Finish.
  4. Lorsque l’activation vous est demandée, appuyez sur Cancel.

Dépendances pour l’extension de service de notification (CocoaPods uniquement)

Anchor link to

Remarque : Si vous utilisez Swift Package Manager pour gérer les dépendances, vous pouvez sauter cette étape, car les dépendances sont ajoutées automatiquement.

Ouvrez votre Podfile et ajoutez la dépendance pour la cible :

Podfile
# Décommentez la ligne suivante pour définir une plateforme globale pour votre projet
# platform :ios, '9.0'
target 'MyApp' do
# Commentez la ligne suivante si vous ne voulez pas utiliser de frameworks dynamiques
use_frameworks!
pod 'PushwooshXCFramework'
end
target 'MyAppNotificationExtension' do
use_frameworks!
pod 'PushwooshXCFramework'
end

Exécutez la commande suivante dans le terminal pour mettre à jour les dépendances :

Terminal window
pod update

Ajouter le SDK Pushwoosh à l’extension de service de notification

Anchor link to

Ce code vous permet d’intercepter et de traiter les notifications au sein de votre extension de notification.

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 {
// Modifiez le contenu de la notification ici...
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Appelé juste avant que l'extension ne soit terminée par le système.
// Utilisez ceci comme une opportunité de livrer votre "meilleure tentative" de contenu modifié, sinon la charge utile du push d'origine sera utilisée.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}

Info.plist

Anchor link to

Dans le fichier Info.plist de votre extension de service de notification, ajoutez :

  • Pushwoosh_APPID - Votre code d’application.

5. Exécuter le projet

Anchor link to
  1. Compilez et exécutez le projet.
  2. Allez dans le Control Panel de Pushwoosh et envoyez une notification push.
  3. Vous devriez voir la notification dans l’application.

Intégration iOS étendue de Pushwoosh

Anchor link to

À ce stade, vous avez déjà intégré le SDK et pouvez envoyer et recevoir des notifications push. Explorons maintenant les fonctionnalités principales

Notifications push

Anchor link to

Dans le SDK Pushwoosh, il existe deux callbacks conçus pour la gestion des notifications push :

  • onMessageReceived : Cette méthode est invoquée lorsqu’une notification push est reçue.
  • onMessageOpened : Cette méthode est appelée lorsque l’utilisateur interagit avec la notification (l’ouvre).

Ces callbacks permettent aux développeurs de gérer la réception et l’interaction de l’utilisateur avec les notifications push au sein de leurs applications

import PushwooshFramework
class AppDelegate: NSObject, UIApplicationDelegate, PWMessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
Pushwoosh.sharedInstance().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)")
}
}
}

Configuration de l’utilisateur

Anchor link to

En se concentrant sur le comportement et les préférences de chaque utilisateur, vous pouvez fournir un contenu personnalisé, ce qui améliore la satisfaction et la fidélité de l’utilisateur.

import PushwooshFramework
class Registration {
func afterUserLogin(user: User) {
let pushwoosh = Pushwoosh.sharedInstance()
// définir l'ID de l'utilisateur
if let userId = user.userId {
pushwoosh.setUserId(userId)
}
// définir l'e-mail de l'utilisateur
if let userEmail = user.email {
pushwoosh.setEmail(userEmail)
}
// définir des informations utilisateur supplémentaires en tant que tags pour 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
])
}
}
}

Les tags sont des paires clé-valeur assignées aux utilisateurs ou aux appareils, permettant une segmentation basée sur des attributs tels que les préférences ou le comportement, ce qui rend possible la messagerie ciblée.

import PushwooshFramework
class UpdateUser {
func afterUserUpdateProfile(user: User) {
let pushwoosh = Pushwoosh.sharedInstance()
// définir la liste des catégories favorites
pushwoosh.setTags(["favorite_categories" : user.getFavoriteCategories()])
// définir les informations de paiement
pushwoosh.setTags([
"is_subscribed": user.isSubscribed(),
"payment_status": user.getPaymentStatus(),
"billing_address": user.getBillingAddress()
])
}
}

Événements

Anchor link to

Les événements sont des actions ou des occurrences spécifiques de l’utilisateur au sein de l’application qui peuvent être suivies pour analyser le comportement et déclencher des messages ou des actions correspondants

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.sharedInstance()
// Suivre l'événement d'achat
PWInAppManager.shared().postEvent("purchase", withAttributes: [
"product_id": product.getId(),
"product_name": product.getName(),
"price": product.getPrice(),
"quantity": product.getQuantity()
])
// Définir les tags de l'utilisateur
let lastPurchaseDate = Date().timeIntervalSince1970
let lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice()
pushwoosh.setTags([
"last_purchase_date": lastPurchaseDate,
"lifetime_spend": lifetimeSpend
])
}
}

Rich Media

Anchor link to

Le Rich Media fait référence à du contenu interactif et multimédia, tel que des images, des vidéos ou du HTML, utilisé dans les notifications et les messages in-app pour améliorer l’engagement de l’utilisateur

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)")
}
}

Dépannage

Anchor link to

Si vous rencontrez des problèmes pendant le processus d’intégration, veuillez vous référer à la section support et communauté.