Informationen zu diesem Codelab
1. Einführung
Übersicht
Mit der Google Wallet API können Sie mit Nutzern über verschiedene Arten von Karten/Tickets interagieren: Kundenkarten, Angebote, Geschenkkarten, Veranstaltungstickets, Fahrkarten, Bordkarten und mehr. Jeder Karten-/Tickettyp oder -klasse sind nutzungsspezifische Felder und Funktionen zugewiesen, um die Nutzerfreundlichkeit zu verbessern.
Diese eignen sich jedoch möglicherweise nicht für jeden Anwendungsfall. Wenn Sie die Karte/das Ticket noch individueller gestalten möchten, können Sie den generischen Karten-/Tickettyp verwenden. Hier sind einige Anwendungsfälle für den generischen Karten-/Tickettyp:
- Parkscheine
- Bibliotheksausweise
- Gutscheine mit Guthaben
- Mitgliedskarten für Fitnessstudios
- Reservierungen
Sie können generische Karten/Tickets für alle Anwendungsfälle verwenden, die mit folgenden Optionen präsentiert werden können:
- Bis zu drei Zeilen mit Informationen
- (Optional) Barcodegrafik
- Optionaler Abschnitt „Details“
Weitere Informationen zur Google Wallet API oder zum Hinzufügen der Schaltfläche Zu Google Wallet hinzufügen in einer Android-App finden Sie in der Google Wallet-Entwicklerdokumentation.
Karten-/Ticketklassen und -objekte
Die Google Wallet API stellt Methoden zum Erstellen folgender Elemente bereit:
Typ | Beschreibung |
Karten-/Ticketklasse | Eine Vorlage für ein einzelnes Karten-/Ticketobjekt. Es enthält Informationen, die allen Karten-/Ticketobjekten dieser Klasse gemeinsam sind. |
Karten-/Ticketobjekt | Eine Instanz einer Karten-/Ticketklasse, die für eine Nutzer-ID eindeutig ist. |
Informationen zu diesem Codelab
In diesem Codelab führen Sie die folgenden Aufgaben aus.
- Neues Ausstellerkonto im Demomodus erstellen
- Dienstkonto für die Ausstellung von Karten/Tickets erstellen
- Neue generische Karten-/Ticketklasse erstellen
- Neues Karten-/Ticketobjekt erstellen
- Schaltfläche Zu Google Wallet hinzufügen zum Speichern einer Karte/eines Tickets erstellen
- Schaltfläche in Ihrer Android-App anzeigen
- Ergebnis des Speicherns der Karte/des Tickets verarbeiten
Vorbereitung
- Android Studio
- Git
- Ein Google-Konto mit Zugriff auf die Google Cloud Console
- Node.js-Version 10 oder höher
Lernziele
Nach Abschluss dieses Codelabs können Sie Folgendes tun:
- Ihrer Android-App das Google Wallet SDK hinzufügen
- Prüfen, ob die Google Wallet API auf einem Android-Gerät verfügbar ist
- Schaltfläche Zu Google Wallet hinzufügen erstellen
Support
Wenn Sie an einer Stelle im Codelab nicht weiterkommen, finden Sie im GitHub-Repository google-pay/wallet-android-codelab eine vollständige Lösung als Referenz.
2. Einrichtung
In diesem Schritt erstellen Sie ein Ausstellerkonto im Demomodus. So können Sie Karten/Ticket-Klassen und -Objekte erstellen, die den Brieftaschen der Nutzer hinzugefügt werden können. Als Nächstes erstellen Sie ein Google Cloud-Projekt und ein Dienstkonto. Mit diesen werden Karten-/Ticketklassen und -objekte auf die gleiche Weise wie bei einem Backend-Server programmatisch erstellt. Als Nächstes autorisieren Sie das Google Cloud-Dienstkonto zum Verwalten von Karten/Tickets in Ihrem Google Wallet-Ausstellerkonto.
Für ein Google Wallet API-Ausstellerkonto registrieren
Zum Erstellen und Verteilen von Karten/Tickets für Google Wallet ist ein Ausstellerkonto erforderlich. Sie können sich über die Google Pay & Wallet Console registrieren. Zuerst haben Sie Zugriff auf die Erstellung von Karten/Tickets im Demomodus. Das bedeutet, dass nur bestimmte Testnutzer von Ihnen erstellte Karten/Tickets hinzufügen können. Testnutzer können in der Google Pay & Wallet Console verwaltet werden.
Weitere Informationen zum Demomodus finden Sie unter Voraussetzungen für generische Karten/Tickets.
- Öffnen Sie die Google Pay & Wallet Console.
- Folgen Sie der Anleitung auf dem Bildschirm, um ein Ausstellerkonto zu erstellen.
- Wählen Sie Google Wallet API aus.
- Bestätigen Sie, dass Sie die Nutzungsbedingungen und die Datenschutzerklärung gelesen und verstanden haben.
- Kopieren Sie den Wert Aussteller-ID in einen Texteditor oder an einen anderen Speicherort.
- Wählen Sie auf dem Tab Verwalten die Option Testkonten einrichten aus.
- Fügen Sie alle E-Mail-Adressen hinzu, die Sie in diesem Codelab verwenden werden.
Google Wallet API aktivieren
- Melden Sie sich in der Google Cloud Console an.
- Wenn Sie noch kein Google Cloud-Projekt haben, erstellen Sie jetzt eines. Weitere Informationen finden Sie unter Projekte erstellen und verwalten.
- Aktivieren Sie die Google Wallet API (auch als Google Pay for Passes API bezeichnet) für Ihr Projekt.
Dienstkonto und Schlüssel erstellen
Für den Aufruf der Google Wallet API sind ein Dienstkonto und ein Dienstkontoschlüssel erforderlich. Das Dienstkonto ist die Identität, die die Google Wallet API aufruft. Der Dienstkontoschlüssel enthält einen privaten Schlüssel, über den Ihre Anwendung als Dienstkonto identifiziert wird. Dieser Schlüssel ist vertraulich. Bewahren Sie ihn daher an einem sicheren Ort auf.
Dienstkonto erstellen
- Öffnen Sie in der Google Cloud Console Dienstkonten.
- Geben Sie einen Namen, eine ID und eine Beschreibung für das Dienstkonto ein.
- Wähle ERSTELLEN UND FORTFAHREN aus.
- Wähle FERTIG aus.
Dienstkontoschlüssel erstellen
- Dienstkonto auswählen
- Wähle das Menü KEYS aus.
- Wählen Sie SCHLÜSSEL HINZUFÜGEN und dann Neuen Schlüssel erstellen aus.
- Wählen Sie den Schlüsseltyp JSON aus.
- Wähle ERSTELLEN aus.
Sie werden aufgefordert, die Schlüsseldatei auf Ihrer lokalen Workstation zu speichern. Merken Sie sich den Standort.
Legen Sie die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
fest.
Die Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS
wird von Google SDKs verwendet, um sich als Dienstkonto zu authentifizieren und auf verschiedene APIs für ein Google Cloud-Projekt zuzugreifen.
- Folgen Sie der Anleitung in der Dokumentation zu Google Cloud-Dienstkontoschlüsseln, um die Umgebungsvariable
GOOGLE_APPLICATION_CREDENTIALS
festzulegen. - Prüfen Sie, ob die Umgebungsvariable in einer neuen Terminalsitzung (MacOS/Linux) oder Befehlszeilensitzung (Windows) festgelegt ist. Möglicherweise müssen Sie eine neue Sitzung starten, wenn bereits eine geöffnet ist.
echo $GOOGLE_APPLICATION_CREDENTIALS
Dienstkonto autorisieren
Als Nächstes müssen Sie das Dienstkonto zum Verwalten von Google Wallet-Karten/-Tickets autorisieren.
- Öffnen Sie die Google Pay & Wallet Console.
- Wählen Sie Nutzer aus.
- Wähle Nutzer einladen aus.
- Geben Sie die E-Mail-Adresse des Dienstkontos ein (z. B.
test-svc@myproject.iam.gserviceaccount.com
). - Wählen Sie im Drop-down-Menü Zugriffsebene entweder Entwickler oder Administrator aus.
- Wähle Einladen aus.
3. Generische Karten-/Ticketklasse erstellen
In diesem Schritt erstellen Sie die Basisklasse für Ihre Karte/Ihr Ticket. Jedes Mal, wenn für einen Nutzer eine neue Karte bzw. ein neues Ticket erstellt wird, werden die in der Karten-/Ticketklasse definierten Eigenschaften übernommen.
Die Karte/das Ticket-Klasse, die Sie in diesem Codelab erstellen, nutzt die Flexibilität von generischen Karten/Tickets, um ein Objekt zu erstellen, das sowohl als Ausweis als auch als Punktezähler für Herausforderungen dient. Wenn ein Karten-/Ticketobjekt aus dieser Klasse erstellt wird, sieht es so aus wie in der folgenden Abbildung.
Karten-/Ticketklassen können direkt in der Google Pay & Wallet Console oder mithilfe der Google Wallet API erstellt werden. In diesem Codelab erstellen Sie die Klasse „Generic pass“ (Generi scher Ausweis) mithilfe der API. Dies entspricht dem Verfahren, das ein privater Backend-Server zum Erstellen von Karten-/Ticketklassen verwenden würde.
- Klonen Sie das GitHub-Repository google-pay/wallet-android-codelab auf Ihre lokale Workstation.
git clone https://github.com/google-pay/wallet-android-codelab.git
- Öffnen Sie das geklonte Repository in Ihrem Terminal oder in der Befehlszeile.
- Rufen Sie das Verzeichnis
backend
auf. Diese Scripts ahmen Backend-Serveraktionen nach.cd backend
- Node.js-Abhängigkeiten installieren
npm install .
- Öffnen Sie im Verzeichnis
backend
die Dateigeneric_class.js
. - Ersetzen Sie den Wert von
issuerId
durch Ihre Aussteller-ID aus der Google Pay & Wallet Console.// TODO: Define Issuer ID
let issuerId = 'ISSUER_ID'; - Führen Sie das
generic_class.js
-Script in Ihrem Terminal oder in der Befehlszeile aus.node generic_class.js
Wenn der Code ausgeführt wird, wird eine neue Karten-/Ticketklasse erstellt und die Klassen-ID ausgegeben. Die Klassen-ID besteht aus der Aussteller-ID gefolgt von einem vom Entwickler definierten Suffix. In diesem Fall ist das Suffix auf codelab_class
festgelegt (die Klassen-ID würde in etwa 1234123412341234123.codelab_class
lauten). Die Ausgabeprotokolle enthalten auch die Antwort der Google Wallet API.
4. Projekt in Android Studio öffnen
Das von Ihnen geklonte GitHub-Repository enthält ein Android-Projekt mit einer leeren Aktivität. In diesem Schritt bearbeiten Sie diese Aktivität, um auf einer Produktseite die Schaltfläche Zu Google Wallet hinzufügen einzufügen.
- Öffnen Sie Android Studio.
- Wählen Sie Datei und dann Öffnen aus.
- Wählen Sie im Repository das Verzeichnis
android
aus. - Wählen Sie Öffnen aus.
Ihrer App das Google Wallet SDK hinzufügen
- Gradle-Builddatei auf Modulebene (
android/app/build.gradle
) öffnen - Fügen Sie dem Abschnitt
dependencies
das Google Wallet SDK hinzu.// TODO: Add the "com.google.android.gms:play-services-pay" dependency to
// use the Google Wallet API
implementation "com.google.android.gms:play-services-pay:16.0.3" - Speichern Sie die Datei.
- Wählen Sie Datei und dann Projekt mit Gradle-Dateien synchronisieren aus.
5. Schaltfläche „Zu Google Wallet hinzufügen“ erstellen
In diesem Schritt erstellen Sie die Schaltfläche Zu Google Wallet hinzufügen und fügen sie einer vorhandenen Aktivität hinzu. Die Assets für die Schaltfläche wurden bereits in das Projekt aufgenommen. Um die Schaltfläche einzufügen, erstellen Sie eine separate Layoutdatei. Nach dem Hinzufügen sieht die Schaltfläche so aus:
- Erstellen Sie eine neue Layoutdatei:
app/src/main/res/layout/add_to_google_wallet_button.xml
- Fügen Sie der neuen Layoutdatei den folgenden Inhalt hinzu.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48sp"
android:background="@drawable/add_to_google_wallet_button_background_shape"
android:clickable="true"
android:contentDescription="@string/add_to_google_wallet_button_content_description"
android:focusable="true">
<ImageView
android:layout_width="227dp"
android:layout_height="26dp"
android:layout_gravity="center"
android:duplicateParentState="true"
android:src="@drawable/add_to_google_wallet_button_foreground" />
</FrameLayout> - Fügen Sie das
add_to_google_wallet_button.xml
-Layout in die Layoutdatei der Zahlungsaktivität (app/src/main/res/layout/activity_checkout.xml
) ein.<!--
TODO: Create the button under `add_to_google_wallet_button.xml`
and include it in your UI
-->
<include
android:id="@+id/addToGoogleWalletButton"
layout="@layout/add_to_google_wallet_button"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="10dp" />
6. Prüfen, ob die Google Wallet API verfügbar ist
Wenn ein Nutzer Ihre App auf einem Gerät öffnet, das die Google Wallet API nicht unterstützt, kann es zu Problemen beim Hinzufügen der Karte/des Tickets kommen. Wenn das Gerät des Nutzers die Google Wallet API nicht unterstützt, wird die Schaltfläche Zu Google Wallet hinzufügen ausgeblendet, um Verwirrung zu vermeiden. Es kann verschiedene Gründe dafür geben, dass die API nicht verfügbar ist, z. B. eine veraltete Version von Android oder der Google Play-Dienste oder dass Google Wallet im Land des Nutzers nicht verfügbar ist.
In diesem Schritt fügen Sie Ihrer App eine Logik hinzu, die prüft, ob die Google Wallet API auf dem Gerät verfügbar ist. In diesem Fall wird die Schaltfläche in der Aktivität gerendert. Andernfalls wird die Schaltfläche ausgeblendet.
- Öffnen Sie
CheckoutActivity.kt
inapp/src/main/java/com/google/android/gms/samples/wallet/activity/
- Klasseneigenschaft für die
PayClient
-Instanz erstellen// TODO: Create a client to interact with the Google Wallet API
private lateinit var walletClient: PayClient - Instanziieren Sie das Attribut
PayClient
in der MethodeonCreate
.// TODO: Instantiate the client
walletClient = Pay.getClient(this) - Methode erstellen, die prüft, ob das Google Wallet SDK und die Google Wallet API auf dem Gerät verfügbar sind, und das Ergebnis verarbeitet
// TODO: Create a method to check for the Google Wallet SDK and API
private fun fetchCanUseGoogleWalletApi() {
walletClient
.getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES)
.addOnSuccessListener { status ->
if (status == PayApiAvailabilityStatus.AVAILABLE)
layout.passContainer.visibility = View.VISIBLE
}
.addOnFailureListener {
// Hide the button and optionally show an error message
}
} - Methode
fetchCanUseGoogleWalletApi
in der MethodeonCreate
aufrufen, um zu prüfen, ob die Google Wallet API verfügbar ist// TODO: Check if the Google Wallet API is available
fetchCanUseGoogleWalletApi()
Wenn Sie die App ausführen, sollte jetzt die Schaltfläche Zu Google Wallet hinzufügen auf der Benutzeroberfläche angezeigt werden.
7. Generisches Karten-/Ticketobjekt erstellen
Nachdem Sie bestätigt haben, dass die Google Wallet API verfügbar ist, können Sie eine Karte/ein Ticket erstellen und Nutzer auffordern, sie ihrem Wallet hinzuzufügen. Es gibt zwei Abläufe zum Erstellen von Karten-/Ticketobjekten für Nutzer.
Karten-/Ticketobjekt auf dem Backend-Server erstellen
Bei diesem Ansatz wird das Karten-/Ticketobjekt auf einem Backend-Server erstellt und als signiertes JWT an die Clientanwendung zurückgegeben. Diese Methode eignet sich am besten für Fälle mit hoher Nutzerakzeptanz, da sichergestellt wird, dass das Objekt vorhanden ist, bevor der Nutzer versucht, es seinem Wallet hinzuzufügen.
Erstelle das Karten-/Ticketobjekt, wenn der Nutzer es seinem Wallet hinzufügt.
Bei diesem Ansatz wird das Karten-/Ticketobjekt auf dem Backend-Server definiert und in ein signiertes JWT codiert. In der Client-App wird dann die Schaltfläche Zu Google Wallet hinzufügen gerendert, die auf das JWT verweist. Wenn der Nutzer die Schaltfläche auswählt, wird das JWT verwendet, um das Karten-/Ticketobjekt zu erstellen. Diese Option eignet sich am besten für Fälle, in denen die Akzeptanz der Nutzer variiert oder unbekannt ist, da so verhindert wird, dass Karten-/Ticketobjekte erstellt und nicht verwendet werden. Dieser Ansatz wird im Codelab verwendet.
- Öffnen Sie die Datei
backend/generic_pass.js
. - Ersetzen Sie den Wert von
issuerId
durch Ihre Aussteller-ID aus der Google Pay & Wallet Console.// TODO: Define Issuer ID
let issuerId = 'ISSUER_ID'; - Führen Sie die Datei
generic_pass.js
in Ihrem Terminal oder in der Befehlszeile aus.node generic_pass.js
- Kopieren Sie das Ausgabetoken in die Zwischenablage oder in einen Texteditor.
Wenn der Code ausgeführt wird, wird ein neues Karten-/Ticketobjekt definiert und in ein JWT eingebettet. Das JWT wird dann mit dem zuvor erstellten Dienstkontoschlüssel signiert. Dadurch wird die Anfrage an die Google Wallet API authentifiziert, sodass Anmeldedaten nicht in der Client-App gespeichert werden müssen.
In einer Produktionsumgebung ist Ihr Backend-System für das Erstellen von JWTs und die Rückgabe an Clients verantwortlich. In diesem Codelab emuliert das generic_pass.js
-Script dieses Verhalten und „gibt“ ein Token zurück, das Sie in der Client-App verwenden können.
8. Karte/Ticket zu Google Wallet hinzufügen
Nachdem Sie überprüft haben, ob die Google Wallet API verfügbar ist, und ein signiertes JWT erstellt haben, können Sie den Nutzer auffordern, die Karte bzw. das Ticket seinem Wallet hinzuzufügen. In diesem Schritt fügen Sie der Schaltfläche Zu Google Wallet hinzufügen einen Listener hinzu, der die Google Wallet API verwendet, um die Karte bzw. das Ticket im Wallet des Nutzers zu speichern.
- Öffnen Sie die Datei
app/src/main/CheckoutActivity.kt
. - Ersetzen Sie den Wert von
token
durch das zuvor erstellte JWT.// TODO: Save the JWT from the backend "response"
private val token = "TOKEN" - Erstellen Sie eine Klasseneigenschaft zum Speichern des Anfragecodes.
// TODO: Add a request code for the save operation
private val addToGoogleWalletRequestCode = 1000 - Listener für die Schaltfläche Zu Google Wallet hinzufügen festlegen
// TODO: Set an on-click listener on the "Add to Google Wallet" button
addToGoogleWalletButton = layout.addToGoogleWalletButton.
addToGoogleWalletButton.setOnClickListener {
walletClient.savePassesJwt(token, this, addToGoogleWalletRequestCode)
}
Wenn ein Nutzer die Schaltfläche Zu Google Wallet hinzufügen auswählt, wird die Methode walletClient.savePassesJwt
aufgerufen. Bei dieser Methode wird der Nutzer aufgefordert, das neue Karten-/Ticketobjekt seinem Google Wallet hinzuzufügen.
9. Ergebnis von savePassesJwt verarbeiten
Im letzten Schritt dieses Codelabs konfigurieren Sie Ihre App so, dass das Ergebnis des walletClient.savePassesJwt
-Vorgangs verarbeitet wird.
- Öffnen Sie die Datei
app/src/main/CheckoutActivity.kt
. - Überschreiben Sie die Methode
onActivityResult
mit dem folgenden Code:// TODO: Handle the result
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == addToGoogleWalletRequestCode) {
when (resultCode) {
RESULT_OK -> {
// Pass saved successfully. Consider informing the user.
}
RESULT_CANCELED -> {
// Save canceled
}
PayClient.SavePassesResult.SAVE_ERROR ->
data?.let { intentData ->
val errorMessage = intentData.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE)
// Handle error. Consider informing the user.
Log.e("SavePassesResult", errorMessage.toString())
}
else -> {
// Handle unexpected (non-API) exception
}
}
}
}
Ihre App kann jetzt die folgenden Szenarien verarbeiten:
- Karte/Ticket wurde erfolgreich hinzugefügt
- Kündigung durch Nutzer
- Unerwartete Fehler
Führen Sie Ihre App aus, um zu prüfen, ob Sie die Karte bzw. das Ticket hinzufügen und das Ergebnis wie erwartet verarbeiten können.
10. Glückwunsch
Sie haben die Google Wallet API erfolgreich in Android eingebunden.
Weitere Informationen
Die vollständige Integration finden Sie im GitHub-Repository google-pay/wallet-android-codelab.
Karten/Tickets erstellen und Produktionszugriff anfordern
Wenn Sie bereit sind, eigene Karten/Tickets in der Produktion auszustellen, rufen Sie die Google Pay & Wallet Console auf, um Produktionszugriff anzufordern und Ihre Android-App zu autorisieren.
Weitere Informationen finden Sie unter Voraussetzungen für das Android SDK.