Zum Inhalt springen

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
  1. Wählen Sie in Xcode File > New > Target…

  2. Wählen Sie Notification Service Extension und klicken Sie auf Next.

Xcode-Zielvorlagenauswahl mit ausgewählter Notification Service Extension
  1. Geben Sie den Produktnamen ein und klicken Sie auf Finish.
  1. Klicken Sie in der Aufforderung Activate scheme auf Cancel.
Aufforderung zum Aktivieren des Schemas mit hervorgehobenem Abbrechen

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 to

Wenn 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:

Podfile
target 'NotificationServiceExtension' do
use_frameworks!
pod 'PushwooshXCFramework'
end

Führen Sie die folgenden Befehle im Terminal aus, um die Abhängigkeiten zu installieren:

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

Code zum Nachverfolgen von Nachrichtenzustellungsereignissen hinzufügen

Anchor link to

Machen 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 UserNotifications
import PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}

Seit 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:

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

App-Gruppe (Badge und Reverse-Proxy)

Anchor link to

Eine 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.

  1. 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.

  2. Geben Sie den Namen der App-Gruppe an. Wie Pushwoosh_APPID erbt die Erweiterung seit Version 7.1.0 PW_APP_GROUPS_NAME aus 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 Sie pushwooshAppGroupsName überschreiben.

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

Benachrichtigung anpassen (optional)

Anchor link to

Die 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 to

Diese Low-Level-API steuert die gleiche Verarbeitung (Zustellungsereignis, Badge, Anhang) von einer einfachen UNNotificationServiceExtension aus:

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

Teilen Sie uns Ihr Feedback mit

Anchor link to

Ihr 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.