Pushwoosh InboxKit für iOS einrichten
Verfügbar seit iOS SDK 7.0.40.
Pushwoosh InboxKit liefert einen modernen UIKit-Inbox-Bildschirm, der auf dem bestehenden Inbox-Backend aufbaut. Drei Standard-Zellenlayouts decken die gängigen Content-Card-Formen im Braze-Stil ab, Inline-CTA-Buttons behandeln die häufigsten Interaktionen, und die gesamte Oberfläche ist für Subclassing offen, falls Sie ein individuelles Aussehen benötigen.

Standard-InboxKit-Feed mit Banner-, beschrifteten und klassischen Karten.
Wann sollte man InboxKit verwenden
Anchor link toVerwenden Sie InboxKit für jede neue iOS-Integration. Es ist der empfohlene Ersatz für das ältere Objective-C-Modul PushwooshInboxUI.
InboxKit bietet Ihnen:
- Drei integrierte Zelltypen – Banner, beschriftet, klassisch – die pro Nachricht über
actionParams["displayType"]aus Ihrer Push-Payload ausgewählt oder per Code überattributes.forceCellKinderzwungen werden. - Inline-CTA-Buttons mit einem typisierten
PushwooshInboxButtonAction-Enum (openURL,dismiss,markRead,custom). Das SDK behandelt die ersten drei automatisch; Ihr Delegate leitetcustoman Ihre eigene Logik weiter. - Anpinn-Unterstützung: Nachrichten mit
actionParams["pinned"] == trueschweben an den Anfang des Feeds und rendern ein Anpinn-Symbol. - Wischen zum Löschen, Ziehen zum Aktualisieren, automatisches Als-gelesen-Markieren beim Verschwinden – alles umschaltbar über
PushwooshInboxKitAttributes. - Persistenter Speicher: Löschungen und Gelesen-Status überstehen einen Prozessneustart, auch wenn der Netzwerkaufruf noch nicht bestätigt wurde.
- Eine offene
PushwooshInboxCell-Basisklasse für vollständig benutzerdefinierte Layouts.
Der Serververtrag bleibt unverändert – das gleiche Pushwoosh-Inbox-Backend, die gleichen Payloads und Dashboard-Tools funktionieren wie zuvor.
Wählen Sie Ihre Integrationsmethode
Anchor link to- InboxKit mit Swift Package Manager einrichten – empfohlen für neue Projekte.
- InboxKit mit CocoaPods einrichten – für Projekte, die bereits CocoaPods verwenden.
Benutzerdefinierte Daten aus einer Nachricht lesen
Anchor link toDamit ein Push in der Inbox erscheint, muss die createMessage-Anfrage der Messages API inbox_image, inbox_date oder inbox_days enthalten – ohne eines dieser Felder wird der Push als reguläre Benachrichtigung zugestellt und erreicht niemals den Inbox-Feed. Freiform-benutzerdefinierte Daten werden unter dem data-Schlüssel abgelegt, den das SDK als u-Parameter an den Client liefert:
{ "request": { "application": "XXXXX-XXXXX", "auth": "API_TOKEN", "notifications": [{ "send_date": "now", "ios_title": "Summer sale", "content": "30% off everything — limited time only", "inbox_image": "https://cdn.example.com/inbox/summer.png", "inbox_days": 7, "data": { "promo_id": "SUMMER2026", "screen": "promo_details" }, "ios_root_params": { "displayType": "captioned" }, "platforms": [1] }] }}Das SDK stellt dieses Objekt auf der Inbox-Nachricht über actionParams zur Verfügung. Lesen Sie es vom Delegate aus, wenn der Benutzer auf die Zeile oder einen Inline-CTA tippt:
extension MyInboxHost: PushwooshInboxKitDelegate {
func inboxKit(_ vc: PushwooshInboxKitViewController, didSelect message: PWInboxMessageProtocol) -> Bool { guard let params = message.actionParams as? [String: Any] else { return true }
// Das benutzerdefinierte `data`-Objekt kommt unter dem Schlüssel "u" an – // entweder als verschachteltes Dictionary oder als JSON-kodierter String, // je nachdem, wie die Payload im Vorfeld erstellt wurde. let custom: [String: Any]? = { if let dict = params["u"] as? [String: Any] { return dict } if let raw = params["u"] as? String, let bytes = raw.data(using: .utf8), let parsed = try? JSONSerialization.jsonObject(with: bytes) as? [String: Any] { return parsed } return nil }()
if let promoId = custom?["promo_id"] as? String { navigateToPromo(promoId) return false // wir haben das Tippen behandelt; das SDK sollte die Standardaktion nicht ausführen } return true }}Die gleiche actionParams["u"]-Suche funktioniert innerhalb von inboxKit(_:didTapButton:onMessage:) für Inline-CTA-Buttons. Für die typisierten CTA-Fälle (openURL, dismiss, markRead) führt das SDK bereits die Standardaktion aus – geben Sie true zurück, um dieses Verhalten beizubehalten, oder false, um es zu unterdrücken und Ihre eigene auszuführen.
Inline-CTA-Buttons hinzufügen
Anchor link toEine Nachricht kann bis zu drei Inline-Call-to-Action-Buttons enthalten. Buttons befinden sich neben anderen benutzerdefinierten Daten innerhalb von data als buttons-Array. Das SDK rendert sie automatisch in den beschrifteten und klassischen Zellen:
{ "request": { "application": "XXXXX-XXXXX", "auth": "API_TOKEN", "notifications": [{ "send_date": "now", "ios_title": "New promo card", "content": "Tap a button to claim or save", "inbox_image": "https://cdn.example.com/inbox/promo.png", "inbox_days": 7, "data": { "promo_id": "SUMMER2026", "buttons": [ { "title": "Claim", "url": "https://example.com/promo/SUMMER2026" }, { "title": "Read", "action": "markRead" }, { "title": "Save", "action": "custom", "tag": "save_promo" } ] }, "ios_root_params": { "displayType": "captioned" }, "platforms": [1] }] }}Jedes Button-Objekt hat diese Felder:
| Feld | Typ | Wann |
|---|---|---|
title | string | Erforderlich. Sichtbare Button-Beschriftung. |
url | string | Eine nicht leere, analysierbare URL erzeugt eine openURL-Aktion. Das SDK öffnet sie über UIApplication.shared.open, es sei denn, Ihr Delegate unterdrückt dies. |
action | string | Explizites Aktions-Token: dismiss (entfernt die Nachricht aus dem Feed), markRead (markiert die Nachricht als gelesen) oder custom (vom Host behandelt). Groß- und Kleinschreibung wird nicht beachtet. |
| Alles andere | any | Wenn action custom ist, wird jeder Schlüssel auf dem Button-Objekt außer title und action als benutzerdefinierte Payload an Ihren Delegate weitergeleitet – einigen Sie sich mit dem Marketer auf einen Schlüssel (z. B. tag) und führen Sie die Verteilung darauf basierend durch. |
Auflösungspriorität: Zuerst das explizite action-Token, dann url, falls nicht leer, andernfalls fällt der Button in custom und trägt die volle Payload (ohne title und action).
Fangen Sie Taps von Ihrem Delegate ab. Die button.action-Eigenschaft ist das typisierte PushwooshInboxButtonAction-Enum:
extension MyInboxHost: PushwooshInboxKitDelegate {
func inboxKit(_ vc: PushwooshInboxKitViewController, didTapButton button: PushwooshInboxButton, onMessage message: PWInboxMessageProtocol) -> Bool { switch button.action { case .openURL(let url): // Standardverhalten ist in Ordnung – lassen Sie das SDK die URL öffnen. return true
case .dismiss, .markRead: // Das SDK behandelt beides. Geben Sie false zurück, wenn Sie es überschreiben möchten. return true
case .custom(let payload): // Vom Marketer definierter benutzerdefinierter Button. Führen Sie die Verteilung basierend auf einem vereinbarten Schlüssel durch. if let tag = payload["tag"] as? String { switch tag { case "save_promo": saveCurrentPromoLocally(message: message) default: break } } return true // wird für custom ignoriert – das SDK führt hier niemals eine Standardaktion aus } }}