1. Pengantar
Dalam codelab ini, Anda akan berfokus pada pembuatan produk sekali beli (OTP) dan menambahkan penawaran praorder untuk produk tersebut.
Catatan: Sebelum memulai codelab ini, Anda harus meminta akses untuk fitur praorder dengan mengisi Formulir Minat EAP Produk sekali beli.
Penonton
Codelab ini ditujukan untuk developer aplikasi Android yang sudah memahami produk sekali beli dan ingin memahami cara menambahkan penawaran praorder ke produk sekali beli mereka.
Prasyarat
Jika Anda baru mengenal produk sekali beli, sebaiknya selesaikan codelab Buka pasar baru dengan harga produk regional.
Yang akan Anda pelajari ...
- Cara menggunakan Konsol Google Play untuk membuat penawaran praorder untuk produk sekali beli Anda.
- Cara menggunakan API Play Billing Library untuk membuat kueri produk sekali beli dan detail penawaran praorder yang sesuai.
Yang Anda butuhkan ...
- Akses ke Konsol Google Play dengan akun developer. Jika Anda tidak memiliki akun developer, Anda harus membuat akun.
- Aplikasi contoh untuk codelab ini yang dapat Anda download dari GitHub.
- Android Studio.
2. Mem-build aplikasi contoh
Codelab ini menggunakan aplikasi Android contoh untuk mengajari Anda cara mengelola produk sekali beli. Aplikasi contoh dirancang sebagai aplikasi Android yang berfungsi penuh dan memiliki kode sumber lengkap yang menunjukkan aspek berikut:
- Mengintegrasikan aplikasi dengan PBL.
- Pengambilan produk sekali beli dan penawaran praorder terkait.
- Menjalankan alur pembelian untuk harga regional.
Video demo berikut menunjukkan tampilan dan perilaku aplikasi contoh setelah di-deploy dan dijalankan.
Jika sudah memahami produk sekali beli dan Play Billing Library (PBL), Anda dapat mendownload aplikasi contoh dan mencobanya.
Prasyarat
Sebelum Anda membuat dan men-deploy aplikasi contoh, lakukan hal berikut:
- Buat akun developer Konsol Google Play. Jika Anda sudah memiliki akun developer, lewati langkah ini.
- Buat aplikasi baru di Konsol Play. Saat membuat aplikasi, Anda dapat menentukan nama aplikasi apa pun untuk aplikasi contoh.
- Menginstal Android Studio.
Build
Tujuan dari langkah build ini adalah untuk membuat file Android App Bundle bertanda tangan dari aplikasi contoh.
Untuk membuat app bundle Android, lakukan langkah-langkah berikut:
- Download aplikasi contoh dari GitHub.
- Bangun aplikasi contoh. Sebelum membangun, ubah nama paket aplikasi contoh, lalu bangun. Jika Anda memiliki paket aplikasi lain di Konsol Play, pastikan nama paket yang Anda berikan untuk aplikasi contoh unik.
Catatan: Membangun aplikasi contoh hanya akan membuat file APK yang dapat Anda gunakan untuk pengujian lokal. Namun, menjalankan aplikasi tidak akan mengambil produk dan harga karena produk belum dikonfigurasi di Konsol Play. - Buat Android App Bundle yang ditandatangani.
Langkah berikutnya adalah mengupload Android app bundle ke Konsol Google Play.
3. Membuat OTP dengan praorder di Konsol Play
Untuk membuat produk sekali beli (OTP) di Konsol Google Play, Anda harus memiliki aplikasi di Konsol Play. Buat aplikasi di Konsol Play, lalu upload app bundle bertanda tangan yang dibuat sebelumnya.
Buat aplikasi
Untuk membuat aplikasi:
- Login ke Konsol Google Play menggunakan akun developer Anda.
- Klik Buat aplikasi. Tindakan ini akan membuka halaman Buat aplikasi.
- Masukkan nama aplikasi, pilih bahasa default, dan detail terkait aplikasi lainnya.
- Klik Buat aplikasi. Tindakan ini akan membuat aplikasi di Konsol Google Play.
Sekarang Anda dapat mengupload app bundle yang ditandatangani dari aplikasi contoh.
Upload app bundle yang ditandatangani
- Upload app bundle yang ditandatangani ke jalur pengujian internal Konsol Google Play. Hanya setelah mengupload, Anda dapat mengonfigurasi fitur terkait monetisasi di Konsol Play.
- Klik Uji dan rilis > Pengujian > Rilis internal > Buat rilis baru.
- Masukkan nama rilis dan upload file APK yang ditandatangani.
- Klik Berikutnya, lalu klik Simpan dan publikasikan.
Sekarang, Anda dapat membuat produk sekali beli.
Membuat produk sekali beli
Sekarang, buat produk sekali beli yang ingin Anda beli oleh pengguna.
- Buka aplikasi contoh di Konsol Google Play, lalu buka Monetisasi dengan Play > Produk > Produk sekali beli.
- Klik Buat produk sekali beli.
- Masukkan detail produk berikut:
- ID Produk: Masukkan ID unik. Misalnya,
upcoming_movie_1. - (Opsional) Tag: Tambahkan tag yang relevan.
- Nama: Masukkan nama produk. Misalnya,
Product Movie. - Deskripsi: Masukkan deskripsi produk. Misalnya,
Product Description. - (Opsional) Tambahkan gambar Ikon: Upload ikon yang mewakili produk Anda.
- ID Produk: Masukkan ID unik. Misalnya,
- Klik Berikutnya.
- Tambahkan opsi pembelian dan konfigurasi ketersediaan regionalnya. Produk sekali beli memerlukan setidaknya satu opsi pembelian, yang menentukan cara pemberian hak, harganya, dan ketersediaan regional. Untuk codelab ini, kita akan menambahkan opsi Beli standar untuk produk.Di bagian Opsi pembelian, masukkan detail berikut:
- ID Opsi Pembelian: Masukkan ID unik. Misalnya,
buy-movie. - Jenis pembelian: Pilih Beli.
- (Opsional) Tag: Tambahkan tag khusus untuk opsi pembelian ini.
- (Opsional) Klik Advanced options untuk mengonfigurasi opsi lanjutan. Untuk tujuan codelab ini, Anda dapat melewati konfigurasi opsi lanjutan.
- ID Opsi Pembelian: Masukkan ID unik. Misalnya,
- Selanjutnya, Anda harus mengonfigurasi ketersediaan dan harga regional untuk opsi pembelian. Dalam ketersediaan regional, Anda akan menentukan wilayah tempat produk Anda tersedia, termasuk wilayah tempat aplikasi Anda belum dipublikasikan. Secara default, opsi pembelian akan tersedia di semua wilayah.Di bagian Ketersediaan dan harga, klik Edit ketersediaan dan akses.
- Pilih Setel ke tidak tersedia.
- Batalkan pilihan hanya negara
United States, lalu klik Tetapkan ke tidak tersedia. Sekarang produk sekali beli hanya akan tersedia diUnited States. - Di drop-down Semua wilayah, pilih Negara dan wilayah yang tersedia. Anda hanya akan melihat
United States. - Klik ikon Harga. Tindakan ini akan menampilkan dialog untuk menetapkan harga.
- Masukkan 10 USD, lalu klik Simpan.
- Klik Simpan sebagai draf.
Catatan: Jangan aktifkan opsi pembelian terlebih dahulu. Kami akan mengaktifkannya setelah mengonfigurasi penawaran praorder. Hal ini karena Anda tidak dapat menambahkan penawaran praorder ke opsi pembelian aktif yang ketersediaan regionalnya telah ditetapkan.
Menambahkan penawaran praorder
Sekarang, Anda akan menambahkan penawaran praorder untuk opsi pembelian beli yang Anda buat sebelumnya. Penawaran praorder memungkinkan pengguna membeli item Anda sebelum rilis resminya. Perhatikan bahwa penawaran praorder hanya didukung untuk opsi pembelian Beli dan hanya dapat dikonfigurasi untuk produk baru di suatu wilayah.
Menambahkan penawaran praorder mencakup 2 langkah berikut:
- Siapkan opsi pembelian Beli untuk penawaran praorder.
- Tambahkan penawaran praorder untuk opsi pembelian.
Siapkan opsi pembelian Beli untuk penawaran praorder
- Buka aplikasi contoh di Konsol Google Play, lalu buka Monetisasi dengan Play > Produk > Produk sekali beli.
- Di halaman Produk sekali beli, klik panah kanan untuk produk Anda (
upcoming_movie_1). Tindakan ini akan membuka halaman Edit produk sekali beli. - Klik panah kanan untuk opsi pembelian
buy-movieyang Anda buat sebelumnya. Tindakan ini akan membuka halaman Mengedit opsi pembelian. - Klik Edit ketersediaan dan akses, lalu pilih Tetapkan ke tersedia dan izinkan pengguna melakukan praorder.
- Dari drop-down Semua wilayah, pilih Negara dan wilayah yang tersedia. Hanya
United Statesyang telah Anda konfigurasi sebelumnya yang akan ditampilkan. - Pilih negara, lalu klik Tetapkan ke tersedia untuk praorder saja.
- Klik Simpan.
Perhatikan bahwa Anda belum menambahkan penawaran praorder ke opsi pembelian. Langkah berikutnya adalah menambahkan penawaran praorder.
Menambahkan penawaran praorder
- Buka aplikasi contoh di Konsol Google Play, lalu buka Monetisasi dengan Play > Produk > Produk sekali beli.
- Di halaman Produk sekali beli, klik Tambahkan penawaran > Praorder untuk produk Anda (
upcoming_movie_1). Tindakan ini akan membuka halaman Tambahkan praorder. - Masukkan Detail Praorder:
- ID praorder: Masukkan
preorder-offer-1. - (Opsional) Tambahkan diskon: Anda dapat memilih Tidak ada, Persentase, atau Diskon mutlak. Untuk tujuan codelab ini, pilih Tidak ada.
- (Opsional) Tag: Tambahkan tag yang relevan.
- Tanggal dan waktu mulai: Tetapkan tanggal setidaknya 3 hari ke depan.
- Tanggal dan waktu berakhir: Tetapkan tanggal setidaknya 24 jam setelah tanggal mulai.
- Ketersediaan setelah praorder: Pilih apakah produk tersedia segera setelah periode praorder atau pada tanggal/waktu tertentu di kemudian hari.
- (Opsional) Jaminan harga lebih rendah: Pilih opsi ini jika Anda ingin pengguna ditagih dengan harga terendah antara harga praorder mereka dan harga saat rilis. Hal ini dapat menjadi insentif yang kuat bagi pembeli awal.
- ID praorder: Masukkan
- Klik Simpan.
- Buka halaman Edit produk sekali beli untuk produk sekali beli Anda (upcoming_movie_1).
- Klik Aktifkan untuk opsi pembelian beli (
buy-movie). - Klik Aktifkan untuk penawaran praorder (
preorder-offer-1) di bagian opsi pembelian beli. Tindakan ini akan mengaktifkan penawaran praorder dan menayangkannya pada tanggal yang sebelumnya Anda konfigurasi dalam detail praorder.
Video pembuatan penawaran praorder
Video berikut menunjukkan langkah-langkah pembuatan penawaran praorder yang dijelaskan sebelumnya.
4. Berintegrasi dengan PBL
Untuk mengintegrasikan aplikasi Anda dengan Play Billing Library (PBL), lakukan langkah-langkah berikut:
- Tambahkan dependensi Play Billing Library ke contoh aplikasi.
dependencies { val billing_version = "8.1.0" implementation("com.android.billingclient:billing-ktx:$billing_version") } - Lakukan inisialisasi BillingClient. BillingClient adalah SDK klien yang ada di aplikasi Anda dan berkomunikasi dengan Library Layanan Penagihan Play. Cuplikan kode berikut menunjukkan cara menginisialisasi klien penagihan.
private BillingClient createBillingClient() { return BillingClient.newBuilder(activity) .enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build()) // For one-time products, add a listener to process and acknowledge the purchases. This will notify // Google the purchase was processed. // For client-only apps, use billingClient.acknowledgePurchase(). // If you have a secure backend, you must acknowledge purchases on your server using the // server-side API. // See https://developer.android.com/google/play/billing/security#acknowledge // In this sample snippet purchases aren't processed. You must // implement your business logic to process and acknowledge the purchases. .setListener((billingResult, purchases) -> {}) .enableAutoServiceReconnection() .build(); } - Hubungkan ke Google Play.Cuplikan kode berikut menunjukkan cara menghubungkan ke Google Play.
/** * Starts the billing connection with Google Play. This method should be called exactly once * before any other methods in this class. * * @param productList The list of products to query for after the connection is established. */ public void startBillingConnection(List<Product> productList) { billingClient.startConnection( new BillingClientStateListener() { @Override public void onBillingSetupFinished(BillingResult billingResult) { if (billingResult.getResponseCode() == BillingResponseCode.OK) { Log.d(TAG, "Billing Client Connection Successful"); queryProductDetails(productList); } else { Log.e(TAG, "Billing Client Connection Failed: " + billingResult.getDebugMessage()); listener.onBillingSetupFailed(billingResult); // Propagate the error to the listener to show a message to the user. } } @Override public void onBillingServiceDisconnected() { Log.e(TAG, "Billing Client Connection Lost"); listener.onBillingError("Billing Connection Lost"); } }); } - Ambil detail produk sekali beli.Setelah mengintegrasikan aplikasi Anda dengan PBL, Anda harus mengambil detail produk sekali beli ke dalam aplikasi Anda. Cuplikan kode berikut menunjukkan cara mengambil detail produk sekali beli di aplikasi Anda.
Mengambil produk sekali beli (private void queryProductDetails(List<Product> productList) { QueryProductDetailsParams queryProductDetailsParams = QueryProductDetailsParams.newBuilder().setProductList(productList).build(); billingClient.queryProductDetailsAsync( queryProductDetailsParams, new ProductDetailsResponseListener() { @Override public void onProductDetailsResponse( BillingResult billingResult, QueryProductDetailsResult productDetailsResponse) { if (billingResult.getResponseCode() == BillingResponseCode.OK) { List<ProductDetails> productDetailsList = productDetailsResponse.getProductDetailsList(); listener.onProductDetailsResponse(productDetailsList); } else { Log.e(TAG, "QueryProductDetailsAsync Failed: " + billingResult.getDebugMessage()); listener.onBillingError("Query Products Failed: " + billingResult.getResponseCode()); } } }); }upcoming_movie_1dalam contoh ini) diProductDetails, akan memberi Anda respons yang mirip dengan berikut: Perhatikan bahwa detail penawaran praorder tersedia di{ "productId": "upcoming_movie_1", "type": "inapp", "title": "Purrfect Mayhem: The Final Playback (Movies All Day | Play Samples)", "name": "Purrfect Mayhem: The Final Playback", "description": "Yolo and Thorne must reach the original broadcasting site to initiate the \"Final Playback\" and save the timeline. Follow them through their race against the Clockinators.", "skuDetailsToken": "<---skuDetailsToken--->", "oneTimePurchaseOfferDetails": {}, "oneTimePurchaseOfferDetailsList": [ { "priceAmountMicros": 8500000, "priceCurrencyCode": "USD", "formattedPrice": "$8.50", "offerIdToken": "<---offerIdToken--->", "offerId": "preorder", "purchaseOptionId": "buy-option", "offerTags": [], "validTimeWindow": { "startTimeMillis": 1756771200000, "endTimeMillis": 1785542400000 }, "preorderDetails": { "preorderReleaseTimeMillis": 1785542400000, "preorderPresaleEndTimeMillis": 1785542400000 } } ] }oneTimePurchaseOfferDetailsList. Daftar ini memiliki 1 opsi pembelian (buy-option) yang penawaran praordernya dikonfigurasi di Konsol Play. Anda dapat mengidentifikasi setiap opsi pembelian secara unik berdasarkan offerIdToken-nya. - Ambil token penawaran beserta detail penawaran praorder. Anda memerlukan token penawaran untuk memulai alur penagihan di langkah 6.
@Override public void onProductDetailsResponse(List<ProductDetails> productDetailsList) { if (productDetailsList != null && !productDetailsList.isEmpty()) { // Process productDetailsList returned by QueryProductDetailsResult for (ProductDetails productDetails : productDetailsResult.getProductDetailsList()) { for (OneTimePurchaseOfferDetails oneTimePurchaseOfferDetails : productDetails.getOneTimePurchaseOfferDetailsList()) { // Checks if the offer is a preorder offer. if (oneTimePurchaseOfferDetails.getPreorderDetails() != null) { // Process the returned PreorderDetails OneTimePurchaseOfferDetails.PreorderDetails preorderDetails = oneTimePurchaseOfferDetails.getPreorderDetails(); // Get preorder release time in millis. long preorderReleaseTimeMillis = preorderDetails.getPreorderReleaseTimeMillis(); // Get preorder presale end time in millis. long preorderPresaleEndTimeMillis = preorderDetails.getPreorderPresaleEndTimeMillis(); // Get offer ID String offerId = oneTimePurchaseOfferDetails.getOfferId(); // Get the associated purchase option ID if (oneTimePurchaseOfferDetails.getPurchaseOptionId() != null) { String purchaseOptionId = oneTimePurchaseOfferDetails.getPurchaseOptionId(); } } } } } else { Log.e(TAG, "No product details found for " + productId); } } - Mulai alur penagihan.
/** * Launches the billing flow for the product with the given offer token. * * @param activity The activity instance from which the billing flow will be launched. * @param productDetails The product details of the product to purchase. * @param offerToken The offer token of the product to purchase. * @return The result of the billing flow. */ public void launchPurchase(Activity activity, ProductDetails productDetails, String offerToken) { ImmutableList<BillingFlowParams.ProductDetailsParams> productDetailsParamsList = ImmutableList.of( BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetails) .setOfferToken(offerToken) .build()); BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setProductDetailsParamsList(productDetailsParamsList) .build(); billingClient.launchBillingFlow(activity, billingFlowParams); }
5. Opsi pembelian pengujian
Sebelum menyediakan produk sekali beli di aplikasi aktif, Anda dapat menguji integrasi PBL menggunakan penguji lisensi dan Play Billing Lab.
Untuk memahami cara menguji opsi pembelian menggunakan Play Billing Lab, lihat codelab Buka pasar baru dengan harga produk regional.
6. Langkah berikutnya
- Pelajari cara menganalisis pengabaian pembelian produk.
- Pelajari cara menjangkau pasar baru menggunakan harga regional.
- Pelajari cara memaksimalkan integrasi penagihan Play Anda.
- Jangan lupa untuk mengikuti praktik terbaik untuk memverifikasi dan memproses pembelian di backend aman Anda setelah pengguna mulai membeli produk ini.
Dokumen referensi
7. Selamat!
Selamat! Anda telah berhasil membuka Konsol Google Play untuk membuat penawaran praorder untuk produk sekali beli. Sekarang Anda memiliki pemahaman yang lebih mendalam tentang katalog produk fleksibel Google Play untuk pembelian sekali beli.
Survei
Masukan Anda tentang codelab ini sangat kami hargai. Luangkan waktu beberapa menit untuk mengisi survei kami.