Passer au contenu

Guide d'intégration de base du SDK iOS 7.0+

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 Pushwoosh iOS 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 le 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 Pushwoosh iOS, assurez-vous d’ajouter les quatre frameworks suivants à la cible de votre application lors de l’intégration via le 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 :

  • Push Notifications
  • Background Modes. Après avoir ajouté cette capacité, cochez la case Remote notifications.

Si vous prévoyez d’utiliser les 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 comme 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 pushs
Pushwoosh.configure.delegate = self
// S'inscrire aux notifications push
Pushwoosh.configure.registerForPushNotifications()
return true
}
// Gérer le token reçu d'APNS
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Pushwoosh.configure.handlePushRegistration(deviceToken)
}
// Gérer l'erreur de réception du token
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
Pushwoosh.configure.handlePushRegistrationFailure(error)
}
// pour les notifications push silencieuses
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Pushwoosh.configure.handlePushReceived(userInfo)
completionHandler(.noData)
}
// Déclenché lorsqu'un push est reçu
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. Entrez 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 panneau de contrôle 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 de base

Notifications push

Anchor link to

Dans le SDK Pushwoosh, il existe deux callbacks conçus pour gérer les 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 (ouvre) la notification

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

Configuration de l’utilisateur

Anchor link to

En vous concentrant sur le comportement et les préférences individuels des utilisateurs, vous pouvez fournir un contenu personnalisé, ce qui entraîne une satisfaction et une fidélité accrues des utilisateurs

import PushwooshFramework
class Registration {
func afterUserLogin(user: User) {
let pushwoosh = Pushwoosh.configure
// définir l'ID 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 le numéro SMS de l'utilisateur
if let userSmsNumber = user.SmsNumber {
pushwoosh.registerSmsNumber(userSmsNumber)
}
// définir le numéro WhatsApp de l'utilisateur
if let userWhatsAppNumber = user.WhatsAppNumber {
pushwoosh.registerSmsNumber(userWhatsAppNumber)
}
// définir des informations utilisateur supplémentaires comme 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 attribué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 permet un message ciblé.

import PushwooshFramework
class UpdateUser {
func afterUserUpdateProfile(user: User) {
let pushwoosh = Pushwoosh.configure
// 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.configure
// 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 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

Échec de la compilation du module ‘PushwooshFramework’

Anchor link to

Lors de la compilation de votre projet, vous pouvez rencontrer une erreur similaire à :

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)')

Cause : Cette erreur n’est pas liée à une incompatibilité de version du compilateur Swift. À partir de la version 6.8.0 du SDK Pushwoosh iOS, le SDK est modularisé en plusieurs composants qui interagissent les uns avec les autres. L’erreur se produit lorsque tous les frameworks requis ne sont pas ajoutés à votre projet.

Solution : Assurez-vous que les quatre frameworks requis sont ajoutés à la cible de votre application lors de l’intégration via le Swift Package Manager :

  • PushwooshFramework
  • PushwooshCore
  • PushwooshBridge
  • PushwooshLiveActivities

Pour vérifier cela dans Xcode :

  1. Sélectionnez votre projet dans le navigateur de projet (Project Navigator)
  2. Sélectionnez la cible de votre application
  3. Allez dans General > Frameworks, Libraries, and Embedded Content
  4. Confirmez que les quatre frameworks sont listés

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