
Dan bagaimana masih belum ada artikel tentang Habré tentang ini? Tidak masalah, perlu untuk memperbaikinya.
Ada 2 cara untuk menambahkan pembelian dalam aplikasi ke aplikasi Android Anda - lama dan baru. Hingga 2017, semua orang menggunakan perpustakaan dari anjlab, tetapi sejak Juni 2017 situasinya telah berubah, Google merilis perpustakaannya sendiri untuk pembelian dan langganan internal - Play Billing Library. Sekarang yang terakhir dianggap standar.
Play Billing Library sangat sederhana.
Hubungkan ketergantungan.
implementation 'com.android.billingclient:billing:1.2'
Tambahkan izin dalam manifes.
<uses-permission android:name="com.android.vending.BILLING"/>
Buat instance BillingClient dan mulai koneksi.
private BillingClient mBillingClient; ... mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() { @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
Kami masuk ke metode
onPurchasesUpdated () ketika pembelian dilakukan, dalam metode
onBillingSetupFinished () Anda dapat meminta informasi tentang barang dan pembelian.
Minta informasi produk. Masukkan
querySkuDetails () di
onBillingSetupFinished () .
private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private String mSkuId = "sku_id_1"; ... @Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
Dalam kode, Anda mungkin memperhatikan konsep SKU, apa itu? SKU - dari Unit Penyimpanan Saham Inggris (pengidentifikasi barang komoditas).
Sekarang di
mSkuDetailsMap kami memiliki semua informasi tentang produk (nama, deskripsi, harga) yang terdaftar di Play Console dari aplikasi ini (lebih lanjut tentang itu nanti). Perhatikan
skuList.add baris ini
(mSkuId); , di sini kami menambahkan id produk dari Play Console, daftar di sini semua produk yang ingin Anda berinteraksi. Kami memiliki satu produk —sku_id_1.
Semuanya siap memenuhi permintaan pembelian. Kami melewati id produk. Jalankan metode ini, misalnya, dengan mengklik tombol.
public void launchBilling(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); mBillingClient.launchBillingFlow(this, billingFlowParams); }
Sekarang, dengan menjalankan metode ini, Anda akan melihat kotak dialog ini (sekitar Gambar dari Internet).

Sekarang, jika pengguna membeli barang - mereka harus menyediakannya. Tambahkan metode
payComplete () dan lakukan tindakan di dalamnya yang memberikan akses ke produk yang dibeli. Misalnya, jika pengguna membeli pemutusan iklan, buat metode ini agar iklan tidak lagi muncul.
... @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
Semuanya baik-baik saja, tetapi jika pengguna me-restart aplikasi, program kami tidak tahu apa-apa tentang pembelian. Penting untuk meminta informasi tentang mereka. Lakukan di
onBillingSetupFinished () .
@Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
Dalam
pembelian, Daftar mendapat daftar semua pembelian yang dilakukan oleh pengguna.
Kami melakukan pemeriksaan: jika barang dibeli, jalankan
payComplete () .
Selesai Tetap mempublikasikan aplikasi ini di Play Console dan menambahkan produk. Cara menambahkan produk:
Deskripsi halaman aplikasi >
Konten untuk dijual >
Buat konten terbatas .
Catatan 1 : Anda tidak akan dapat menambahkan barang sampai Anda mengunggah aplikasi build ke Play Console.
Catatan 2 : Untuk melihat dialog pembelian, Anda perlu mengunggah build ke Play Console, tambahkan produk dan tunggu sebentar (~ 30 menit - 1 jam - 3 jam) hingga produk diperbarui, hanya setelah kotak dialog muncul dan Anda dapat akan melakukan pembelian.
Catatan 3 :
Harap perbaiki kesalahan
input params. SKU tidak boleh null - produk di Play Console belum diperbarui, harap tunggu.
Catatan 4 : Anda dapat menemukan
Kesalahan Galat "Transaksi Anda tidak dapat diselesaikan" , dalam log sebagai
kode respons 6, saat Anda akan menguji. Untuk alasan apa hal ini terjadi pada saya tidak diketahui secara pasti, tetapi menurut pengamatan saya, ini terjadi setelah sering dimanipulasi dengan pembelian dan pengembalian barang. Untuk mengatasinya, buka menu kartu bank dan transfer kartu Anda. Bagaimana cara menghindarinya? Tambahkan akun Anda ke Play Console sebagai tester dan beli hanya dari kartu tes.
Demo di githubBeli saya kopi(Omong-omong, sistem donet berfungsi di Habr dengan tombol di bawah artikel - kira-kira Moderator).