Passer au contenu

Suivi de la livraison des messages iOS

Il existe une méthode d’API dans Pushwoosh qui suit la livraison des notifications push. Les applications iOS ne prennent pas en charge cette méthode nativement, car les notifications push sur iOS sont gérées par le système d’exploitation (OS), et non par le SDK Pushwoosh. Vous pouvez ajouter le suivi de la livraison en ajoutant une Extension de service de notification à votre projet. Cette page montre comment implémenter le suivi de la livraison des messages pour les applications iOS.

Ajouter une Extension de service de notification

Anchor link to
  1. Dans Xcode, sélectionnez File > New > Target…

  2. Sélectionnez Notification Service Extension et cliquez sur Next.

Sélecteur de modèle de cible Xcode avec l'Extension de service de notification sélectionnée
  1. Entrez le nom du produit et cliquez sur Finish.
  1. Cliquez sur Cancel à l’invite Activate scheme.
Invite d'activation du schéma avec Annuler en surbrillance

En annulant, vous conservez le débogage de votre application par Xcode au lieu de celui de l’extension que vous venez de créer. Si vous l’avez activée par accident, vous pouvez revenir au débogage de votre application dans Xcode.

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

Anchor link to

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
target 'NotificationServiceExtension' do
use_frameworks!
pod 'PushwooshXCFramework'
end

Exécutez les commandes suivantes dans le terminal pour installer les dépendances :

Terminal window
rm -rf Podfile.lock
pod deintegrate
pod setup
pod repo update
pod install

Ajouter le code pour le suivi des événements de livraison de message

Anchor link to

Faites de votre extension une sous-classe de PushwooshNotificationServiceExtension. Une sous-classe vide est suffisante : Pushwoosh envoie l’événement de livraison de message, définit le badge, télécharge la pièce jointe multimédia et gère automatiquement le repli en cas d’expiration.

Remplacez le contenu généré de votre fichier NotificationService :

import UserNotifications
import PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}

ID de l’application

Anchor link to

Depuis la version 7.1.0, l’extension hérite de Pushwoosh_APPID (et d’autres clés Pushwoosh_*) de l’Info.plist de l’application hôte, vous n’avez donc plus besoin de la dupliquer dans l’extension. N’ajoutez Pushwoosh_APPID à l’Info.plist de l’extension que si vous souhaitez remplacer la valeur de l’hôte :

NotificationService/Info.plist
<key>Pushwoosh_APPID</key>
<string>XXXXX-XXXXX</string>

Groupe d’applications (badge et proxy inverse)

Anchor link to

Un Groupe d’applications (App Group) partagé entre l’application et l’extension est nécessaire pour synchroniser le compteur du badge et pour lire les paramètres du proxy inverse que l’application hôte stocke.

  1. Ajoutez la capacité App Groups à la cible de l’extension et activez-y le même groupe que dans l’application hôte. Ceci est obligatoire — sans le conteneur partagé, le compteur du badge et les paramètres du proxy inverse ne peuvent pas être synchronisés.

  2. Fournissez le nom du Groupe d’applications. Comme pour Pushwoosh_APPID, l’extension hérite de PW_APP_GROUPS_NAME de l’Info.plist de l’application hôte depuis la version 7.1.0. Si vous l’avez déjà défini à cet endroit pour les badges, vous n’avez pas besoin de l’ajouter à l’extension. Ne le définissez dans l’Info.plist de l’extension que pour remplacer la valeur de l’hôte, ou fournissez-le par programmation en surchargeant pushwooshAppGroupsName.

App Info.plist
<key>PW_APP_GROUPS_NAME</key>
<string>group.com.example.app</string>

Personnaliser la notification (optionnel)

Anchor link to

La classe de base expose quelques points de surcharge, du moins au plus grand contrôle. Pushwoosh exécute toujours l’événement de livraison, le badge, la pièce jointe et le repli en cas d’expiration dans tous les cas.

Définissez le Groupe d’applications par programmation au lieu d’utiliser la clé de l’Info.plist :

override func pushwooshAppGroupsName() -> String? {
"group.com.example.app"
}

Exécutez une préparation asynchrone avant que Pushwoosh ne traite le push — par exemple, le préchargement des médias des Push Stories — sans surcharger la méthode standard didReceive. Appelez completion une seule fois, sur le thread principal :

override func pushwooshPrepare(for request: UNNotificationRequest,
completion: @escaping () -> Void) {
// async work here
completion()
}

Modifiez le contenu avant qu’il ne soit affiché en surchargeant didReceive. Appelez super avec votre propre gestionnaire de contenu, modifiez le contenu à l’intérieur, puis transmettez-le au gestionnaire d’origine :

override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
super.didReceive(request) { content in
let mutable = (content.mutableCopy() as? UNMutableNotificationContent) ?? content
// customize `mutable` here
contentHandler(mutable)
}
}

Intégration héritée

Anchor link to

Cette API de bas niveau pilote le même traitement (événement de livraison, badge, pièce jointe) à partir d’une simple UNNotificationServiceExtension :

import UserNotifications
import PushwooshFramework
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
PWNotificationExtensionManager.sharedManager()
.handleNotificationRequest(request, contentHandler: contentHandler)
}
}

Partagez vos commentaires avec nous

Anchor link to

Vos commentaires nous aident à créer une meilleure expérience, nous serions donc ravis de vous entendre si vous rencontrez des problèmes lors du processus d’intégration du SDK. Si vous rencontrez des difficultés, n’hésitez pas à nous faire part de vos réflexions via ce formulaire.