Informazioni su questo codelab
1. Introduzione
Panoramica
L'API Google Wallet ti consente di interagire con gli utenti tramite vari tipi di tessere: carte fedeltà, offerte, carte regalo, biglietti per eventi, biglietti per il trasporto pubblico, carte d'imbarco e altro ancora. Ogni tipo di tessera, o classe di tessera, è dotato di campi e funzionalità specifici per i casi d'uso per migliorare l'esperienza utente.
Tuttavia, potrebbero non essere adatti a tutti i casi d'uso. Per creare un'esperienza più personalizzata, puoi utilizzare il tipo di tessera generico. Ecco alcuni casi d'uso di esempio per il tipo di documento generico:
- Tessere per il parcheggio
- Tessere della biblioteca
- Buoni con valore memorizzato
- Tessere di abbonamento a palestre
- Prenotazioni
Puoi utilizzare documenti generici per qualsiasi caso d'uso che può essere presentato con:
- Fino a tre righe di informazioni
- (Facoltativo) Grafica del codice a barre
- (Facoltativo) Sezione Dettagli
Per saperne di più sull'API Google Wallet o sull'aggiunta di un pulsante Aggiungi a Google Wallet a una pagina web, consulta la documentazione per gli sviluppatori di Google Wallet.
Passare classi e oggetti
L'API Google Wallet espone metodi per creare quanto segue:
Tipo | Descrizione |
Passare il corso | Un modello per un singolo oggetto tessera. Contiene informazioni comuni a tutti gli oggetti pass che appartengono a questa classe. |
Passa oggetto | Un'istanza di una classe di documenti che è univoca per un ID utente. |
Informazioni su questo codelab
In questo codelab completerai le seguenti attività.
- Creare un nuovo account emittente in modalità demo
- Crea un account di servizio per l'emissione delle tessere
- Crea una nuova classe di documenti generici
- Crea un nuovo oggetto tessera
- Creare un pulsante Aggiungi a Google Wallet per salvare una tessera
- Mostrare il pulsante nella pagina web
- Gestire il risultato del salvataggio della tessera
Prerequisiti
- Git
- Un Account Google con accesso alla console Google Cloud
- Node.js versione 10 o successive
Obiettivi
Dopo aver completato questo codelab, potrai:
- Creare oggetti pass utilizzando Google Wallet
- Creare un pulsante Aggiungi a Google Wallet
Assistenza
Se non riesci a procedere in un determinato punto del codelab, il repository GitHub google-pay/wallet-web-codelab contiene una soluzione completa da utilizzare come riferimento.
2. Configurazione
In questo passaggio, creerai un account emittente in modalità demo. In questo modo potrai creare classi e oggetti di tessere che possono essere aggiunti ai portafogli degli utenti. A questo punto, dovrai creare un progetto e un account di servizio Google Cloud. Verranno utilizzati per creare in modo programmatico classi e oggetti pass nello stesso modo di un server di backend. Infine, dovrai autorizzare l'account di servizio Google Cloud a gestire le tessere nel tuo account emittente Google Wallet.
Registrati per un account emittente Google Wallet
Per creare e distribuire tessere per Google Wallet è necessario un account emittente. Puoi registrarti utilizzando la console di Google Pay e Wallet. Inizialmente, avrai accesso alla creazione di tessere in modalità demo. Ciò significa che solo utenti di test specifici potranno aggiungere le tessere che crei. Gli utenti di test possono essere gestiti nella console Google Pay & Wallet.
Per ulteriori informazioni sulla modalità demo, consulta i prerequisiti per i permessi generici.
- Apri la Console di Google Pay e Wallet.
- Segui le istruzioni sullo schermo per creare un account emittente
- Seleziona API Google Wallet.
- Conferma di aver compreso i Termini di servizio e le Norme sulla privacy
- Copia il valore Issuer ID (ID emittente) in un editor di testo o in un'altra posizione
- Nella scheda Gestisci, seleziona Configura account di prova.
- Aggiungi gli indirizzi email che utilizzerai in questo codelab
Abilita l'API Google Wallet
- Accedi alla console Google Cloud.
- Se non hai ancora un progetto Google Cloud, creane uno ora (per ulteriori informazioni, consulta Creare e gestire i progetti).
- Abilita l'API Google Wallet (indicata anche come API Google Pay for Passes) per il tuo progetto
Creare un account di servizio e una chiave
Per chiamare l'API Google Wallet sono necessari un account di servizio e una chiave dell'account di servizio. L'account di servizio è l'identità che chiama l'API Google Wallet. La chiave del service account contiene una chiave privata che identifica la tua applicazione come service account. Questa chiave è sensibile, quindi mantienila riservata.
Crea un account di servizio
- Nella console Google Cloud, apri Account di servizio.
- Inserisci un nome, un ID e una descrizione per l'account di servizio
- Seleziona CREA E CONTINUA.
- Seleziona FINE.
Crea una chiave dell'account di servizio
- Seleziona il tuo account di servizio
- Seleziona il menu KEYS.
- Seleziona AGGIUNGI CHIAVE, quindi Crea nuova chiave.
- Seleziona il tipo di chiave JSON
- Seleziona CREA.
Ti verrà chiesto di salvare il file della chiave nella tua workstation locale. Assicurati di ricordare la posizione.
Imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS
La variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS
viene utilizzata dagli SDK Google per autenticarsi come account di servizio e accedere a diverse API per un progetto Google Cloud.
- Segui le istruzioni riportate nella documentazione relativa alle chiavi dell'account di servizio Google Cloud per impostare la variabile di ambiente
GOOGLE_APPLICATION_CREDENTIALS
- Verifica che la variabile di ambiente sia impostata in una nuova sessione di terminale (MacOS/Linux) o riga di comando (Windows) (potrebbe essere necessario avviare una nuova sessione se ne hai già una aperta).
echo $GOOGLE_APPLICATION_CREDENTIALS
Autorizza l'account di servizio
Infine, dovrai autorizzare l'account di servizio a gestire le tessere Google Wallet.
- Apri la Console di Google Pay e Wallet.
- Seleziona Utenti.
- Seleziona Invita un utente.
- Inserisci l'indirizzo email dell'account di servizio (ad es.
test-svc@myproject.iam.gserviceaccount.com
) - Seleziona Sviluppatore o Amministratore dal menu a discesa Livello di accesso.
- Seleziona Invita.
3. Avvia l'app Node.js di esempio
Durata 10:00
In questo passaggio, eseguirai un'applicazione Node.js di esempio che funge da sito web di shopping e server di backend.
Clona il repository di esempio
Il repository google-pay/wallet-web-codelab contiene un progetto di esempio basato su Node.js e diversi file di script che simulano un server di backend utilizzato per il provisioning di classi e oggetti delle tessere. Dovrai modificarli in modo da includere un pulsante Aggiungi a Google Wallet in una schermata dei dettagli del prodotto.
- Clona il repository nella tua workstation locale
git clone https://github.com/google-pay/wallet-web-codelab.git
Installa le dipendenze del progetto
- Apri il repository clonato nel terminale o nel prompt dei comandi
- Vai alla directory
web
(questa è l'app che modificherai nel resto di questo codelab)cd web
- Installa le dipendenze Node.js
npm install .
- Avvia l'app
node app.js
- Apri l'app in esecuzione su http://localhost:3000
Se inserisci il tuo indirizzo email e selezioni Crea pass, non succederà nulla. Nei passaggi successivi, configurerai l'app per creare un nuovo oggetto e una nuova classe di documenti.
4. Crea una classe di documenti generici
In questo passaggio creerai la classe di base per la tessera. Ogni volta che viene creato un nuovo pass per un utente, questo eredita le proprietà definite nella classe pass.
La classe tessera che creerai durante questo codelab utilizza la flessibilità delle tessere generiche per creare un oggetto che funge sia da badge di identità sia da tracker dei punti della sfida. Quando viene creato un oggetto pass da questa classe, avrà il seguente aspetto.
Le classi di pass possono essere create direttamente nella Console di Google Pay e Wallet o utilizzando l'API Google Wallet. In questo codelab, creerai la classe Generic pass utilizzando l'API. Questo segue la procedura utilizzata da un server di backend privato per creare classi di pass.
- Apri il file
web/app.js
- Sostituisci il valore di
issuerId
con il tuo ID emittente da Google Pay & Wallet Console// TODO: Define Issuer ID
const issuerId = 'ISSUER_ID'; - Individua la funzione
createPassClass
- Nella funzione, crea un client HTTP autenticato e utilizza l'API Google Wallet per creare una nuova classe di documenti
// TODO: Create a Generic pass class
let genericClass = {
'id': `${classId}`,
'classTemplateInfo': {
'cardTemplateOverride': {
'cardRowTemplateInfos': [
{
'twoItems': {
'startItem': {
'firstValue': {
'fields': [
{
'fieldPath': 'object.textModulesData["points"]'
}
]
}
},
'endItem': {
'firstValue': {
'fields': [
{
'fieldPath': 'object.textModulesData["contacts"]'
}
]
}
}
}
}
]
},
'detailsTemplateOverride': {
'detailsItemInfos': [
{
'item': {
'firstValue': {
'fields': [
{
'fieldPath': 'class.imageModulesData["event_banner"]'
}
]
}
}
},
{
'item': {
'firstValue': {
'fields': [
{
'fieldPath': 'class.textModulesData["game_overview"]'
}
]
}
}
},
{
'item': {
'firstValue': {
'fields': [
{
'fieldPath': 'class.linksModuleData.uris["official_site"]'
}
]
}
}
}
]
}
},
'imageModulesData': [
{
'mainImage': {
'sourceUri': {
'uri': 'https://storage.googleapis.com/wallet-lab-tools-codelab-artifacts-public/google-io-2021-card.png'
},
'contentDescription': {
'defaultValue': {
'language': 'en-US',
'value': 'Google I/O 2022 Banner'
}
}
},
'id': 'event_banner'
}
],
'textModulesData': [
{
'header': 'Gather points meeting new people at Google I/O',
'body': 'Join the game and accumulate points in this badge by meeting other attendees in the event.',
'id': 'game_overview'
}
],
'linksModuleData': {
'uris': [
{
'uri': 'https://io.google/2022/',
'description': 'Official I/O \'22 Site',
'id': 'official_site'
}
]
}
};
let response;
try {
// Check if the class exists already
response = await httpClient.request({
url: `${baseUrl}/genericClass/${classId}`,
method: 'GET'
});
console.log('Class already exists');
console.log(response);
} catch (err) {
if (err.response && err.response.status === 404) {
// Class does not exist
// Create it now
response = await httpClient.request({
url: `${baseUrl}/genericClass`,
method: 'POST',
data: genericClass
});
console.log('Class insert response');
console.log(response);
} else {
// Something else went wrong
console.log(err);
res.send('Something went wrong...check the console logs!');
}
}
Quando il codice viene eseguito, viene creato un nuovo gruppo di pass e viene visualizzato l'ID gruppo. L'ID classe è costituito dall'ID emittente seguito da un suffisso definito dallo sviluppatore. In questo caso, il suffisso è impostato su codelab_class
(l'ID classe sarà simile a 1234123412341234123.codelab_class
). I log di output includeranno anche la risposta dell'API Google Wallet.
5. Creare un oggetto Generic pass
In questo passaggio, configurerai l'app Node.js per creare un oggetto Generic pass utilizzando la classe creata in precedenza. Esistono due flussi per creare oggetti pass per gli utenti.
Crea l'oggetto pass sul server di backend
In questo approccio, l'oggetto pass viene creato su un server di backend e restituito all'app client come JWT firmato. Questa opzione è più adatta per i casi in cui l'adozione da parte degli utenti è elevata, in quanto garantisce che l'oggetto esista prima che l'utente provi ad aggiungerlo al proprio portafoglio.
Crea l'oggetto tessera quando l'utente la aggiunge al proprio portafoglio
In questo approccio, l'oggetto pass viene definito e codificato in un JWT firmato sul server di backend. Nell'app client viene visualizzato un pulsante Aggiungi a Google Wallet che fa riferimento al JWT. Quando l'utente seleziona il pulsante, il JWT viene utilizzato per creare l'oggetto pass. Questa opzione è più adatta nei casi in cui l'adozione da parte degli utenti sia variabile o sconosciuta, in quanto impedisce la creazione di oggetti pass e il loro mancato utilizzo. Questo approccio verrà utilizzato nel codelab.
- Apri il file
web/app.js
- Individua la funzione
createPassObject
- Nella funzione, definisci un nuovo oggetto pass per l'utente
// TODO: Create a new Generic pass for the user
let objectSuffix = `${req.body.email.replace(/[^\w.-]/g, '_')}`;
let objectId = `${issuerId}.${objectSuffix}`;
let genericObject = {
'id': `${objectId}`,
'classId': classId,
'genericType': 'GENERIC_TYPE_UNSPECIFIED',
'hexBackgroundColor': '#4285f4',
'logo': {
'sourceUri': {
'uri': 'https://storage.googleapis.com/wallet-lab-tools-codelab-artifacts-public/pass_google_logo.jpg'
}
},
'cardTitle': {
'defaultValue': {
'language': 'en',
'value': 'Google I/O \'22'
}
},
'subheader': {
'defaultValue': {
'language': 'en',
'value': 'Attendee'
}
},
'header': {
'defaultValue': {
'language': 'en',
'value': 'Alex McJacobs'
}
},
'barcode': {
'type': 'QR_CODE',
'value': `${objectId}`
},
'heroImage': {
'sourceUri': {
'uri': 'https://storage.googleapis.com/wallet-lab-tools-codelab-artifacts-public/google-io-hero-demo-only.jpg'
}
},
'textModulesData': [
{
'header': 'POINTS',
'body': '1234',
'id': 'points'
},
{
'header': 'CONTACTS',
'body': '20',
'id': 'contacts'
}
]
};
// TODO: Create the signed JWT and link
res.send("Form submitted!");
Se ricarichi l'app, inserisci il tuo indirizzo email e invii il modulo, non vedrai alcun output. L'oggetto pass viene definito dall'applicazione di backend, ma non viene restituito alcun output. Successivamente, trasformerai la tessera in un link Aggiungi a Google Wallet.
6. Creare un pulsante Aggiungi a Google Wallet
Per il passaggio finale, dovrai creare un JWT firmato e restituire un link che può essere utilizzato nel pulsante Aggiungi a Google Wallet. Quando l'utente seleziona il pulsante, gli viene chiesto di salvare la tessera nel suo portafoglio.
- Crea i claim JWT, codificali utilizzando la chiave privata dell'account di servizio e restituisci un pulsante Aggiungi a Google Wallet con il link incorporato
// TODO: Create the signed JWT and link
const claims = {
iss: credentials.client_email,
aud: 'google',
origins: [],
typ: 'savetowallet',
payload: {
genericObjects: [
genericObject
]
}
};
const token = jwt.sign(claims, credentials.private_key, { algorithm: 'RS256' });
const saveUrl = `https://pay.google.com/gp/v/save/${token}`;
res.send(`<a href='${saveUrl}'><img src='wallet-button.png'></a>`); - Ricarica l'app in esecuzione nel browser
- Inserisci il tuo indirizzo email nel modulo e seleziona Crea pass.
- Quando viene visualizzato, seleziona il pulsante Aggiungi a Google Wallet.
7. Complimenti
Complimenti, hai integrato correttamente l'API Google Wallet sul web.
Scopri di più
Dai un'occhiata a un'integrazione completa nel repository GitHub google-pay/wallet-web-codelab.
Creare pass e richiedere l'accesso in produzione
Quando è tutto pronto per emettere i tuoi pass in produzione, vai a Google Pay & Wallet Console per richiedere l'accesso in produzione.
Per saperne di più, consulta i prerequisiti dell'API web.