Zum Inhalt springen

iOS SDK 7.0+ grundlegende Integrationsanleitung

Dieser Abschnitt enthält Informationen zur Integration des Pushwoosh SDK in Ihre iOS-Anwendung.

Voraussetzungen

Anchor link to

Um das Pushwoosh iOS SDK in Ihre App zu integrieren, benötigen Sie Folgendes:

Integrationsschritte

Anchor link to

1. Installation

Anchor link to

Sie können das Pushwoosh SDK entweder über den Swift Package Manager oder CocoaPods in Ihre Anwendung integrieren.

Swift Package Manager

Anchor link to

Fügen Sie im Abschnitt Package Dependencies das folgende Paket hinzu:

https://github.com/Pushwoosh/Pushwoosh-XCFramework

Um das Pushwoosh iOS SDK zu verwenden, stellen Sie sicher, dass Sie die folgenden drei Frameworks zu Ihrem App-Ziel hinzufügen, wenn Sie über den Swift Package Manager integrieren:

  • PushwooshFramework
  • PushwooshCore
  • PushwooshBridge

Öffnen Sie Ihr Podfile und fügen Sie die Abhängigkeit hinzu:

Terminal window
# Kommentieren Sie die nächste Zeile aus, um eine globale Plattform für Ihr Projekt zu definieren
# platform :ios, '9.0'
target 'MyApp' do
# Kommentieren Sie die nächste Zeile aus, wenn Sie keine dynamischen Frameworks verwenden möchten
use_frameworks!
pod 'PushwooshXCFramework'
end

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

Terminal window
pod install

2. Capabilities

Anchor link to

Um Push-Benachrichtigungen in Ihrem Projekt zu aktivieren, müssen Sie bestimmte Capabilities hinzufügen.

Fügen Sie im Abschnitt Signing & Capabilities die folgenden Capabilities hinzu:

  • Push Notifications
  • Background Modes. Nachdem Sie diese Capability hinzugefügt haben, aktivieren Sie das Kontrollkästchen für Remote notifications.

Wenn Sie Time Sensitive Notifications (iOS 15+) verwenden möchten, fügen Sie auch die Capability Time Sensitive Notifications hinzu.

3. Initialisierungscode

Anchor link to

AppDelegate

Anchor link to

Fügen Sie den folgenden Code zu Ihrer AppDelegate-Klasse hinzu:

import SwiftUI
import PushwooshFramework
@main
struct MyApp: App {
// AppDelegate als UIApplicationDelegate registrieren
@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 {
// Initialisierungscode
// Benutzerdefinierten Delegaten für die Push-Verarbeitung festlegen
Pushwoosh.configure.delegate = self
// Für Push-Benachrichtigungen registrieren
Pushwoosh.configure.registerForPushNotifications()
return true
}
// Von APNS empfangenen Token verarbeiten
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Pushwoosh.configure.handlePushRegistration(deviceToken)
}
// Fehler beim Empfang des Tokens verarbeiten
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
Pushwoosh.configure.handlePushRegistrationFailure(error)
}
//für stille Push-Benachrichtigungen
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Pushwoosh.configure.handlePushReceived(userInfo)
completionHandler(.noData)
}
// Wird ausgelöst, wenn ein Push empfangen wird
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageReceived message: PWMessage) {
print("onMessageReceived: ", message.payload!.description)
}
// Wird ausgelöst, wenn ein Benutzer auf die Benachrichtigung tippt
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

In Ihrer Info.plist:

  • Setzen Sie den Schlüssel Pushwoosh_APPID auf den Pushwoosh Application Code.
  • Setzen Sie den Schlüssel Pushwoosh_API_TOKEN auf das Pushwoosh Device API Token

4. Verfolgung der Nachrichtenzustellung

Anchor link to

Pushwoosh unterstützt die Verfolgung von Zustellereignissen für Push-Benachrichtigungen über die Notification Service Extension

Notification Service Extension hinzufügen

Anchor link to
  1. In Xcode, wählen Sie File > New > Target…
  2. Wählen Sie Notification Service Extension und drücken Sie Next.
  3. Geben Sie den Zielnamen ein und drücken Sie Finish.
  4. Wenn Sie zur Aktivierung aufgefordert werden, drücken Sie Cancel.

Abhängigkeiten für die Notification Service Extension (nur CocoaPods)

Anchor link to

Hinweis: 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 Ihr Podfile und fügen Sie die Abhängigkeit für das Ziel hinzu:

Podfile
# Kommentieren Sie die nächste Zeile aus, um eine globale Plattform für Ihr Projekt zu definieren
# platform :ios, '9.0'
target 'MyApp' do
# Kommentieren Sie die nächste Zeile aus, wenn Sie keine dynamischen Frameworks verwenden möchten
use_frameworks!
pod 'PushwooshXCFramework'
end
target 'MyAppNotificationExtension' do
use_frameworks!
pod 'PushwooshXCFramework'
end

Führen Sie den folgenden Befehl im Terminal aus, um die Abhängigkeiten zu aktualisieren:

Terminal window
pod update

Pushwoosh SDK zur Notification Service Extension hinzufügen

Anchor link to

Ersetzen Sie die generierte NotificationService-Klasse durch eine Unterklasse von PushwooshNotificationServiceExtension. Pushwoosh kümmert sich dann um alles, was ein Push benötigt – das Senden des Zustellereignisses, das Zählen der Badges, das Herunterladen des Medienanhangs und den obligatorischen serviceExtensionTimeWillExpire-Timeout-Fallback. Es ist kein weiterer Code erforderlich.

import PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}

Hinweis: Sie können die Quelldatei vollständig überspringen – setzen Sie die NSExtensionPrincipalClass der Erweiterung in ihrer Info.plist auf PushwooshNotificationServiceExtension und schreiben Sie überhaupt keinen Code.

Um die Benachrichtigung zu ändern, bevor sie angezeigt wird, überschreiben Sie didReceive(_:withContentHandler:), rufen Sie super mit Ihrem eigenen Content-Handler auf, ändern Sie den Inhalt darin und leiten Sie ihn dann an den ursprünglichen Handler weiter. Pushwoosh führt weiterhin das Zustellereignis, das Badge, den Anhang und den Timeout-Fallback aus.

import UserNotifications
import PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
super.didReceive(request) { content in
let mutable = (content.mutableCopy() as? UNMutableNotificationContent) ?? content
// Ändern Sie hier den Inhalt der Benachrichtigung...
contentHandler(mutable)
}
}
}

Info.plist

Anchor link to

Die Erweiterung erbt Pushwoosh_APPID (und andere Pushwoosh_*-Schlüssel) von der Host-App, sodass Sie sie nicht in der Info.plist der Erweiterung duplizieren müssen. Fügen Sie dort nur dann einen Schlüssel hinzu, wenn Sie den Host-Wert überschreiben möchten.

Um die Badge-Anzahl und die Reverse-Proxy-Einstellungen mit der App zu synchronisieren, teilen Sie eine App Group zwischen der App und der Erweiterung. Fügen Sie die App Groups-Capability zu beiden Zielen hinzu und setzen Sie dann die App Group ID in der Info.plist der Haupt-App:

  • PW_APP_GROUPS_NAME - Ihr App Group-Identifier (zum Beispiel group.com.example.app).

Die Erweiterung erbt diesen Wert von der Host-App, sodass Sie ihn nicht in der Info.plist der Erweiterung wiederholen müssen – fügen Sie ihn dort nur hinzu, um den Host zu überschreiben. Alternativ können Sie ihn im Code bereitstellen, indem Sie pushwooshAppGroupsName überschreiben.

5. Projekt ausführen

Anchor link to
  1. Erstellen und führen Sie das Projekt aus.
  2. Gehen Sie zum Pushwoosh Control Panel und senden Sie eine Push-Benachrichtigung.
  3. Sie sollten die Benachrichtigung in der App sehen.

Erweiterte Pushwoosh iOS-Integration

Anchor link to

In diesem Stadium haben Sie das SDK bereits integriert und können Push-Benachrichtigungen senden und empfangen. Lassen Sie uns nun die Kernfunktionalität erkunden.

Push-Benachrichtigungen

Anchor link to

Im Pushwoosh SDK gibt es zwei Callbacks, die für die Verarbeitung von Push-Benachrichtigungen konzipiert sind:

  • onMessageReceived: Diese Methode wird aufgerufen, wenn eine Push-Benachrichtigung empfangen wird.
  • onMessageOpened: Diese Methode wird aufgerufen, wenn der Benutzer mit der Benachrichtigung interagiert (sie öffnet).

Diese Callbacks ermöglichen es Entwicklern, den Empfang und die Benutzerinteraktion mit Push-Benachrichtigungen in ihren Anwendungen zu verwalten.

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

Benutzerkonfiguration

Anchor link to

Indem Sie sich auf das individuelle Benutzerverhalten und die Vorlieben konzentrieren, können Sie personalisierte Inhalte liefern, was zu einer erhöhten Benutzerzufriedenheit und -loyalität führt.

import PushwooshFramework
class Registration {
func afterUserLogin(user: User) {
let pushwoosh = Pushwoosh.configure
// Benutzer-ID setzen
if let userId = user.userId {
pushwoosh.setUserId(userId)
}
// Benutzer-E-Mail setzen
if let userEmail = user.email {
pushwoosh.setEmail(userEmail)
}
// Benutzer-SMS-Nummer setzen
if let userSmsNumber = user.SmsNumber {
pushwoosh.registerSmsNumber(userSmsNumber)
}
// Benutzer-WhatsApp-Nummer setzen
if let userWhatsAppNumber = user.WhatsAppNumber {
pushwoosh.registerSmsNumber(userWhatsAppNumber)
}
// Zusätzliche Benutzerinformationen als Tags für Pushwoosh setzen
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
])
}
}
}

Tags sind Schlüssel-Wert-Paare, die Benutzern oder Geräten zugewiesen werden und eine Segmentierung basierend auf Attributen wie Vorlieben oder Verhalten ermöglichen, was gezieltes Messaging ermöglicht.

import PushwooshFramework
class UpdateUser {
func afterUserUpdateProfile(user: User) {
let pushwoosh = Pushwoosh.configure
// Liste der bevorzugten Kategorien setzen
pushwoosh.setTags(["favorite_categories" : user.getFavoriteCategories()])
// Zahlungsinformationen setzen
pushwoosh.setTags([
"is_subscribed": user.isSubscribed(),
"payment_status": user.getPaymentStatus(),
"billing_address": user.getBillingAddress()
])
}
}

Events sind spezifische Benutzeraktionen oder Vorkommnisse innerhalb der App, die verfolgt werden können, um das Verhalten zu analysieren und entsprechende Nachrichten oder Aktionen auszulösen.

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
// Kaufereignis verfolgen
PWInAppManager.shared().postEvent("purchase", withAttributes: [
"product_id": product.getId(),
"product_name": product.getName(),
"price": product.getPrice(),
"quantity": product.getQuantity()
])
// Benutzer-Tags setzen
let lastPurchaseDate = Date().timeIntervalSince1970
let lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice()
pushwoosh.setTags([
"last_purchase_date": lastPurchaseDate,
"lifetime_spend": lifetimeSpend
])
}
}

Rich Media

Anchor link to

Rich Media bezieht sich auf interaktive und multimediale Inhalte wie Bilder, Videos oder HTML, die in Benachrichtigungen und In-App-Nachrichten verwendet werden, um die Benutzerbindung zu erhöhen.

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

Fehlerbehebung

Anchor link to

Fehler beim Erstellen des Moduls ‘PushwooshFramework’

Anchor link to

Beim Erstellen Ihres Projekts kann ein Fehler auftreten, der dem folgenden ähnelt:

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

Ursache: Dieser Fehler hängt nicht mit einer Inkompatibilität der Swift-Compiler-Version zusammen. Ab der Pushwoosh iOS SDK-Version 6.8.0 ist das SDK in mehrere Komponenten modularisiert, die miteinander interagieren. Der Fehler tritt auf, wenn nicht alle erforderlichen Frameworks zu Ihrem Projekt hinzugefügt wurden.

Lösung: Stellen Sie sicher, dass alle vier erforderlichen Frameworks zu Ihrem App-Ziel hinzugefügt werden, wenn Sie über den Swift Package Manager integrieren:

  • PushwooshFramework
  • PushwooshCore
  • PushwooshBridge
  • PushwooshLiveActivities

Um dies in Xcode zu überprüfen:

  1. Wählen Sie Ihr Projekt im Project Navigator aus
  2. Wählen Sie Ihr App-Ziel aus
  3. Gehen Sie zu General > Frameworks, Libraries, and Embedded Content
  4. Bestätigen Sie, dass alle vier Frameworks aufgeführt sind

Wenn Sie während des Integrationsprozesses auf Probleme stoßen, lesen Sie bitte den Abschnitt Support und Community.