PassKit
PassKit ermöglicht es Ihnen, Ihre mobile Reichweite zu erweitern, indem Sie Apple Wallet und Google Pay Pässe in das Kundenerlebnis integrieren. Erstellen, verwalten, verteilen und analysieren Sie ganz einfach die Performance von digitalen Coupons, Kundenkarten, Mitgliedskarten, Tickets und vielem mehr – ohne dass Ihre Kund:innen eine weitere App benötigen.
Diese Integration wird von PassKit gepflegt.
Über die Integration
Die Integration von Braze und PassKit ermöglicht es Ihnen, das Engagement Ihrer Online-Campaigns zu steigern und zu messen, indem Sie sofort angepasste Apple Wallet- und Google Pay-Pässe bereitstellen. Anschließend können Sie die Nutzung analysieren und Realtime-Anpassungen vornehmen, um den In-Store-Traffic zu erhöhen – durch standortbasierte Nachrichten und personalisierte, dynamische Updates für die mobile Wallet Ihrer Kund:innen.
Voraussetzungen
| Anforderung | Beschreibung |
|---|---|
| PassKit-Konto | Sie müssen über ein PassKit-Konto und eine:n PassKit-Account-Manager:in verfügen. |
userDefinedID |
Um angepasste Events und angepasste Attribute für Ihre Nutzer:innen zwischen PassKit und Braze ordnungsgemäß zu aktualisieren, müssen Sie die externe Braze-ID als userDefinedID festlegen. Diese userDefinedID wird bei API-Aufrufen an die PassKit-Endpunkte verwendet. |
| Braze-REST-API-Schlüssel | Ein Braze-REST-API-Schlüssel mit users.track-Berechtigungen. Dieser kann im Braze-Dashboard unter Einstellungen > API-Schlüssel erstellt werden. |
| Braze-REST-Endpunkt | Ihre REST-Endpunkt-URL. Ihr Endpunkt hängt von der Braze-URL Ihrer Instanz ab. |
Integration
Um die Erfahrungen Ihrer Kund:innen mit der mobilen Wallet weiter zu verbessern, können Sie von Ihrem PassKit-Dashboard aus Daten über den Braze /users/track-Endpunkt an Braze weitergeben.
Beispiele für Daten, die Sie von PassKit weitergeben können:
- Pass erstellt: wenn ein:e Kund:in auf einen Pass-Link klickt und zum ersten Mal einen Pass angezeigt bekommt.
- Pass-Installationen: wenn der/die Kund:in den Pass in seine/ihre Wallet-App einfügt und speichert.
- Pass-Updates: wenn ein Pass aktualisiert wird.
- Pass löschen: wenn ein:e Kund:in den Pass aus seiner/ihrer Wallet-App löscht.
Sobald die Daten an Braze übergeben wurden, können Sie Zielgruppen aufbauen, Inhalte über Liquid personalisieren und Campaigns oder Canvases triggern, nachdem diese Aktionen durchgeführt wurden.
Passkit mit Braze verbinden
Um Daten von PassKit zu übergeben, stellen Sie sicher, dass Sie Ihre externe Braze-ID als PassKit-externalId festgelegt haben.
- Klicken Sie in den Einstellungen unter Integrations in Ihrem PassKit-Pass-Projekt oder -Programm auf Connect unter dem Braze-Tab.

- Geben Sie Ihren Braze-API-Schlüssel und die Endpunkt-URL ein und vergeben Sie einen Namen für Ihren Konnektor.
- Aktivieren Sie Enable Integration und wählen Sie die Events aus, die in Braze ausgelöst werden sollen oder mit denen Sie Ihre Nachrichten personalisieren möchten.

Pass mithilfe eines SmartPass-Links erstellen
In Braze können Sie einen SmartPass-Link einrichten, um eine eindeutige URL zu generieren, mit der Ihre Kund:innen ihren Pass auf Android oder iOS installieren können. Dazu müssen Sie eine verschlüsselte SmartPass-Daten-Payload definieren, die über einen Braze-Content-Block aufgerufen werden kann. Dieser Content-Block kann dann für zukünftige Pässe und Coupons wiederverwendet werden. Folgende Elemente werden während Ihrer Integration benötigt:
- PassKit-URL: Ihre PassKit-URL ist eine eindeutige URL für Ihr PassKit-Programm.
Jedes Programm hat eine eindeutige URL, die Sie unter dem Tab Distribution Ihres PassKit-Programms oder -Projekts finden. (zum Beispiel https://pub1.pskt.io/c/ww0jir) - PassKit-Secret: Neben der URL benötigen Sie den PassKit-Schlüssel für dieses Programm.
Diesen finden Sie auf derselben Seite wie Ihre PassKit-URL. - Programm- (oder Projekt-)ID: Ihre PassKit-Programm-ID wird benötigt, um die SmartPass-URL zu erstellen.
Sie finden diese unter dem Tab Settings Ihres Projekts oder Programms.
Weitere Informationen zum Erstellen verschlüsselter SmartPass-Links finden Sie in diesem PassKit-Artikel.
Schritt 1: Pass-Daten-Payload definieren
Zunächst müssen Sie die Coupon- oder Mitglieds-Payload definieren.
Es gibt viele verschiedene Komponenten, die Sie in Ihre Payload aufnehmen können, aber hier sind zwei wichtige:
| Komponente | Erforderlich | Typ | Beschreibung |
|---|---|---|---|
person.externalId |
Erforderlich | String | Wird als externe Braze-ID gesetzt. Dies ist entscheidend, damit die Callbacks von PassKit zurück zu Braze funktionieren und Unternehmensnutzer:innen Coupons für mehrere Angebote in einer Campaign haben können. Wird nicht als eindeutig erzwungen. |
members.member.externalId |
Optional | String | Wird als externe Braze-ID gesetzt. Sie können Ihre externe ID verwenden, um den Mitgliedspass zu aktualisieren. Das Setzen dieses Felds erzwingt, dass die Nutzer:in innerhalb des Mitgliedsprogramms eindeutig ist. |
Eine vollständige Liste der verfügbaren Felder, ihrer Typen und hilfreichen Beschreibungen finden Sie in der PassKit-GitHub-Dokumentation.
Beispiel-Payload
{
"members.member.externalId": "{{${user_id}}}",
"members.member.points": "100",
"members.tier.name": "current_customer",
"person.displayName": "{{${first_name}}} {{${last_name}}}",
"person.externalId": "{{${user_id}}}",
"universal.expiryDate": "{{ "now" | date: "%s" | plus: 31622400 | date: "%FT%TZ" }}"
}
Schritt 2: Undefinierte Payload-Variable erstellen und kodieren
Erstellen und benennen Sie einen neuen Content-Block, indem Sie im Braze-Dashboard zu Content > Content-Block navigieren.
Wählen Sie Content-Block erstellen, um zu beginnen.
Als Nächstes müssen Sie Ihren Content-Block-Liquid-Tag definieren. Nach dem Speichern dieses Content-Blocks kann dieser Liquid-Tag beim Erstellen von Nachrichten referenziert werden. In diesem Beispiel haben wir den Liquid-Tag als {{content_blocks.${passKit_SmartPass_url}}} zugewiesen.
Innerhalb dieses Content-Blocks werden wir die Payload nicht direkt einbinden, sondern in einer {{passData}}-Variable referenzieren. Das erste Code-Snippet, das Sie Ihrem Content-Block hinzufügen müssen, erfasst eine Base64-Kodierung der {{passData}}-Variable.
{% capture base64JsonPayload %}{{passDatapassData|base64_encode}}{% endcapture %}
Schritt 3: Verschlüsselungssignatur mit einem SHA1-HMAC-Hash erstellen
Als Nächstes erstellen Sie Ihre Verschlüsselungssignatur mit einem SHA1-HMAC-Hash der Projekt-URL und der Payload.
Das zweite Code-Snippet, das Sie Ihrem Content-Block hinzufügen müssen, erfasst die URL, die für das Hashing verwendet wird.
{% capture url %}{{projectUrl}}?data={{base64JsonPayload}}{% endcapture %}
Als Nächstes müssen Sie eine Signatur mit diesem Hash und Ihrem Project Secret generieren. Dies kann durch Hinzufügen eines dritten Code-Snippets erfolgen:
{% capture sig %}{{url | hmac_sha1: "Project_Secret"}}{% endcapture %}
Abschließend hängen Sie die Signatur mit dem fünften Code-Snippet an die vollständige URL an:
{% capture longURL %}{{projectUrl}}?data={{base64JsonPayload}}&sig={{sig}}{% endcapture %}
Schritt 4: URL ausgeben
Stellen Sie zuletzt sicher, dass Sie Ihre endgültige URL aufrufen, damit sie Ihre SmartPass-URL innerhalb Ihrer Nachricht ausgibt.
{{longURL}}
An diesem Punkt haben Sie einen Content-Block erstellt, der in etwa so aussieht:
{% capture base64JsonPayload %}{{passData|base64_encode}}{% endcapture %}
{% capture url %}{{projectUrl}}?data={{base64JsonPayload}}{% endcapture %}
{% capture sig %}{{url | hmac_sha1: "Project_Secret"}}{% endcapture %}
{% capture longURL %}{{projectUrl}}?data={{base64JsonPayload}}&sig={{sig}}&utm_source=braze&utm_campaign={{campaign.${name}}}{% endcapture %}{% capture longURL %}{{longURL | url_encode}}{% endcapture %}
{{longURL}}
In diesem Beispiel wurden UTM-Parameter hinzugefügt, um die Quelle dieser Installationen auf Braze und diese Campaign zurückzuverfolgen.

Denken Sie daran, Ihren Content-Block zu speichern, bevor Sie die Seite verlassen.
Schritt 5: Alles zusammenführen
Sobald dieser Content-Block erstellt wurde, kann er in Zukunft wiederverwendet werden.
Möglicherweise fällen Ihnen zwei Variablen auf, die im Beispiel-Content-Block undefiniert geblieben sind.
{{passData}} – Ihre JSON-Pass-Daten-Payload, die in Schritt 1 definiert wurde
{{projectUrl}} – Die URL Ihres Projekts oder Programms, die Sie unter dem Tab „Distribution“ Ihres PassKit-Projekts finden.
Diese Entscheidung ist bewusst getroffen und unterstützt die Wiederverwendbarkeit des Content-Blocks. Da diese Variablen nur referenziert und nicht innerhalb des Content-Blocks erstellt werden, können sich diese Variablen ändern, ohne dass der Content-Block neu erstellt werden muss.
Beispielsweise möchten Sie vielleicht das Einführungsangebot ändern, um mehr anfängliche Punkte in Ihr Kundenbindungs-Programm aufzunehmen, oder Sie möchten eine zweite Mitgliedskarte oder einen Coupon erstellen. Diese Szenarien erfordern unterschiedliche PassKit-projectURLs oder unterschiedliche Pass-Payloads, die Sie pro Campaign in Braze definieren.
Nachrichtentext verfassen
Sie sollten beide Variablen in Ihrem Nachrichtentext erfassen und dann Ihren Content-Block aufrufen. Erfassen Sie Ihre minimierte JSON-Payload aus Schritt 1:
Projekt-URL zuweisen
{% assign projectUrl = "https://pub1.pskt.io/c/ww0jir" %}
JSON erfassen
{% capture passData %}{"members.member.externalId": "{{${user_id}}}","members.member.points": "100","members.tier.name": "current_customer","person.displayName": "{{${first_name}}} {{${last_name}}}","person.externalId": "{{${user_id}}}","universal.expiryDate": "{{ "now" | date: "%s" | plus: 31622400 | date: "%FT%TZ" }}"}{% endcapture %}
Den soeben erstellten Content-Block referenzieren
{{content_block.${passkit_SmartPass_url}}}
Ihr Nachrichtentext sollte in etwa so aussehen:

Die Ausgabe-URL für das Beispiel ist:

Die Ausgabe-URL wird lang sein. Der Grund dafür ist, dass sie alle Pass-Daten enthält und erstklassige Sicherheit gewährleistet, um die Datenintegrität sicherzustellen und Manipulationen über URL-Änderungen zu verhindern. Wenn Sie diese URL per SMS verteilen, sollten Sie sie durch einen Linkverkürzungsprozess wie bit.ly laufen lassen. Dies kann über einen Connected-Content-Aufruf an einen bit.ly-Endpunkt erfolgen.
Pass mit dem PassKit-Webhook aktualisieren
In Braze können Sie eine Webhook-Campaign oder einen Webhook innerhalb eines Canvas einrichten, um einen bestehenden Pass basierend auf dem Verhalten Ihrer Nutzer:innen zu aktualisieren. Unter den folgenden Links finden Sie Informationen zu nützlichen PassKit-Endpunkten.
Payload-Parameter
Bevor Sie beginnen, finden Sie hier die gängigen JSON-Payload-Parameter, die Sie in Ihren Erstell- und Update-Webhooks an PassKit einbinden können.
| Daten | Typ | Beschreibung |
|---|---|---|
externalId |
String | Ermöglicht das Hinzufügen einer eindeutigen ID zum Pass-Datensatz, um die Kompatibilität mit einem bestehenden System zu gewährleisten, das eindeutige Kundenbezeichner verwendet (z. B. Mitgliedsnummern). Sie können Pass-Daten über diesen Endpunkt mithilfe von userDefinedId und campaignName anstelle der Pass-ID abrufen. Dieser Wert muss innerhalb einer Campaign eindeutig sein, und sobald er gesetzt wurde, kann er nicht mehr geändert werden.Für die Braze-Integration empfehlen wir die Verwendung der externen Braze-ID: {{${user_id}}} |
campaignId (Gutschein) programId (Mitgliedschaft) |
String | Die ID für die Campaign- oder Programm-Vorlage, die Sie in PassKit erstellt haben. Um diese zu finden, navigieren Sie zum Tab Einstellungen in Ihrem PassKit-Pass-Projekt. |
expiryDate |
IO8601 datetime | Das Ablaufdatum des Passes. Nach dem Ablaufdatum wird der Pass automatisch ungültig (siehe isVoided). Dieser Wert überschreibt den Wert für das Template- und Campaign-Enddatum. |
status |
String | Der aktuelle Status eines Gutscheins, z. B. REDEEMED oder UNREDEEMED. |
Schritt 1: Erstellen Sie Ihr Braze-Webhook-Template
Um ein PassKit-Webhook-Template für zukünftige Campaigns oder Canvases zu erstellen, navigieren Sie zum Bereich Templates und Medien im Braze-Dashboard. Wenn Sie eine einmalige PassKit-Webhook-Campaign erstellen oder ein bestehendes Template verwenden möchten, wählen Sie beim Erstellen einer neuen Campaign Webhook in Braze aus.
Nachdem Sie das PassKit-Webhook-Template ausgewählt haben, sollten Sie Folgendes sehen:
- Webhook-URL:
https://api-pub1.passkit.io/coupon/singleUse/coupon - Anfrage-Body: Rohtext
Anfrage-Header und Methode
PassKit erfordert einen HTTP Header zur Autorisierung, der Ihren PassKit-API-Schlüssel in Base-64-Kodierung enthält. Folgendes ist bereits als Schlüssel-Wert-Paar im Template enthalten, aber im Tab Einstellungen müssen Sie <PASSKIT_LONG_LIVED_TOKEN> durch Ihr PassKit-Token ersetzen. Um Ihr Token abzurufen, navigieren Sie zu Ihrem PassKit-Projekt/Programm und dann zu Settings > Integrations > Long Lived Token.
- HTTP-Methode: PUT
- Anfrage-Header:
- Authorization: Bearer
<PASSKIT_LONG_LIVED_TOKEN> - Content-Type: application/json
- Authorization: Bearer
Anfrage-Body
Um den Webhook einzurichten, füllen Sie die neuen Event-Details im Anfrage-Body aus, einschließlich der für Ihren Anwendungsfall erforderlichen Payload-Parameter:
{
"externalId": "{{${user_id}}}",
"campaignId": " 2xa1lRy8dBz4eEElBfmIz8",
"expiryDate": "2020-05-10T00:00:00Z"
}
Schritt 2: Vorschau Ihrer Anfrage
Ihr Rohtext wird automatisch hervorgehoben, wenn es sich um einen gültigen Braze-Tag handelt.
Sehen Sie sich die Vorschau Ihrer Anfrage im Vorschau-Panel an oder navigieren Sie zum Tab Test, wo Sie eine:n zufällige:n Nutzer:in oder eine:n bestehende:n Nutzer:in auswählen oder eigene Daten anpassen können, um Ihren Webhook zu testen.

Denken Sie daran, Ihr Template zu speichern, bevor Sie die Seite verlassen!
Aktualisierte Webhook-Templates finden Sie in der Liste Gespeicherte Webhook-Templates, wenn Sie eine neue Webhook-Campaign erstellen.
Pass-Details über Connected Content abrufen
Neben dem Erstellen und Aktualisieren von Pässen können Sie auch die Pass-Metadaten Ihrer Nutzer:innen über Braze Connected Content abrufen, um personalisierte Pass-Details in Ihre Messaging-Kampagnen einzubinden.
PassKit Connected-Content-Aufruf
{% connected_content https://api-pub1.passkit.io/coupon/singleUse/coupon/externalId/{{${user_id}}} :headers {"Authorization": "Bearer <PASSKIT_LONG_LIVED_TOKEN>","Content-Type": "application/json"} :save passes %}
{{passes.status}}
Liquid-Beispielantworten
{
"redemptionDate": null,
"redemptionCode": "",
"lat": 0,
"lon": 0,
"alt": 0,
"redemptionSource": "",
"redemptionReference": "",
"transactionReference": "",
"transactionAmount": 0
}
UNREDEEMED