Benutzerdefinierte Daten senden
Diese Anleitung hilft Ihnen, besser zu verstehen, wie Sie benutzerdefinierte Daten in der Push-Benachrichtigungs-Payload an Ihre Apps übergeben können, damit Ihre App auf solche Pushes reagieren und entsprechend verschiedene Aktionen ausführen kann.
Die Art und Weise, wie Sie benutzerdefinierte Daten handhaben, kann je nach Ihren Geschäftszielen variieren. In diesem Artikel zeigen wir einige grundlegende Beispiele für das Parsen von benutzerdefinierten Daten und die Durchführung einfacher Aktionen:
- Ändern der Hintergrundfarbe der App;
- Öffnen einer benutzerdefinierten Seite in Ihrer App.
Voraussetzungen
Anchor link toDiese Anleitung behandelt die native iOS-Entwicklung. Es wird davon ausgegangen, dass Sie eine iOS-Beispielanwendung konfiguriert haben und Push-Benachrichtigungen gemäß der Anleitung für die ersten Schritte mit iOS erhalten.
In AppDelegate in der Funktion didFinishLaunchingWithOptions werden wir self.viewController als Delegat für die Verarbeitung von Push-Benachrichtigungen verwenden:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { Pushwoosh.sharedInstance().delegate = self.viewController Pushwoosh.sharedInstance().registerForPushNotifications()
if let launchOptions = launchOptions { Pushwoosh.sharedInstance().handlePushReceived(launchOptions) } return true}Unser ViewController implementiert das PWMessagingDelegate-Protokoll:
extension ViewController: PWMessagingDelegateUnd hat daher die Funktion onMessageOpened, die empfangene Push-Benachrichtigungen verarbeitet:
// User pressed on the push notificationfunc pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) {}Einen anderen ViewController öffnen und die Hintergrundfarbe ändern
Anchor link toJetzt erhalten wir customData aus der Push-Payload. Lassen Sie uns zum Beispiel die Hintergrundfarbe der Ansicht und den Rabattprozentsatz ändern. Wir gehen davon aus, dass die benutzerdefinierten Daten die Elemente „r“, „g“, „b“ und „d“ im JSON-Objektformat wie folgt enthalten werden:
guard let customDataJson = message.customData, let redString = customDataJson["r"] as? String, let greenString = customDataJson["g"] as? String, let blueString = customDataJson["b"] as? String, let discount = customDataJson["d"] as? String else { return}setViewBackgroundColor(red: redString, green: greenString, blue: blueString, discount: discount)Wir werden die folgende Funktion verwenden, um einen neuen ViewController zu öffnen und die Hintergrundfarbe sowie den Rabattprozentsatz festzulegen:
func setViewBackgroundColor(red: String, green: String, blue: String, discount: String) { let red = CGFloat((red as NSString).floatValue) let green = CGFloat((green as NSString).floatValue) let blue = CGFloat((blue as NSString).floatValue)
let color = UIColor(red: red / 255.0, green: green / 255.0, blue: blue / 255.0, alpha: 1)
if let topController = UIApplication.shared.topMostController() { let storyboard = UIStoryboard(name: "Main", bundle: nil) if let customViewController = storyboard.instantiateViewController(withIdentifier: "custom_page") as? CustomPageViewController { customViewController.discount = discount customViewController.bgColor = color topController.present(customViewController, animated: true, completion: nil) } }}Testen wir unser Beispiel. Navigieren Sie zu Pushwoosh Journey und fügen Sie ein Push-Element zur Leinwand hinzu. Klicken Sie als Nächstes auf Neuen Inhalt erstellen. Geben Sie im sich öffnenden Formular für den Push-Inhalt einen beliebigen Text für die Push-Benachrichtigung ein.

Aktivieren Sie dann den Schalter Benutzerdefinierte Daten senden. Fügen Sie das JSON in das Feld für benutzerdefinierte Daten ein.
Da wir uns entschieden haben, dass unser benutzerdefiniertes Datenformat ein JSON-Objekt mit den Werten „r“, „g“, „b“ sein wird, müssen wir das Feld „Benutzerdefinierte Daten“ im Control Panel verwenden und es mit dem JSON-Objekt {"r":"30", "g":"144", "b":"255", "d":"25"} füllen:

Nach dem Tippen auf die Push-Benachrichtigung öffnet sich der CustomPageViewController, die Hintergrundfarbe wird festgelegt und der Rabatt wird angewendet:

Code des CustomPageViewController:
class CustomPageViewController: UIViewController {
var bgColor: UIColor? var discount: String?
@IBOutlet weak var titleLabel: UILabel!
override func viewDidLoad() { super.viewDidLoad()
self.view.backgroundColor = self.bgColor
if self.discount != nil { self.titleLabel?.text = "ONLY TODAY GET \(self.discount!)% DISCOUNT!" } }
func showPromoPage(discount: String) { let vc = CustomPageViewController() vc.bgColor = self.view.backgroundColor vc.discount = discount vc.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
if self.presentedViewController != nil { self.dismiss(animated: true, completion: { self.present(vc, animated: true, completion: nil) }) } else { self.present(vc, animated: true, completion: nil) } }
@IBAction func closeButtonAction(_ sender: Any) { self.dismiss(animated: true) }}Wir gehen davon aus, dass der Rabattwert als Parameter „d“ im JSON der Push-Benachrichtigungs-Payload übergeben wird. Da die Payloads von Push-Benachrichtigungen in ihrer Größe begrenzt sind, sollten Sie eher kurze Namen für die Parameter verwenden.
guard let customDataJson = message.customData, let redString = customDataJson["r"] as? String, let greenString = customDataJson["g"] as? String, let blueString = customDataJson["b"] as? String, let discount = customDataJson["d"] as? String else { return}Sie können Code schreiben, um verschiedene View Controllers zu initialisieren und zu öffnen, abhängig von den Parametern, die Sie in der Push-Benachrichtigungs-Payload übergeben.
Öffnen des A/B-Testing View Controllers
Anchor link toBetrachten wir einen weiteren Anwendungsfall für benutzerdefinierte Daten in einer Push-Benachrichtigung. Zum Beispiel müssen wir einen View Controller für ein Benutzersegment und einen anderen View Controller für ein anderes Benutzersegment öffnen. Einfach ausgedrückt, können wir benutzerdefinierte Daten für A/B-Tests in Ihrer Anwendung verwenden.
Erstellen wir zwei View Controllers. Ein Controller (A) wird mit einem Rabattwert geöffnet, und der zweite Controller (B) wird mit einem anderen Rabattparameter geöffnet.
Schreiben wir nun den Code, der den entsprechenden View Controller basierend auf der Push-Benachrichtigungs-Payload öffnet:
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { // MARK: - A/B Testing via Custom Data guard let customDataJson = message.customData, let viewController = customDataJson["vc"] as? String else { return }
if viewController == "A" { setControllerA() } else if viewController == "B" { setControllerB() }}
func setControllerA() { if let topController = UIApplication.shared.topMostController() { let storyboard = UIStoryboard(name: "Main", bundle: nil) if let customViewController = storyboard.instantiateViewController(withIdentifier: "a_vc") as? AViewController { customViewController.discountA = "50" topController.present(customViewController, animated: true, completion: nil) } }}
func setControllerB() { if let topController = UIApplication.shared.topMostController() { let storyboard = UIStoryboard(name: "Main", bundle: nil) if let customViewController = storyboard.instantiateViewController(withIdentifier: "b_vc") as? BViewController { customViewController.discountB = "100" topController.present(customViewController, animated: true, completion: nil) } }}Fügen Sie Ihr JSON in das Feld für benutzerdefinierte Daten ein.
{ "vc": "A"}
// Wählen Sie Ihre benutzerdefinierten Daten (A oder B)
{ "vc": "B"}Abhängig von den benutzerdefinierten Daten, die Sie in der Push-Payload gesendet haben, entweder 'vc': 'A' oder 'vc': 'B', wird ein Segment von Benutzern einen Controller öffnen, während ein anderes Segment von Benutzern einen anderen Controller öffnet.
View Controller „A“
Anchor link to
View Controller „B“
Anchor link to
Ändern des App-Symbols per Push-Benachrichtigung
Anchor link toEin weiteres Beispiel, wie wir Push-Benachrichtigungen in iOS verwenden können, ist das Ändern des App-Symbols.
Fügen wir zunächst drei verschiedene Symbole zu den Assets hinzu. Eines wird als Standard-App-Symbol verwendet, während die anderen beiden sich basierend auf den benutzerdefinierten Daten in der Push-Benachrichtigung ändern.

Um alternative App-Symbole in Ihrer iOS-Anwendung zu aktivieren, müssen Sie die erforderliche Konfiguration in der Datei Info.plist hinzufügen. Hier sind die Schritte dazu:
<key>CFBundleIcons</key><dict> <key>CFBundleAlternateIcons</key> <dict> <key>AppIcon-2</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon-2</string> </array> <key>UIPrerenderedIcon</key> <true/> </dict> <key>AppIcon-3</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon-3</string> </array> <key>UIPrerenderedIcon</key> <true/> </dict> </dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon-1</string> </array> <key>UIPrerenderedIcon</key> <true/> </dict></dict>Im Callback pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) können Sie den Code hinzufügen, um das App-Symbol basierend auf den in der Push-Benachrichtigung empfangenen benutzerdefinierten Daten zu ändern. So können Sie dies implementieren:
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { // MARK: - Change the app icon dynamically guard let customDataJson = message.customData, let appIcon = customDataJson["i"] as? String else { return }
UIApplication.shared.setAlternateIconName(appIcon) { error in if let error = error { print(error.localizedDescription) } else { print("Success!") } }}Fügen Sie den JSON-Code hinzu:
{ "i": "AppIcon-2"}
Wenn Sie auf die Push-Benachrichtigung tippen, fordert das System Sie auf, das App-Symbol auf dem Gerät zu ändern.

Sie finden das Projekt, das benutzerdefinierte Daten verwendet, auf GitHub.