Zum Inhalt springen

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.

InboxKit-Feed mit Banner-, beschrifteten und klassischen Karten mit Inline-Buttons und Ungelesen-Indikatoren

Standard-InboxKit-Feed mit Banner-, beschrifteten und klassischen Karten.

Wann sollte man InboxKit verwenden

Anchor link to

Verwenden 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 über attributes.forceCellKind erzwungen werden.
  • Inline-CTA-Buttons mit einem typisierten PushwooshInboxButtonAction-Enum (openURL, dismiss, markRead, custom). Das SDK behandelt die ersten drei automatisch; Ihr Delegate leitet custom an Ihre eigene Logik weiter.
  • Anpinn-Unterstützung: Nachrichten mit actionParams["pinned"] == true schweben 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

Benutzerdefinierte Daten aus einer Nachricht lesen

Anchor link to

Damit 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:

POST https://api.pushwoosh.com/json/1.3/createMessage
{
"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 to

Eine 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:

POST https://api.pushwoosh.com/json/1.3/createMessage
{
"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:

FeldTypWann
titlestringErforderlich. Sichtbare Button-Beschriftung.
urlstringEine nicht leere, analysierbare URL erzeugt eine openURL-Aktion. Das SDK öffnet sie über UIApplication.shared.open, es sei denn, Ihr Delegate unterdrückt dies.
actionstringExplizites 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 andereanyWenn 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
}
}
}