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-
Dans Xcode, sélectionnez File > New > Target…
-
Sélectionnez Notification Service Extension et cliquez sur Next.
- Entrez le nom du produit et cliquez sur Finish.
- Cliquez sur Cancel à l’invite Activate scheme.
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 toSi 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 :
target 'NotificationServiceExtension' do use_frameworks! pod 'PushwooshXCFramework'endExécutez les commandes suivantes dans le terminal pour installer les dépendances :
rm -rf Podfile.lockpod deintegratepod setuppod repo updatepod installAjouter le code pour le suivi des événements de livraison de message
Anchor link toFaites 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 UserNotificationsimport PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}#import <PushwooshFramework/PushwooshNotificationServiceExtension.h>
@interface NotificationService : PushwooshNotificationServiceExtension
@end
@implementation NotificationService
@endID de l’application
Anchor link toDepuis 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 :
<key>Pushwoosh_APPID</key><string>XXXXX-XXXXX</string>Groupe d’applications (badge et proxy inverse)
Anchor link toUn 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.
-
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.
-
Fournissez le nom du Groupe d’applications. Comme pour
Pushwoosh_APPID, l’extension hérite dePW_APP_GROUPS_NAMEde 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 surchargeantpushwooshAppGroupsName.
<key>PW_APP_GROUPS_NAME</key><string>group.com.example.app</string>Personnaliser la notification (optionnel)
Anchor link toLa 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 toCette API de bas niveau pilote le même traitement (événement de livraison, badge, pièce jointe) à partir d’une simple UNNotificationServiceExtension :
import UserNotificationsimport PushwooshFramework
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { PWNotificationExtensionManager.sharedManager() .handleNotificationRequest(request, contentHandler: contentHandler) }}#import "PWNotificationExtensionManager.h"
@interface NotificationService : UNNotificationServiceExtension
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *))contentHandler { [[PWNotificationExtensionManager sharedManager] handleNotificationRequest:request contentHandler:contentHandler];}
@endPartagez vos commentaires avec nous
Anchor link toVos 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.