Zum Inhalt springen

Syntax für native In-App-Vorlagen

Native In-Apps werden direkt vom SDK gerendert. Es ist kein WebView beteiligt. Anstelle einer index.html-Seite enthält die ZIP-Ressource eine native-config.json-Datei, die die Nachricht als strukturierte Daten beschreibt (Layout-Typ, Texte, Farben, Bilder, Schaltflächen). Das SDK liest diese Datei und zeichnet die entsprechende native Ansicht, was flüssigere Animationen und eine bessere Leistung als eine eingebettete Webseite ermöglicht.

Diese Anleitung dokumentiert das native-config.json-Schema: Felder, Typen und Beispiele für jeden Anzeigetyp. Informationen zum klassischen HTML-basierten Format finden Sie unter Syntax für Rich-Media-Vorlagen.

Voraussetzungen

Anchor link to

Native In-Apps erfordern:

  • iOS: SDK 7.2.0 oder neuer (7.2.1+ für Banner, Karussell und Sheet)
  • Android: SDK 6.10.0 oder neuer (6.10.1+ für Banner, Karussell und Sheet)

Noch ist nicht jeder Anzeigetyp auf beiden Plattformen verfügbar. Überprüfen Sie die Plattformunterstützung, bevor Sie sich auf ein bestimmtes Format verlassen.

Plattformunterstützung

Anchor link to
Anzeigetyp
iOS
Android
modal✅ 7.2.0+✅ 6.10.0+
fullscreen✅ 7.2.0+✅ 6.10.0+
stories✅ 7.2.0+✅ 6.10.0+
banner✅ 7.2.1+✅ 6.10.1+
carousel✅ 7.2.1+✅ 6.10.1+
sheet✅ 7.2.1+✅ 6.10.1+
videoNoch nicht verfügbar
pipNoch nicht verfügbar
scratchcardNoch nicht verfügbar
spinwheelNoch nicht verfügbar

Vorlagenstruktur

Anchor link to

Eine native In-App-Vorlage ist ein ZIP-Archiv, genau wie eine reguläre Rich-Media-Vorlage, außer dass das Stammverzeichnis eine native-config.json-Datei anstelle von index.html enthält:

<template>.zip
├── native-config.json ← erforderlich, Layout und Inhalt
├── pushwoosh.json ← optional, Lokalisierung (siehe unten)

Bilder und Videos, auf die von native-config.json verwiesen wird (image, poster, fallback, url bei pip/video), müssen absolute HTTPS-URLs sein. Das SDK lädt sie über das Netzwerk. Es liest keine lokalen Dateien aus dem Archiv.

Die Konfiguration selbst ist ein einzelnes JSON-Objekt:

{ "displayType": "<type>", "<type>": { /* Inhaltsblock für diesen Typ */ } }

displayType wählt eines der zehn unten aufgeführten Formate aus. Das Objekt unter dem entsprechenden Schlüssel enthält den Inhalt dieses Formats. Eine Konfiguration mit einem unbekannten displayType, einem fehlenden Inhaltsblock oder einer leeren erforderlichen Liste (items für carousel/stories, segments für spinwheel) ist ungültig. Das SDK überspringt die Anzeige, anstatt ein fehlerhaftes Layout zu rendern.

Zustellungseinstellungen (Start-/Enddaten und Frequency Capping) sind nicht Teil von native-config.json. Sie werden genauso konfiguriert wie für jede andere In-App, im Schritt Anzeigeeinstellungen der Kampagne.

Frequency Capping erfordert zusätzlich eine explizite SDK-seitige Aktivierung, um bei nativen In-Apps wirksam zu werden. Siehe SDK-Integration.

Jeder Farbwert ist eine CSS-Hex-Zeichenfolge: #RGB, #RGBA, #RRGGBB oder #RRGGBBAA. Das führende # ist in allen vier Formen erforderlich.

Gemeinsame Bausteine

Anchor link to

Diese kleineren Objekte werden in mehreren Anzeigetypen wiederverwendet.

FeldTypErforderlichBeschreibung
textstringjaDer Textinhalt
colorstringjaTextfarbe
{ "text": "Drehen Sie für einen Werkstatt-Vorteil", "color": "#FFFFFFFF" }
FeldTypErforderlichBeschreibung
colorstringjaRandfarbe
radiusnumberjaEckenradius, in Punkten
{ "color": "#0E72E5FF", "radius": 12 }

Ein optionales Bild über einer Hintergrundfarbe. Wird von fullscreen und scratchcard verwendet.

FeldTypErforderlichBeschreibung
imagestringneinCover-Bild-URL
backgroundstringjaHintergrundfarbe, die unter (oder anstelle von) dem Bild angezeigt wird
{ "image": "https://example.com/cover.jpg", "background": "#1A1A1EFF" }

Eine diskriminierte Union auf type:

VarianteFelderBeschreibung
{ "type": "close" }KeineSchließt die In-App
{ "type": "url", "url": string }url erforderlichÖffnet eine URL oder einen Deep Link
{ "type": "url", "url": "pushwoosh://sale" }
FeldTypErforderlichBeschreibung
textTextjaSchaltflächenbeschriftung
backgroundstringjaFüllfarbe der Schaltfläche
borderBorderjaRand der Schaltfläche
actionActionjaAktion, die beim Tippen ausgelöst wird

spinButton (spinwheel) und revealButton (scratchcard) verwenden die gleiche Form ohne action. Ihr Verhalten (das Rad drehen, die Karte aufdecken) ist integriert.

{
"text": { "text": "Testfahrt buchen", "color": "#FFFFFFFF" },
"background": "#0E72E5FF",
"border": { "color": "#0E72E5FF", "radius": 12 },
"action": { "type": "url", "url": "pushwoosh://sale" }
}

Das Preisfeld, das von scratchcard und spinwheel angezeigt wird. Eine gültige Belohnung hat einen title oder einen code.

FeldTypErforderlichBeschreibung
titleTextneinÜberschrift der Belohnung
messageTextneinBeschreibung der Belohnung
codestringneinPromo-Code, wird mit einer Kopieren-Schaltfläche gerendert
buttonButtonneinBestätigungsschaltfläche mit eigener Aktion
{
"title": { "text": "20% Rabatt auf Aufbereitung", "color": "#111111FF" },
"message": { "text": "Gültig für jede Komplettaufbereitung in diesem Monat.", "color": "#555555FF" },
"code": "APEX20",
"button": {
"text": { "text": "Aufbereitung buchen", "color": "#FFFFFFFF" },
"background": "#B3227CFF",
"border": { "color": "#B3227CFF", "radius": 12 },
"action": { "type": "url", "url": "pushwoosh://detailing" }
}
}

Anzeigetypen

Anchor link to

Eine kompakte Leiste, die am oberen oder unteren Bildschirmrand angedockt ist.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
positiontop | bottomjaBildschirmrand
backgroundstringjaHintergrundfarbe der Leiste
imagestringneinMiniaturbild auf der linken Seite
titleTextneinEinzeiliger Titel, mit Auslassungspunkten gekürzt
messageTextneinHaupttext, bis zu 2 Zeilen
actionActionjaWird ausgelöst, wenn die Leiste selbst angetippt wird
autoDismissnumberneinAutomatisches Schließen nach dieser Anzahl von Sekunden. Weglassen, um sie bis zum Schließen beizubehalten
{
"displayType": "banner",
"banner": {
"showClose": true,
"position": "bottom",
"background": "#4B5057FF",
"image": "https://example.com/thumb.jpg",
"title": { "text": "Alpine A110 gerade eingetroffen", "color": "#FFFFFFFF" },
"message": { "text": "Die Ikone des Leichtgewichts – tippen, um den Build zu sehen", "color": "#FFFFFFFF" },
"action": { "type": "url", "url": "pushwoosh://product/x6f" },
"autoDismiss": 6
}
}

Ein bildschirmfüllender, wischbarer Satz von Karten mit Seitenindikator-Punkten.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
itemsItem[]jaKarten (mindestens 1)

Karussell-Element:

FeldTypErforderlichBeschreibung
titleTextneinKartentitel
messageTextneinKartenuntertitel
imagestringneinKartenbild
actionActionneinWird ausgelöst, wenn die Karte angetippt wird
{
"displayType": "carousel",
"carousel": {
"showClose": true,
"items": [
{
"image": "https://example.com/card-1.jpg",
"title": { "text": "AMG GT R", "color": "#FFFFFFFF" },
"message": { "text": "585 PS Biturbo V8 – gerade eingetroffen", "color": "#FFFFFFFF" },
"action": { "type": "url", "url": "pushwoosh://product/n6fx" }
},
{
"image": "https://example.com/card-2.jpg",
"title": { "text": "Alpine A110", "color": "#FFFFFFFF" },
"message": { "text": "Ikone des Leichtgewichts – begrenzte Zuteilung", "color": "#FFFFFFFF" },
"action": { "type": "url", "url": "pushwoosh://product/x6f" }
}
]
}
}

fullscreen

Anchor link to

Ein randloses Cover-Bild mit Text und Schaltflächen darüber.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
coverCoverjaHintergrundbild und -farbe
titleTextneinTitel
messageTextneinHaupttext
buttonsButton[]jaSchaltflächen am unteren Rand (kann leer sein)
{
"displayType": "fullscreen",
"fullscreen": {
"showClose": true,
"cover": { "image": "https://example.com/hero.jpg", "background": "#1A1A1EFF" },
"title": { "text": "Pures Maranello", "color": "#FFFFFFFF" },
"message": { "text": "Das springende Pferd, neu interpretiert.", "color": "#EBEBEBFF" },
"buttons": [
{
"text": { "text": "Jetzt reservieren", "color": "#FFFFFFFF" },
"background": "#0E72E5FF",
"border": { "color": "#0E72E5FF", "radius": 8 },
"action": { "type": "url", "url": "pushwoosh://sale" }
},
{
"text": { "text": "Nicht jetzt", "color": "#FFFFFFFF" },
"background": "#00000000",
"border": { "color": "#FFFFFF99", "radius": 8 },
"action": { "type": "close" }
}
]
}
}

Eine zentrierte Karte.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
dimBackgroundbooleanjaDen Bildschirm hinter der Karte abdunkeln
backgroundstringjaHintergrundfarbe der Karte
imagestringneinCover-Bild
titleTextneinTitel
messageTextneinHaupttext
buttonsButton[]jaSchaltflächen unter dem Text (kann leer sein)
{
"displayType": "modal",
"modal": {
"showClose": true,
"dimBackground": true,
"background": "#FFFFFFFF",
"image": "https://example.com/cover.jpg",
"title": { "text": "Der GT R ist eingetroffen", "color": "#4B5057FF" },
"message": { "text": "585 PS – jetzt im Showroom.", "color": "#4B5057FF" },
"buttons": [
{
"text": { "text": "Testfahrt buchen", "color": "#FFFFFFFF" },
"background": "#0E72E5FF",
"border": { "color": "#0E72E5FF", "radius": 12 },
"action": { "type": "url", "url": "pushwoosh://sale" }
},
{
"text": { "text": "Nicht jetzt", "color": "#4B5057FF" },
"background": "#FFFFFFFF",
"border": { "color": "#4B5057FF", "radius": 12 },
"action": { "type": "close" }
}
]
}
}

Ein schwebendes Bild-in-Bild-Videofenster, das an einer Bildschirmecke angedockt ist.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
positionbottom-right | bottom-left | top-right | top-leftjaBildschirmecke
loopbooleanjaWiedergabe in Schleife
mutedbooleanjaStummgeschaltet starten
urlstringjaVideo-URL
posterstringneinPoster, das vor Beginn der Wiedergabe angezeigt wird
fallbackstringneinBild, das angezeigt wird, wenn das Video nicht abgespielt werden kann
widthnumberjaFensterbreite als Prozentsatz der Bildschirmbreite, begrenzt auf 15–70
aspectRationumberjaHöhen-Breiten-Verhältnis des Fensters
borderRadiusnumberneinEckenradius des Fensters, in Punkten
actionActionneinWird ausgelöst, wenn das Fenster selbst angetippt wird

Es gibt keine konfigurierbaren Schaltflächen auf pip. Fenstersteuerelemente (auf Vollbild erweitern, stummschalten, schließen) werden vom System bereitgestellt.

{
"displayType": "pip",
"pip": {
"showClose": true,
"position": "bottom-right",
"loop": true,
"muted": true,
"url": "https://example.com/teaser.mp4",
"poster": "https://example.com/poster.jpg",
"width": 40,
"aspectRatio": 0.5625,
"action": { "type": "url", "url": "pushwoosh://product/x6f" }
}
}

scratchcard

Anchor link to

Eine Karte mit der Belohnung, die unter einer kratzbaren Folienschicht verborgen ist.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
backgroundstring | string[]jaHintergrundfarbe der Karte oder Farbverlaufsstopps
revealThresholdnumberjaAnteil der Folie, der abgekratzt werden muss (0–1), bevor die Belohnung aufgedeckt wird
coverCoverjaDie Folienschicht. Ohne ein image wird ein „Hier kratzen“-Hinweis auf der Hintergrundfarbe angezeigt
revealButtonButton (no action)nein„Sofort aufdecken“-Schaltfläche
titleTextneinTitel
messageTextneinHaupttext
rewardRewardjaDer unter der Folie verborgene Preis
{
"displayType": "scratchcard",
"scratchcard": {
"showClose": true,
"background": ["#3A1C71FF", "#B3227CFF", "#E0503AFF"],
"revealThreshold": 0.55,
"cover": { "background": "#C9CDD6FF" },
"revealButton": {
"text": { "text": "Ohne Kratzen aufdecken", "color": "#3A1C71FF" },
"background": "#F2DFF5FF",
"border": { "color": "#F2DFF5FF", "radius": 10 }
},
"title": { "text": "Ihre Treueprämie", "color": "#FFFFFFFF" },
"message": { "text": "Kratzen Sie die Folie frei, um den Werkstatt-Vorteil dieser Woche zu enthüllen.", "color": "#F2DFF5FF" },
"reward": {
"title": { "text": "20% Rabatt auf Aufbereitung", "color": "#111111FF" },
"message": { "text": "Gültig für jede Komplettaufbereitung in diesem Monat.", "color": "#555555FF" },
"code": "APEX20",
"button": {
"text": { "text": "Aufbereitung buchen", "color": "#FFFFFFFF" },
"background": "#B3227CFF",
"border": { "color": "#B3227CFF", "radius": 12 },
"action": { "type": "url", "url": "pushwoosh://detailing" }
}
}
}
}

Eine am unteren Rand angeheftete Karte mit einem Ziehgriff.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
dimBackgroundbooleanjaDen Bildschirm hinter dem Sheet abdunkeln
backgroundstringjaHintergrundfarbe des Sheets
imagestringneinCover-Bild
titleTextneinTitel
messageTextneinHaupttext
buttonsButton[]jaSchaltflächen unter dem Text (kann leer sein)
{
"displayType": "sheet",
"sheet": {
"showClose": true,
"dimBackground": true,
"background": "#FFFFFFFF",
"image": "https://example.com/cover.jpg",
"title": { "text": "Ihr Angebot ist fertig", "color": "#000000FF" },
"message": { "text": "Garantierter Ankauf für Ihren A110: 68.500 $.", "color": "#000000FF" },
"buttons": [
{
"text": { "text": "Garantiertes Angebot erhalten", "color": "#FFFFFFFF" },
"background": "#0E72E5FF",
"border": { "color": "#0E72E5FF", "radius": 12 },
"action": { "type": "url", "url": "pushwoosh://sale" }
}
]
}
}

Ein Glücksrad mit gewichteten Segmenten und einer zentralen Naben-Schaltfläche.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
backgroundstring | string[]jaHintergrundfarbe der Karte oder Farbverlaufsstopps
winIndexnumberjaIndex (0-basiert) des gewinnenden Segments
spinButtonButton (no action)jaZentrale Naben-Schaltfläche
titleTextneinTitel
messageTextneinHaupttext
rewardRewardjaBelohnung für den gewinnenden Dreh (Fallback für Segmente ohne eigene)
loseTitleTextneinÜberschrift, die bei einem Verlust angezeigt wird
segmentsSegment[]jaRadsegmente (SDK erwartet 2–12)

Segment:

FeldTypErforderlichBeschreibung
messageTextjaSegmentbeschriftung
colorstringneinSegmentfarbe. Weglassen für eine Fallback-Palette, die um das Rad herum angewendet wird
weightnumberjaRelative Segmentgröße
rewardRewardneinSegmentspezifische Belohnung
{
"displayType": "spinwheel",
"spinwheel": {
"showClose": true,
"background": ["#1B1B46FF", "#5B2B8FFF", "#B0338AFF"],
"winIndex": 1,
"spinButton": {
"text": { "text": "DREHEN", "color": "#1B1B46FF" },
"background": "#F2C94CFF",
"border": { "color": "#D9A02BFF", "radius": 36 }
},
"title": { "text": "Drehen Sie für einen Werkstatt-Vorteil", "color": "#FFFFFFFF" },
"message": { "text": "Ein Dreh – jedes Feld gewinnt diese Woche.", "color": "#E3D9F2FF" },
"reward": {
"title": { "text": "Sie haben einen Werkstatt-Vorteil gewonnen!", "color": "#FFFFFFFF" },
"code": "APEXPERK",
"button": {
"text": { "text": "Einlösen", "color": "#FFFFFFFF" },
"background": "#5B2B8FFF",
"border": { "color": "#5B2B8FFF", "radius": 12 },
"action": { "type": "close" }
}
},
"segments": [
{ "message": { "text": "5% Rabatt", "color": "#FFFFFFFF" }, "color": "#5856D6FF", "weight": 1 },
{
"message": { "text": "20% Rabatt", "color": "#FFFFFFFF" },
"color": "#30B0C7FF",
"weight": 1,
"reward": {
"title": { "text": "20% Rabatt auf Ihren nächsten Service", "color": "#FFFFFFFF" },
"code": "SPIN20",
"button": {
"text": { "text": "Service-Deal einlösen", "color": "#FFFFFFFF" },
"background": "#30B0C7FF",
"border": { "color": "#30B0C7FF", "radius": 12 },
"action": { "type": "url", "url": "pushwoosh://service" }
}
}
},
{ "message": { "text": "Gratis Wäsche", "color": "#FFFFFFFF" }, "color": "#FF2D55FF", "weight": 1 }
]
}
}

Bildschirmfüllende Folien mit Fortschrittsbalken oben, ähnlich wie bei Social-Media-Stories.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
loopbooleanjaNach der letzten Folie von der ersten neu starten
itemsItem[]jaFolien (mindestens 1)

Stories-Element:

FeldTypErforderlichBeschreibung
titleTextneinTitel
messageTextneinUntertitel
imagestringneinHintergrundbild der Folie
buttonsButton[]jaCTA-Schaltflächen am unteren Rand (kann leer sein)
durationnumberjaFoliendauer, in Sekunden
{
"displayType": "stories",
"stories": {
"showClose": true,
"loop": false,
"items": [
{
"image": "https://example.com/slide-1.jpg",
"title": { "text": "AMG GT R", "color": "#FFFFFFFF" },
"message": { "text": "Das Special der Grünen Hölle", "color": "#FFFFFFFF" },
"buttons": [
{
"text": { "text": "Ihren konfigurieren", "color": "#FFFFFFFF" },
"background": "#0F0F0FFF",
"border": { "color": "#0F0F0FFF", "radius": 26 },
"action": { "type": "url", "url": "pushwoosh://product/n6fx" }
}
],
"duration": 4
},
{
"image": "https://example.com/slide-2.jpg",
"title": { "text": "Alpine A110", "color": "#FFFFFFFF" },
"message": { "text": "Die wiedergeborene Legende des Leichtgewichts", "color": "#FFFFFFFF" },
"buttons": [],
"duration": 4
}
]
}
}

Bildschirmfüllendes Video mit Text und Schaltflächen darüber.

FeldTypErforderlichBeschreibung
showClosebooleanjaEine Schließen-Schaltfläche (✕) anzeigen
loopbooleanjaWiedergabe in Schleife
mutedbooleanjaStummgeschaltet starten
urlstringjaVideo-URL (HLS oder MP4)
posterstringneinPoster, das vor Beginn der Wiedergabe angezeigt wird
fallbackstringneinBild, das angezeigt wird, wenn das Video nicht abgespielt werden kann
titleTextneinTitel
messageTextneinHaupttext
buttonsButton[]jaCTA-Schaltflächen am unteren Rand (kann leer sein)
{
"displayType": "video",
"video": {
"showClose": true,
"loop": true,
"muted": true,
"url": "https://example.com/reveal.mp4",
"poster": "https://example.com/poster.jpg",
"title": { "text": "Die Enthüllung", "color": "#FFFFFFFF" },
"message": { "text": "Sehen Sie es in Bewegung, bevor es jemand anderes tut.", "color": "#EBEBEBFF" },
"buttons": [
{
"text": { "text": "Die Produktpalette ansehen", "color": "#FFFFFFFF" },
"background": "#0E72E5FF",
"border": { "color": "#0E72E5FF", "radius": 14 },
"action": { "type": "url", "url": "pushwoosh://sale" }
}
]
}
}

Lokalisierung

Anchor link to

Native In-Apps verwenden denselben Lokalisierungsmechanismus wie HTML Rich Media: Zeichenfolgenwerte in native-config.json können {{key|type|default}}-Platzhalter enthalten, und Übersetzungen befinden sich in einer pushwoosh.json-Datei daneben, im selben Format, das in pushwoosh.json hinzufügen beschrieben ist. Ein Platzhalter kann in jedem Zeichenfolgenfeld auf jeder Ebene erscheinen (ein Titel, eine Schaltflächenbeschriftung, eine Bild-URL, eine Aktions-URL).

Dynamischer Inhalt

Anchor link to

Textfelder – title, message, Schaltflächen-text, reward.title/reward.message und Element-/Segment-message – akzeptieren auch dynamischen Inhalt und Liquid-Syntax: dieselben {Tag|modifier|default}-Kurzschreibweisen und {% %}/{{ }}-Liquid-Tags, die in Push- und E-Mail-Inhalten verwendet werden. Pushwoosh löst diese pro Empfänger auf, bevor die Nachricht gesendet wird, genauso wie bei Push und E-Mail.

Beim Erstellen einer Vorlage im Control Panel Editor für native In-Apps werden eingefügte Token als Chips in der Live-Vorschau gerendert, und Speichern wird blockiert, wenn die Liquid-Syntax eines Textfeldes nicht geparst werden kann.

SDK-Integration

Anchor link to

Sobald Sie das native In-App-SDK-Modul zu Ihrer App hinzufügen, werden Nachrichten automatisch angezeigt. Es ist kein zusätzlicher Code erforderlich, um Nachrichten anzuzeigen, die durch einen Push, eine Customer Journey, postEvent oder den Posteingang ausgelöst werden.

Das SDK stellt auch eine kleine API für die manuelle Steuerung zur Verfügung:

  • iOS: Pushwoosh.inApp (Modul PushwooshInApp)
  • Android: PushwooshInAppUi (Modul pushwoosh-inapp-ui)
FähigkeitiOSAndroid
Eine Konfiguration direkt anzeigen (Testen/manuelle Verwendung)Pushwoosh.inApp.present(config)PushwooshInAppUi.present(configJson)
Lebenszyklus und Klicks beobachtendelegate (PWInAppMessageDelegate)delegate (InAppMessageDelegate)
Prüfen, ob etwas auf dem Bildschirm istisPresentingisPresenting
Alles, was gerade angezeigt wird, schließendismiss()dismiss()
Anzeige anhalten / fortsetzenisPausedisPaused
maxDisplays / cooldown Capping erzwingensetFrequencyCapEnabled(_:)setFrequencyCapEnabled(...)

Delegate-Callbacks (alle werden im Hauptthread ausgelöst): shouldDisplay (geben Sie false zurück, um eine Nachricht zu unterdrücken, bevor sie angezeigt wird, zum Beispiel auf einem Checkout-Bildschirm), willPresent, didPresent, didClose und clickedAction (wird ausgelöst, wenn der Benutzer eine url-Aktion antippt, bevor die URL geöffnet wird).

iOS meldet zusätzlich rewardRevealed und rewardClaimed für die gamifizierten scratchcard- und spinwheel-Vorlagen.

// iOS
Pushwoosh.inApp.delegate = self
Pushwoosh.inApp.setFrequencyCapEnabled(true)
// Android
PushwooshInAppUi.delegate = this
PushwooshInAppUi.setFrequencyCapEnabled(true)