iOS-Nachrichtenzustellung nachverfolgen
Es gibt eine API-Methode in Pushwoosh, die die Zustellung von Push-Benachrichtigungen verfolgt. iOS-Apps unterstützen diese Methode nicht standardmäßig, da Push-Benachrichtigungen auf iOS vom Betriebssystem und nicht vom Pushwoosh SDK gehandhabt werden. Sie können die Zustellungsverfolgung hinzufügen, indem Sie eine Notification Service Extension zu Ihrem Projekt hinzufügen. Diese Seite zeigt, wie Sie die Nachrichtenzustellungsverfolgung für iOS-Apps implementieren.
Notification Service Extension hinzufügen
Anchor link to-
Wählen Sie in Xcode File > New > Target…
-
Wählen Sie Notification Service Extension und klicken Sie auf Next.
- Geben Sie den Produktnamen ein und klicken Sie auf Finish.
- Klicken Sie in der Aufforderung Activate scheme auf Cancel.
Durch das Abbrechen stellen Sie sicher, dass Xcode weiterhin Ihre App anstelle der gerade erstellten Erweiterung debuggt. Wenn Sie es versehentlich aktiviert haben, können Sie innerhalb von Xcode wieder zum Debuggen Ihrer App wechseln.
Abhängigkeiten für die Notification Service Extension (nur CocoaPods)
Anchor link toWenn Sie den Swift Package Manager zur Verwaltung von Abhängigkeiten verwenden, können Sie diesen Schritt überspringen, da die Abhängigkeiten automatisch hinzugefügt werden.
Öffnen Sie Ihre Podfile-Datei und fügen Sie die Abhängigkeit für das Ziel hinzu:
target 'NotificationServiceExtension' do use_frameworks! pod 'PushwooshXCFramework'endFühren Sie die folgenden Befehle im Terminal aus, um die Abhängigkeiten zu installieren:
rm -rf Podfile.lockpod deintegratepod setuppod repo updatepod installCode zum Nachverfolgen von Nachrichtenzustellungsereignissen hinzufügen
Anchor link toMachen Sie Ihre Erweiterung zu einer Unterklasse von PushwooshNotificationServiceExtension. Eine leere Unterklasse ist ausreichend: Pushwoosh sendet das Nachrichtenzustellungsereignis, setzt das Badge, lädt den Medienanhang herunter und behandelt den Timeout-Fallback automatisch für Sie.
Ersetzen Sie den generierten Inhalt Ihrer NotificationService-Datei:
import UserNotificationsimport PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}#import <PushwooshFramework/PushwooshNotificationServiceExtension.h>
@interface NotificationService : PushwooshNotificationServiceExtension
@end
@implementation NotificationService
@endApp-ID
Anchor link toSeit Version 7.1.0 erbt die Erweiterung Pushwoosh_APPID (und andere Pushwoosh_*-Schlüssel) aus der Info.plist der Host-App, sodass Sie sie nicht mehr in der Erweiterung duplizieren müssen. Fügen Sie Pushwoosh_APPID nur dann zur Info.plist der Erweiterung hinzu, wenn Sie den Wert des Hosts überschreiben möchten:
<key>Pushwoosh_APPID</key><string>XXXXX-XXXXX</string>App-Gruppe (Badge und Reverse-Proxy)
Anchor link toEine zwischen der App und der Erweiterung geteilte App-Gruppe wird benötigt, um die Anzahl der Badges zu synchronisieren und die Reverse-Proxy-Einstellungen zu lesen, die die Host-App speichert.
-
Fügen Sie die Fähigkeit App Groups zum Erweiterungsziel hinzu und aktivieren Sie dort dieselbe Gruppe wie in der Host-App. Dies ist erforderlich – ohne den gemeinsamen Container können die Anzahl der Badges und die Reverse-Proxy-Einstellungen nicht synchronisiert werden.
-
Geben Sie den Namen der App-Gruppe an. Wie
Pushwoosh_APPIDerbt die Erweiterung seit Version 7.1.0PW_APP_GROUPS_NAMEaus der Info.plist der Host-App. Wenn Sie es dort also bereits für Badges festgelegt haben, müssen Sie es nicht zur Erweiterung hinzufügen. Legen Sie es in der Info.plist der Erweiterung nur fest, um den Host-Wert zu überschreiben, oder geben Sie es programmgesteuert an, indem SiepushwooshAppGroupsNameüberschreiben.
<key>PW_APP_GROUPS_NAME</key><string>group.com.example.app</string>Benachrichtigung anpassen (optional)
Anchor link toDie Basisklasse bietet einige Überschreibungspunkte, von der geringsten bis zur größten Kontrolle. Pushwoosh führt in jedem Fall weiterhin das Zustellungsereignis, das Badge, den Anhang und den Timeout-Fallback aus.
Legen Sie die App-Gruppe programmgesteuert fest, anstatt den Info.plist-Schlüssel zu verwenden:
override func pushwooshAppGroupsName() -> String? { "group.com.example.app"}Führen Sie eine asynchrone Vorbereitung durch, bevor Pushwoosh den Push verarbeitet – zum Beispiel das Vorabladen von Push-Stories-Medien – ohne die Standard-didReceive zu überschreiben. Rufen Sie completion genau einmal im Hauptthread auf:
override func pushwooshPrepare(for request: UNNotificationRequest, completion: @escaping () -> Void) { // async work here completion()}Ändern Sie den Inhalt, bevor er angezeigt wird, indem Sie didReceive überschreiben. Rufen Sie super mit Ihrem eigenen Inhalts-Handler auf, ändern Sie den Inhalt darin und leiten Sie ihn dann an den ursprünglichen Handler weiter:
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) }}Legacy-Integration
Anchor link toDiese Low-Level-API steuert die gleiche Verarbeitung (Zustellungsereignis, Badge, Anhang) von einer einfachen UNNotificationServiceExtension aus:
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];}
@endTeilen Sie uns Ihr Feedback mit
Anchor link toIhr Feedback hilft uns, eine bessere Erfahrung zu schaffen, daher würden wir uns freuen, von Ihnen zu hören, wenn Sie während des SDK-Integrationsprozesses auf Probleme stoßen. Wenn Sie auf Schwierigkeiten stoßen, zögern Sie bitte nicht, uns Ihre Gedanken über dieses Formular mitzuteilen.