Saat ini saya menguji Penagihan Dalam Aplikasi untuk aplikasi di masa mendatang, dan setelah saya berhasil "membeli" item uji "android.test.purchased" untuk pertama kalinya, sekarang saya menerima kode respons 7 setiap kali saya mencoba membelinya lagi, yang berarti saya sudah memiliki item ini.
12-15 23: 02: 14.149: E / IabHelper (19829): Kesalahan penagihan dalam aplikasi: Tidak dapat membeli item, Respons kesalahan: 7: Item Sudah Dimiliki
Dari apa yang saya pahami, pembelian ini seharusnya selalu memungkinkan, bukan? Agar pengembang dapat menguji aplikasinya?
Jika tidak, bagaimana cara "mereset" statusnya menjadi tidak dimiliki? Saya menggunakan paket util dari Contoh Penagihan Dalam Aplikasi Google.
android
in-app-billing
psykhi
sumber
sumber
Jawaban:
Tambahkan kode ini ke utas untuk memulai permintaan konsumsi.
Di sini untuk tes pembelian, purchaseToken adalah
Dan
maka konsumsi berhasil.
juga jangan lupa untuk membuat mService menjadi publik di
maka dimungkinkan untuk mengakses seperti ini:
sumber
Tidak perlu menulis kode konsumsi khusus. Cukup gunakan perintah adb untuk menghapus data Google Play Store:
sumber
Ternyata item android.test.purchased berperilaku seperti ID biasa. Artinya jika Anda ingin dapat membelinya lagi, Anda harus mengkonsumsinya di suatu tempat di kode Anda. Saya pikir dokumentasi Google menyesatkan tentang masalah ini, dan mereka harus menambahkan ID statis lain yang dapat Anda beli tanpa henti untuk tujuan pengujian.
sumber
billingClient.queryPurchases()
tidak kembali item yang tidak dikonsumsi, jadi sekarang saya tidak dapat mengkonsumsi barang karena saya tidak bisa mendapatkanpurchaseToken
ituVersi dalam aplikasi 3:
sumber
Versi 3 - Cara tercepat untuk menyelesaikannya : Menghapus cache Google Play Store akan membuat "android.test.purchased" tersedia lagi.
sumber
saya menggunakan adb shell:
sumber
Ini adalah bagaimana kita dapat mengkonsumsi Item tersebut
sumber
android.test.purchase
titik tertentu yang menyebabkan masalah - tugas inventaris dalam penagihan dalam aplikasi hanya menimbulkan banyak kesalahan dan tidak pernah selesai. Menjalankan ini sebagai satu kali membersihkannya sehingga saya dapat melanjutkan menggunakan saya ke SKU saya yang sebenarnya dan melanjutkan seperti sebelumnya. Terima kasihMenurut pendapat saya, jika program Anda tidak dirancang untuk mengonsumsi item, Anda tidak perlu mengubah kodenya untuk membersihkan memori vendor luar. Ini akan membuat kode Anda lebih rapuh dan Anda harus menghabiskan banyak waktu untuk menambah dan menghapus kode yang bukan milik perangkat lunak Anda, jadi menerapkan solusi seperti itu merupakan rancangan yang buruk.
Solusi terbaik yang berhasil bagi saya untuk menghapus android.test.purchased adalah
lalu
Saya tidak perlu menghapus uang tunai dan menelusuri pengaturan aplikasi saya atau mengubah kode untuk itu. Saya memang perlu menambahkan adb ke variabel jalur sistem windows yang cukup lurus ke depan. Jadi ya, Anda perlu menggunakan adb yang mungkin Anda butuhkan juga ..
Anda cukup menambahkan C: \ ... \ android-sdk \ platform-tools; di jalur windows di variabel lingkungan, dan saya membayangkan bahwa itu cukup sederhana di mac dan linux os juga. Semoga ini membantu seseorang menghabiskan beberapa hari lebih sedikit dengan menerapkan android dalam tagihan aplikasi.
sumber
uninstall
tidak perlu menghapus sku android.test.purchased .Masalah utamanya adalah Anda harus mengonsumsi
android.test.purchased
item tersebut. Tetapi item ini tidak akan tersedia di inventaris kueri Anda, jadi Anda tidak dapat menggunakan menggunakan aliran normal.Jadi, jika Anda menggunakan IabHelper, di
IabHelper
kelas, Anda dapat mengubahIInAppBillingService
mService menjadi publik untuk sementara sehingga dapat diakses dari IabHelper Anda.Kemudian di kelas Anda, Anda dapat mengonsumsi seperti ini,
Jika berhasil, responnya akan menjadi 0.
Semoga ini membantu.
sumber
consumeAsync()
di android.test.purchased . Tidak ada masalah dengan itu.Untuk tujuan pengujian, saya juga menyarankan Anda untuk memasukkan sepotong kode yang akan membersihkan semua produk yang Anda beli sebelum memanggil metode yang menginisialisasi aliran pembelian gp. Itu sangat nyaman, ketika Anda menguji hanya satu item pada saat ini. Misal seperti ini:
sumber
buka konsol Google Play dan buka tab Manajemen Pesanan. Di sana Anda dapat mengembalikan / membatalkan pembelian percobaan.
sumber
Jika Anda berada di lingkungan pengujian
1) Dalam kasus android.test.purchased, saya dapat menyetel ulang pembayaran palsu dengan memulai ulang perangkat android (menggunakan inventaris).
2) Di InApp util ada file bernama Security.java membuatnya sebagai berikut, untuk sementara. Karena pembayaran pengujian (palsu) selalu mengembalikan palsu karena pengecualian keamanan.
Kemudian di OnIabPurchaseFinishedListener Anda, panggil fechInvForconsumeItem ()
FechInvForconsumeItem () adalah
Konsumsi Pendengar adalah
sumber
sumber
Dalam kasus saya, tampaknya Google tidak mencatat pembelian item tersebut. Sebaliknya, salinan lokal Layanan Google Play menyimpan pembelian dalam cache. Dengan begitu, saat permintaan kedua dibuat di perangkat yang sama,
android.test.purchased already owned
muncul. Namun, menggunakan perangkat lain atau menyetel ulang perangkat akan menghapus cache, dan memungkinkan pembelian diulang.sumber
Dalam kasus saya, saya hanya perlu menghapus cache aplikasi. Setelah mengosongkan cache, saya dapat memulai aliran pembelian lagi.
Dari perangkat saya (4.4.2), saya menavigasi ke "Pengaturan-> Manajer aplikasi". Selanjutnya, saya memilih aplikasi dari tab "UNDUH", lalu "Kosongkan cache".
sumber
Ini adalah perbedaan antara barang habis pakai dan barang tidak habis pakai; item yang tidak dapat dikonsumsi (yang tampaknya Anda hadapi di sini) statusnya terus dilacak, sementara item yang dapat dikonsumsi dapat dibeli beberapa kali. Anda harus masuk ke konsol manajemen Play dan membatalkan / mengembalikan uang penjualan untuk mengujinya lagi.
sumber