Setelah membuat kartu dan mengenkodenya dalam JWT, Anda siap menerbitkannya di aplikasi Android. Untuk melakukannya, Anda harus memastikan bahwa Google Wallet API tersedia di perangkat pengguna, menampilkan tombol 'Tambahkan ke Google Wallet', lalu menyimpan kartu ke Google Wallet mereka setelah mereka mengetuk tombol tersebut.
Prasyarat
Sebelum mencoba menerbitkan kartu, pastikan Anda telah menyelesaikan hal berikut:
- Menyelesaikan semua langkah dalam Panduan aktivasi.
- Buat minimal satu Class Kartu.
- Buat minimal satu Objek Kartu.
- Mengenkode Class Kartu dan Objek Kartu di JWT.
1. Menginstal Google Wallet Android SDK
Untuk menggunakan Google Wallet Android SDK, tambahkan com.google.android.gms:play-services-pay
ke bagian dependencies
di file build.gradle
level aplikasi Anda:
implementation "com.google.android.gms:play-services-pay:16.5.0"
2. Memeriksa ketersediaan Google Wallet API
Sebelum menyimpan objek baru, pastikan Google Wallet API
tersedia di perangkat target dengan memanggil metodegetPayApiAvailabilityStatus
di class PayClient
.
Mulai dengan menambahkan variabel anggota ke aktivitas tempat Anda akan menampilkan tombol dan membuat instance-nya saat aktivitas dibuat:
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
}
Jika Anda menggunakan pola desain lain, pertimbangkan untuk menempatkan logika bisnis khusus domain dengan tepat. Misalnya, jika Anda menggunakan pola MVVM, tempatkan logika bisnis terkait UI di Aktivitas atau Fragmen Anda (mis.: Elemen UI, hasil aktivitas), dan logika operasional dalam model tampilan Anda (mis.: pembuatan instance klien, pemicu panggilan jaringan).
Selanjutnya, gunakan PayClient
untuk memeriksa apakah API tersedia:
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
});
}
Terakhir, panggil metode yang baru saja Anda tentukan di aplikasi saat Anda perlu menentukan ketersediaan API.
Menangani saat API tidak tersedia
Beberapa alasan mengapa API mungkin tidak tersedia meliputi versi layanan Android atau Google Play sudah tidak berlaku, atau Google Wallet tidak tersedia di negara pengguna.
Jika API tidak tersedia, pertimbangkan untuk menyembunyikan tombol dan kembali ke integrasi lain (misalnya, menggunakan link JWT). Perhatikan bahwa pengguna mungkin memenuhi syarat untuk menggunakan API ini di masa mendatang.
3. Menambahkan tombol 'Tambahkan ke Google Wallet'
Google Wallet menyediakan tombol yang sudah dikenal yang dapat Anda gunakan untuk memicu alur Tambahkan ke Google Wallet di aplikasi Anda. Aset vektor untuk tombol tersedia di Pedoman tombol.
Anda dapat mengimpor aset vektor di Android Studio pada bagian File > New > Vector Asset
. Pilih "Local file" di wizard, tambahkan nama (mis.:
add_to_google_wallet_button.xml
) dan cari file di drive lokal Anda untuk mengimpornya.
Sekarang, Anda dapat menggunakan drawable yang diimpor untuk menambahkan tombol ke antarmuka pengguna:
<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" />
Tombol memiliki layout_height
48 dp dan harus memiliki lebar minimal 200 dp.
4. Menambahkan kartu ke Google Wallet pengguna
FlightObject
dapat ditambahkan dengan meneruskan JWT yang tidak ditandatangani ke metode savePasses
.
Anda dapat memulai operasi penambahan sebagai hasil dari mengklik tombol 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
}
Penanganan hasil
Metode savePasses
memicu alur simpan dan memanggil
metode onActivityResult
setelah alur simpan selesai. Implementasi onActivityResult
harus mirip dengan berikut ini:
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
}
}
}
}
Jika kartu berhasil ditambahkan, resultCode
akan berisi nilai Activity.RESULT_OK
.