Anpassen des iOS SDK
Integration
Anchor link to- Deep Linking
- In-App-Kauf-Tracking
- Geozones-Push-Benachrichtigungen
- Erstellen einer Rich-Media-Warteschlange
- Automatisches Abspielen eines Videos, das in einer Rich Notification mit Force Touch gesendet wurde
- Benutzerdefinierter Push-Ton
- iOS Provisional Push
Deep Linking
Anchor link toFügen Sie in Ihrer Info.plist-Datei das URL types-Array mit URL Identifier und URL Scheme hinzu.
Im folgenden Beispiel ist das URL Scheme com.pushwoosh und der URL Identifier ist promotion.

Fügen Sie in Ihrer App-Delegate-Datei (normalerweise AppDelegate.m für iOS 12 und älter oder SceneDelegate.m für iOS 13 und neuer) die entsprechende openURL-Delegatfunktion hinzu, wie im folgenden Beispiel beschrieben. Das Beispiel prüft auf die richtige Seite, parst den „id“-Wert aus der URL und öffnet als Reaktion den PromoPageViewController.
AppDelegate.swift
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { let components = URLComponents(url: url, resolvingAgainstBaseURL: false) let page = components?.host var promotionId: String?
if page == "promotion" { return }
let items = components?.queryItems ?? []
for item in items { if item.name == "id" { promotionId = item.value } }
//show PromoPageViewController}- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; NSString *page = components.host; NSString *promotionId = nil;
//return if this is not a promotion deep link if(![page isEqualToString:@"promotion"]) return NO;
for(NSURLQueryItem *item in components.queryItems) { if([item.name isEqualToString:@"id"]) promotionId = item.value; }
PromoPageViewController *vc = [[PromoPageViewController alloc] init]; vc.promotionId = promotionId [self presentViewController:vc animated:YES completion:nil];}SceneDelegate.swift
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { guard let urlContext = URLContexts.first else { return }
let components = URLComponents(url: urlContext.url, resolvingAgainstBaseURL: false) let page = components?.host var promotionId: String?
guard page == "promotion" else { return }
let items = components?.queryItems ?? []
for item in items { if item.name == "id" { promotionId = item.value } }
//show PromoPageViewController}- (void)scene:(UIWindowScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts { UIOpenURLContext *urlContext = URLContexts.anyObject; if (!urlContext) { return; }
NSURLComponents *components = [NSURLComponents componentsWithURL:urlContext.URL resolvingAgainstBaseURL:NO]; NSString *page = components.host; NSString *promotionId = nil;
if (![page isEqualToString:@"promotion"]) { return; }
for (NSURLQueryItem *item in components.queryItems) { if ([item.name isEqualToString:@"id"]) { promotionId = item.value; } }
//show PromoPageViewController}In-App-Kauf-Tracking
Anchor link toStandardmäßig ist das Tracking von In-App-Käufen deaktiviert. Wenn Sie In-App-Käufe bei der Konfiguration von Customer Journeys verfolgen möchten, setzen Sie das Flag Pushwoosh_PURCHASE_TRACKING_ENABLED in der info.plist-Datei auf true. Eine Liste der verfügbaren Flags finden Sie in der Tabelle.
Wenn Sie In-App-Käufe manuell verfolgen möchten, können Sie den folgenden Code verwenden.
Rufen Sie in der paymentQueue:updatedTransactions:-Delegatmethode die sendSKPaymentTransactions-Methode des PushManager auf.
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { // In-Apps Tracking Pushwoosh code here Pushwoosh.sharedInstance().sendSKPaymentTransactions(transactions) // the rest of the code, consume transactions, etc }- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
[[PushNotificationManager pushManager] sendSKPaymentTransactions:transactions];
//the rest of the code, consume transactions, etc}
Geozones-Push-Benachrichtigungen
Anchor link toGeozones-Push-Benachrichtigungen sind in einem separaten Framework PushwooshGeozones gekapselt.
- Fügen Sie das PushwooshGeozones.framework zu Ihrem Projekt hinzu
Um das PushwooshGeozones.framework mit einem Abhängigkeitsmanager zu Ihrem Projekt hinzuzufügen, fügen Sie die folgenden Zeilen in Ihre podfile- oder cartfile-Datei ein:
pod 'PushwooshXCFramework/Geozones'github "Pushwoosh/pushwoosh-ios-sdk"Wenn Sie PushwooshGeozones.xcframework verwenden möchten, geben Sie die folgende Paket-URL ein:
PushwooshGeozones-XCFramework
Alternativ können Sie das Framework einfach per Drag & Drop in Link Binaries With Libraries in den Build Phases Ihres Projekts ziehen.
- Fügen Sie die folgenden Schlüssel zu Ihrer Info.plist hinzu:
- NSLocationWhenInUseUsageDescription – (erforderlich), damit die App Geozones nur verfolgt, während sie im Vordergrund ausgeführt wird.
- NSLocationAlwaysAndWhenInUseUsageDescription – (erforderlich), damit die App Geozones sowohl im Vordergrund als auch im Hintergrund verfolgt und ein Dialogfeld zur Berechtigungsanfrage anzeigt.
- NSLocationAlwaysUsageDescription – (optional), damit die App Geozones jederzeit verfolgt; sollte verwendet werden, wenn Ihre App auf iOS 10 und frühere Versionen abzielt.
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key><string>for app to track Geozones in both conditions and to show a permission request dialog</string><key>NSLocationWhenInUseUsageDescription</key><string>for app to track Geozones only while running in the foreground</string>- Importieren Sie das Framework
import PushwooshGeozones#import <PushwooshGeozones/PWGeozonesManager.h>- Starten Sie das Geozones-Tracking
PWGeozonesManager.shared()?.startLocationTracking()[[PWGeozonesManager sharedManager] startLocationTracking];Beispiel
Anchor link tooverride func viewDidLoad() { super.viewDidLoad()
// Start Geozones tracking when needed PWGeozonesManager.shared().startLocationTracking()}- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view.
// Start Geozones tracking when needed [[PWGeozonesManager sharedManager] startLocationTracking];}Erstellen einer Rich-Media-Warteschlange
Anchor link toFalls mehrere Rich-Media-Seiten gleichzeitig angezeigt werden sollen (z. B. wenn Trigger-Ereignisse für zwei oder mehr In-Apps gleichzeitig stattfinden oder eine Rich-Media-Seite bereits angezeigt wird, wenn ein anderes Trigger-Ereignis auftritt), können Sie eine Warteschlange für die Anzeige von Rich-Media-Seiten einrichten. Um eine Warteschlange zu erstellen, folgen Sie den unten beschriebenen Schritten.
- Erstellen Sie eine Klasse, die PWRichMediaPresentingDelegate implementiert:
@interface ChainedRichMediaPresentingDelegate () <PWRichMediaPresentingDelegate>
@property (nonatomic) NSMutableArray *queue;
@property (nonatomic) BOOL inAppIsPresenting;
@end
@implementation ChainedRichMediaPresentingDelegate
- (instancetype)init { self = [super init];
if (self) { _queue = [NSMutableArray new]; }
return self;}
- (BOOL)richMediaManager:(PWRichMediaManager *)richMediaManager shouldPresentRichMedia:(PWRichMedia *)richMedia { [_queue addObject:richMedia]; return !_inAppIsPresenting;}
- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didPresentRichMedia:(PWRichMedia *)richMedia { _inAppIsPresenting = YES;}
- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didCloseRichMedia:(PWRichMedia *)richMedia { _inAppIsPresenting = NO;
[_queue removeObject:richMedia];
if (_queue.count) { [[PWRichMediaManager sharedManager] presentRichMedia:_queue.firstObject]; }}
- (void)richMediaManager:(PWRichMediaManager *)richMediaManager presentingDidFailForRichMedia:(PWRichMedia *)richMedia withError:(NSError *)error { [self richMediaManager:richMediaManager didCloseRichMedia:richMedia];}
@end2. Setzen Sie den Delegaten:
[PWRichMediaManager sharedManager].delegate = [ChainedRichMediaPresentingDelegate new];Automatisches Abspielen eines Videos, das in einer Rich Notification mit Force Touch gesendet wurde
Anchor link toUm ein als Anhang einer Rich Notification gesendetes Video automatisch abzuspielen, wenn die Benachrichtigung ohne Benutzerinteraktion erweitert wird, folgen Sie den unten stehenden Schritten:
- Fügen Sie die Notification Content Extension zu Ihrem Projekt hinzu:
- Wählen Sie in Xcode Datei > Neu > Ziel.
- Wählen Sie Notification Content Extension.
- Weisen Sie ihr einen Namen zu und schließen Sie die Einrichtung ab.

Wenn Sie mit der Meldung „Schema aktivieren“ aufgefordert werden, wählen Sie „Abbrechen“.

- Passen Sie die Eigenschaften und Methoden in der Content Extension wie folgt an:
import UIKitimport UserNotificationsimport UserNotificationsUIimport AVKit
class NotificationViewController: UIViewController, UNNotificationContentExtension { var playerController: AVPlayerViewController! @IBOutlet weak var playerBackgroundView: UIView!
override func viewDidLoad() { super.viewDidLoad() // Do any required interface initialization here. }
func didReceive(_ notification: UNNotification) { let attachment = notification.request.content.attachments.first
playerController = AVPlayerViewController() // Set height programmatically // preferredContentSize.height = 250
if let url = attachment?.url { setupVideoPlayer(url: url) } else { print("No valid URL...") } }
private func setupVideoPlayer(url: URL) { guard let playerController = self.playerController else { return } let player = AVPlayer(url: url) playerController.player = player playerController.view.frame = self.playerBackgroundView.bounds playerBackgroundView.addSubview(playerController.view) addChild(playerController) playerController.didMove(toParent: self) player.play() }- Integrieren Sie eine UIView in MainInterface.storyboard:

- Verknüpfen Sie das playerBackgroundView IBOutlet mit der gerade hinzugefügten UIView:

- Aktualisieren Sie die info.plist-Datei mit dem folgenden Eintrag:
UNNotificationExtensionUserInteractionEnabled = true
Um ein Video an Ihre Benachrichtigung anzuhängen, geben Sie die URL eines Videos in das Feld „Media Attachment“ im Control Panel ein:

Wenn Sie eine Benachrichtigung über eine API-/createMessage-Anfrage senden, fügen Sie die URL in den Parameter ‘ios_attachment’ ein und stellen Sie sicher, dass das Flag ‘mutable-content’ auf `1` gesetzt ist.
Benutzerdefinierter Push-Ton
Anchor link toUm beim Empfang einer Push-Benachrichtigung einen benutzerdefinierten Ton abzuspielen, legen Sie die Audiodatei zunächst in den Stammordner Ihres Projekts.

Geben Sie dann den Namen der Sounddatei in den Push-Parametern an – füllen Sie das Feld „Sound“ in den iOS-spezifischen Einstellungen Ihrer Nachricht aus oder geben Sie den Dateinamen als Wert für den Parameter „ios_sound“ der createMessage API-Anfrage an.
Die Audiodatei für einen benutzerdefinierten iOS-Sound muss in einem der folgenden Formate vorliegen: .aif, .caf, .wav. Stellen Sie sicher, dass Sie das Format im Dateinamen angeben; andernfalls wird es vom Pushwoosh iOS SDK ignoriert.
iOS Provisional Push
Anchor link toWie es funktioniert
Anchor link toProvisional Push-Benachrichtigungen erscheinen lautlos im Benachrichtigungscenter des Benutzers, aber nicht auf dem Sperrbildschirm. Diese Art von Push-Benachrichtigungen muss nicht explizit von einem Benutzer erlaubt werden: Sie können mit dem Senden beginnen, sobald ein Benutzer Ihre App installiert und startet.
Benutzer können jedoch weiterhin Ihre prominenten Push-Benachrichtigungen abonnieren: Beim Öffnen der Provisional Push haben sie zwei Möglichkeiten, ihre Erfahrung zu wählen – Push-Benachrichtigungen im Benachrichtigungscenter ohne Alarme und Töne zu behalten oder Ihnen zu erlauben, Push-Benachrichtigungen prominent zu senden, sodass sie auf dem Sperrbildschirm erscheinen.
Provisional Pushes sind so konzipiert, dass Benutzer fundierte Entscheidungen darüber treffen können, ob sie Benachrichtigungen von Ihrer App erhalten möchten. Da die native APN-Abonnementanfrage den Benutzern nur einmal angezeigt wird und sie zum späteren Abonnieren in die Systemeinstellungen ihres Telefons gehen müssen, abonnieren einige Benutzer möglicherweise nicht, da sie nicht wissen, welchen Wert sie mit Ihren Push-Benachrichtigungen erhalten. Provisional Pushes geben den Benutzern dieses Verständnis: Sie können sehen, welche Inhalte Sie in Push-Benachrichtigungen liefern, und entscheiden, ob sie über diese Inhalte prominent benachrichtigt werden müssen.
Wie man es implementiert
Anchor link to1. Integrieren Sie das Pushwoosh iOS SDK, indem Sie der Anleitung folgen.
2. Fügen Sie die folgende Zeichenfolge zur AppDelegate Ihres Projekts hinzu, bevor Sie die registerForPushNotifications()-Methode aufrufen:
if #available(iOS 12.0, *) { Pushwoosh.sharedInstance().additionalAuthorizationOptions = UNAuthorizationOptions.provisional}if (@available(iOS 12.0, *)) { [Pushwoosh sharedInstance].additionalAuthorizationOptions = UNAuthorizationOptionProvisional;}Das ist alles! App-Benutzer erhalten Nachrichten direkt in ihr Benachrichtigungscenter, sobald sie die App installieren.
Teilen 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.