Prima di iniziare a utilizzare l'SDK Android, assicurati di aver completato i prerequisiti.
L'SDK Android ti consente di aggiungere pass in Google Wallet. Quando aggiungi il pulsante Google Wallet nella tua app, i tuoi utenti possono usufruire di una semplice e divertente esperienza di aggiunta dei pass a Google Wallet.
Segui i passaggi per aggiungere il pulsante Google Wallet alla tua applicazione Android:
1. Crea un oggetto per i pass
Nota: per creare un oggetto Pass è necessaria una classe Pass. Se non hai ancora creato un pass, segui le istruzioni su come crearne uno.
Definisci un FlightObject
corrispondente, inclusi i seguenti attributi obbligatori:
classId
: l'ID della classe Pass creato nei prerequisiti.id
: un ID univoco per l'oggetto.
passenterName
: nome del passeggero come viene visualizzato sulla carta d'imbarco.
reservationInfo
: informazioni sulla prenotazione del volo.
state
: questo campo viene utilizzato per determinare come viene visualizzato un oggetto. Ad esempio, un oggetto non attivo viene spostato nella sezione "Pass scaduti".
Per ulteriori informazioni su come questi attributi sono rappresentati nella carta d'imbarco, consulta il modello di layout.
Ecco la definizione di carta d'imbarco di esempio:
JSON
{
"id": "ISSUER_ID.OBJECT_ID",
"classId": "ISSUER_ID.CLASS_ID",
"passengerName": "Alex McJacobs",
"reservationInfo": {
"confirmationCode": "123456",
"eticketNumber": "0000000000000",
"frequentFlyerInfo": {
"frequentFlyerProgramName": {
"defaultValue": {
"language": "en",
"value": "Flying rewards program"
}
},
"frequentFlyerNumber": "123456789"
}
},
"state": "ACTIVE"
}
2. Crea un JWT non firmato con l'oggetto
Una volta creatoFlightObject
, aggregalo con un JWT non firmato con l'attributo payload.FlightObjects
, come mostrato nel seguente snippet:
JSON
{
"iss": "OWNER_EMAIL_ADDRESS",
"aud": "google",
"typ": "savetowallet",
"iat": "UNIX_TIME",
"origins": [],
"payload": {
"flightObjects": [ NEW_OBJECT ]
}
}
3. Includi il pulsante di Google Wallet nell'interfaccia utente
Google Wallet fornisce un pulsante familiare che puoi utilizzare per attivare il flusso Aggiungi a Google Wallet nella tua applicazione. Le risorse vettore per il pulsante sono disponibili nelle linee guida per i pulsanti.
Puoi importare asset vettoriali in Android Studio in File > New > Vector
Asset
. Seleziona "File locale" nella procedura guidata e aggiungi un nome (ad es.:
add_to_google_wallet_button.xml
) e individua il file nell'unità locale per importarlo.
Ora puoi utilizzare la funzione di disegno importabile importata per aggiungere il pulsante all'interfaccia utente:
<ImageButton
android:id="@+id/addToGoogleWalletButton"
android:layout_width="match_parent"
android:layout_height="48dp"
android:minWidth="200dp"
android:clickable="true"
android:src="@drawable/add_to_google_wallet_button" />
Il pulsante ha un layout_height
di 48 dp e deve avere una larghezza di almeno 200 dp.
4. Verifica se l'API Google Wallet è disponibile sul dispositivo di destinazione
Prima di salvare il nuovo oggetto, assicurati che l'API Google Wallet
sia disponibile sul dispositivo di destinazione chiamando il metodo getPayApiAvailabilityStatus
nella classe PayClient
. Per iniziare, aggiungi una variabile membro all'attività in cui mostri il pulsante e crei un'istanza al momento della sua creazione:
Kotlin
import com.google.android.gms.pay.PayClient
private lateinit var walletClient: PayClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
walletClient = Pay.getClient(this)
// Additional logic in your onCreate method
}
Java
import com.google.android.gms.pay.PayClient;
private final PayClient walletClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
walletClient = Pay.getClient(application);
// Additional logic in your onCreate method
}
Ora, utilizza il client per verificare se l'API è disponibile:
Kotlin
import com.google.android.gms.pay.PayApiAvailabilityStatus
private fun fetchCanUseGoogleWalletApi() {
walletClient
.getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES)
.addOnSuccessListener { status ->
if (status == PayApiAvailabilityStatus.AVAILABLE) {
// The API is available, show the button in your UI
} else {
// The user or device is not eligible for using the Pay API
}
}
.addOnFailureListener {
// Hide the button and optionally show an error message
}
}
Java
import com.google.android.gms.pay.PayApiAvailabilityStatus;
private void fetchCanAddPassesToGoogleWallet() {
walletClient
.getPayApiAvailabilityStatus(PayClient.RequestType.SAVE_PASSES)
.addOnSuccessListener(status -> {
if (status == PayApiAvailabilityStatus.AVAILABLE) {
// The API is available, show the button in your UI
} else {
// The user or device is not eligible for using the Pay API
};
})
.addOnFailureListener(exception -> {
// Google Play Services is too old, or API availability not verified
// Hide the button and optionally show an error message
});
}
Infine, chiama il metodo descritto sopra nella tua applicazione quando devi determinare la disponibilità dell'API.
5. Aggiungi l'oggetto a Google Wallet
IlFlightObject
può essere aggiunto passando il JWT senza segno dal
passaggio 2 al metodo savePasses
.
Puoi avviare l'operazione di aggiunta facendo clic sul pulsante Google Wallet:
Kotlin
import android.os.Bundle
import android.view.View
import com.google.android.gms.samples.wallet.databinding.ActivityCheckoutBinding
private val addToGoogleWalletRequestCode = 1000
private lateinit var layout: ActivityCheckoutBinding
private lateinit var addToGoogleWalletButton: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Use view binding to access the UI elements
layout = ActivityCheckoutBinding.inflate(layoutInflater)
setContentView(layout.root)
addToGoogleWalletButton = layout.addToGoogleWalletButton
addToGoogleWalletButton.setOnClickListener {
walletClient.savePasses(newObjectJson, this, addToGoogleWalletRequestCode)
}
// Additional logic in your onCreate method
}
Java
import android.os.Bundle;
import android.view.View;
import com.google.android.gms.samples.wallet.databinding.ActivityCheckoutBinding;
private static final int ADD_TO_GOOGLE_WALLET_REQUEST_CODE = 999;
private ActivityCheckoutBinding layout:
private View addToGoogleWalletButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Use view binding to access the UI elements
layout = ActivityCheckoutBinding.inflate(getLayoutInflater());
setContentView(layout.getRoot());
addToGoogleWalletButton = layout.addToGoogleWalletButton;
addToGoogleWalletButton.setOnClickListener(v -> {
walletClient.savePasses(newObjectJson, this, ADD_TO_GOOGLE_WALLET_REQUEST_CODE);
});
// Additional logic in your onCreate method
}
Il metodo savePasses
attiva il flusso di salvataggio e richiama il metodo
onActivityResult
al termine del flusso di salvataggio. L'implementazione
di onActivityResult
dovrebbe essere simile alla seguente:
Kotlin
import android.content.Intent
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == addToGoogleWalletRequestCode) {
when (resultCode) {
RESULT_OK -> {
// Pass saved successfully
}
RESULT_CANCELED -> {
// Save operation canceled
}
PayClient.SavePassesResult.SAVE_ERROR -> data?.let { intentData ->
val errorMessage = intentData.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE)
// Handle error
}
else -> {
// Handle unexpected (non-API) exception
}
}
}
}
Java
import android.content.Intent;
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ADD_TO_GOOGLE_WALLET_REQUEST_CODE) {
switch (resultCode) {
case RESULT_OK: {
// Pass saved successfully
break;
}
case RESULT_CANCELED: {
// Save operation canceled
break;
}
case PayClient.SavePassesResult.SAVE_ERROR: {
if (data != null) {
String apiErrorMessage = data.getStringExtra(PayClient.EXTRA_API_ERROR_MESSAGE);
// Handle error
}
break;
}
default: {
// Handle unexpected (non-API) exception
}
}
}
}
Quando il pass viene aggiunto correttamente, resultCode
contiene il valore di
Activity.RESULT_OK
.
[SOLO TEST] passaggi
Quando è ancora in modalità demo, tutti i pass che crei avranno un testo aggiuntivo "[SOLO TEST]" nel titolo del pass. per differenziare i pass demo dai pass in tempo reale. Una volta che avrai ricevuto l'approvazione di produzione dal nostro team, questi pass per la modalità demo non avranno più il testo aggiuntivo quando l'utente riapre l'app Wallet su un dispositivo connesso.
Passaggi successivi
- Valuta i casi d'uso delle carte d'imbarco e implementa quelli in linea con le esigenze aziendali
- Personalizza l'aspetto delle carte d'imbarco seguendo queste linee guida per il branding
- Invia la tua procedura UX per la revisione finale nella sezione "API Google Wallet" su Google Pay e Wallet Console
- Verifica la tua integrazione e pubblica!
- Hai altre domande? Consulta le nostre Domande frequenti.