Zum Inhalt springen

Anpassen des iOS SDK

Integration

Anchor link to

Deep Linking

Anchor link to

Fügen Sie in Ihrer Info.plist-Datei ein 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 früher oder SceneDelegate.m für iOS 13 und höher) die entsprechende openURL-Delegate-Funktion 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
}

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
}
Anchor link to

Universal Links ermöglichen es Benutzern, Ihre App direkt zu öffnen, wenn sie auf einen Link zu Ihrer Website tippen. Im Gegensatz zu benutzerdefinierten URL-Schemata verwenden Universal Links Standard-https://-URLs und bieten eine nahtlosere Benutzererfahrung.

Wie es funktioniert

Anchor link to

Wenn eine Push-Benachrichtigung eine https://-URL enthält (im Parameter „url“ oder „l“), wird das SDK:

  1. Eine NSUserActivity mit der URL erstellen
  2. Den Universal-Links-Handler Ihrer App aufrufen (scene:continueUserActivity: oder application:continueUserActivity:restorationHandler:)
  3. Wenn Ihre App die URL nicht verarbeitet, wird sie als Fallback in Safari geöffnet

Einrichtung

Anchor link to
  1. Konfigurieren Sie Associated Domains in Xcode

Fügen Sie die Associated Domains-Fähigkeit zu Ihrer App hinzu und fügen Sie Ihre Domain hinzu:

applinks:yourdomain.com
  1. Hosten Sie die Apple App Site Association-Datei

Erstellen Sie eine apple-app-site-association-Datei auf Ihrem Webserver unter https://yourdomain.com/.well-known/apple-app-site-association:

{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAM_ID.com.your.bundleid",
"paths": ["/path/*", "/promotion/*"]
}
]
}
}

Ersetzen Sie TEAM_ID durch Ihre Apple Developer Team ID und com.your.bundleid durch den Bundle Identifier Ihrer App.

  1. Implementieren Sie den Universal-Links-Handler

SceneDelegate.swift (iOS 13+)

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL else {
return
}
// Handle the Universal Link URL
let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
let path = components?.path
if path?.starts(with: "/promotion") == true {
// Navigate to promotion screen
let promotionId = components?.queryItems?.first(where: { $0.name == "id" })?.value
// Show promotion with promotionId
}
}

AppDelegate.swift (iOS 12 und früher, oder als Fallback)

func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL else {
return false
}
// Handle the Universal Link URL
let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
let path = components?.path
if path?.starts(with: "/promotion") == true {
// Navigate to promotion screen
return true
}
return false
}
Anchor link to

Verwenden Sie beim Erstellen einer Push-Benachrichtigung Ihre Website-URL im Feld Aktion:

https://yourdomain.com/promotion?id=123

Das SDK leitet diese URL automatisch an Ihren Universal-Links-Handler weiter, sodass Sie den Benutzer zum entsprechenden Bildschirm in Ihrer App navigieren können.

Tracking von In-App-Käufen

Anchor link to

Standardmäßig ist das Tracking von In-App-Käufen deaktiviert. Wenn Sie In-App-Käufe beim Konfigurieren 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: delegate-Methode die sendSKPaymentTransactions-Methode von 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
}
InAppTrackingViewController.swift

Geozones-Push-Benachrichtigungen

Anchor link to

Geozones-Push-Benachrichtigungen sind in einem separaten Framework PushwooshGeozones gekapselt.

  1. Fügen Sie PushwooshGeozones.framework zu Ihrem Projekt hinzu

Um PushwooshGeozones.framework mit einem Abhängigkeitsmanager zu Ihrem Projekt hinzuzufügen, fügen Sie die folgenden Zeilen in Ihre podfile oder cartfile ein:

pod 'PushwooshXCFramework/Geozones'

Alternativ können Sie das Framework einfach per Drag & Drop in Link Binaries With Libraries in den Build Phases Ihres Projekts ziehen.

  1. 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 Pop-up-Dialog 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>

  1. Importieren Sie das Framework
import PushwooshGeozones
  1. Starten Sie das Geozones-Tracking
PWGeozonesManager.shared()?.startLocationTracking()

GitHub-Referenz

override func viewDidLoad() {
super.viewDidLoad()
// Start Geozones tracking when needed
PWGeozonesManager.shared().startLocationTracking()
}

Erstellen einer Rich-Media-Warteschlange

Anchor link to

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

  1. 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];
}
@end

2. Setzen Sie den Delegaten:

[PWRichMediaManager sharedManager].delegate = [ChainedRichMediaPresentingDelegate new];

Automatisches Abspielen eines Videos, das in einer Rich Notification mit Force Touch gesendet wird

Anchor link to

Um ein Video, das als Rich Notification-Anhang gesendet wird, automatisch abzuspielen, wenn die Benachrichtigung ohne Benutzerinteraktion erweitert wird, folgen Sie den unten stehenden Schritten:

  1. 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.
  • Geben Sie ihr einen Namen und schließen Sie die Einrichtung ab.
Notification Content Extension - iOS Rich Push Notification

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

Activate Notification Content Scheme
  1. Passen Sie die Eigenschaften und Methoden in der Content Extension wie folgt an:
import UIKit
import UserNotifications
import UserNotificationsUI
import 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()
}
  1. Fügen Sie eine UIView in MainInterface.storyboard ein:
UIView im MainInterface.storyboard
  1. Verknüpfen Sie das playerBackgroundView IBOutlet mit der gerade hinzugefügten UIView:
Verknüpfen Sie das playerBackgroundView IBOutlet mit UIView
  1. Aktualisieren Sie die info.plist-Datei mit dem folgenden Eintrag:
UNNotificationExtensionUserInteractionEnabled = true
UNNotificationExtensionUserInteractionEnabled = true

Um ein Video an Ihre Benachrichtigung anzuhängen, geben Sie die URL eines Videos in das Feld Medienanhang im Control Panel ein:

URL des Videos im Feld Medienanhang im Pushwoosh Control Panel

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 to

Um einen benutzerdefinierten Ton abzuspielen, wenn eine Push-Benachrichtigung empfangen wird, legen Sie die Audiodatei zuerst in den Stammordner Ihres Projekts.

Geben Sie dann den Namen der Tondatei in den Push-Parametern an – füllen Sie das Feld Ton 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-Ton 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.

Provisorische iOS-Push-Benachrichtigungen

Anchor link to

Wie es funktioniert

Anchor link to

Provisorische Push-Benachrichtigungen erscheinen leise in der Mitteilungszentrale des Benutzers, aber nicht auf dem Sperrbildschirm. Diese Art von Push-Benachrichtigungen muss nicht explizit von einem Benutzer erlaubt werden: Sie können sie senden, sobald ein Benutzer Ihre App installiert und startet.

Benutzer können sich jedoch weiterhin für Ihre prominenten Push-Benachrichtigungen anmelden: Beim Öffnen der provisorischen Push-Benachrichtigung haben sie zwei Optionen, um ihre Erfahrung zu wählen – die Push-Benachrichtigungen in der Mitteilungszentrale ohne Warnungen und Töne zu behalten oder Ihnen zu erlauben, Push-Benachrichtigungen prominent zu senden, sodass sie auf dem Sperrbildschirm erscheinen.

Provisorische Push-Benachrichtigungen sollen es Benutzern ermöglichen, fundierte Entscheidungen darüber zu treffen, ob sie Benachrichtigungen von Ihrer App erhalten möchten. Da die native APN-Abonnementanfrage den Benutzern nur einmal angezeigt wird und sie sich später in den Systemeinstellungen ihres Telefons anmelden müssen, abonnieren einige Benutzer möglicherweise nicht, da sie nicht wissen, welchen Wert sie mit Ihren Push-Benachrichtigungen erhalten. Provisorische Push-Benachrichtigungen 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 to

1. Integrieren Sie das Pushwoosh iOS SDK, indem Sie der Anleitung folgen.

2. Fügen Sie die folgende Zeichenfolge zum AppDelegate Ihres Projekts hinzu, bevor Sie die Methode registerForPushNotifications() aufrufen:

if #available(iOS 12.0, *) {
Pushwoosh.sharedInstance().additionalAuthorizationOptions = UNAuthorizationOptions.provisional
}

Das ist alles! App-Benutzer erhalten Nachrichten direkt in ihre Mitteilungszentrale, sobald sie die App installieren.

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.