3.4.13
0.60.5
iOS
getAvailablePurchases tidak memiliki efek samping
Memanggil getAvailablePurchases
di iOS biarkan muncul dialog "Masuk ke iTunes Store".
Ini tidak terjadi di Android.
Saya menelepon getAvailablePurchases
selama aplikasi mulai memulihkan item yang dibeli. Menurut dokumentasi saya mengerti bahwa ini adalah cara yang umum, bukan?
Untuk memulihkan item yang dibeli, saya menelepon getAvailablePurchases
berdasarkan perubahan AppState . Sayangnya AppState tidak hanya dipicu saat aplikasi dimulai tetapi juga p.ex. setelah kembali ke aplikasi dari dialog (disebabkan oleh aplikasi) p.ex. Masuk ke iTunes ... :(
Bagi pengguna hal ini sangat mengganggu. Terutama jika pengguna tidak berniat membeli sesuatu, dia tidak ingin memasukkan kredensial untuk menyingkirkan dialog ini.
perangkat nyata
hubungi getAvailablePurchases
Saat dalam pengembangan, ini menunjukkan bahwa Anda dapat masuk dengan akun kotak pasir Anda. Saya tidak percaya dokumentasinya sangat jelas tentang ini.
Saya pikir untuk produksi mungkin juga menampilkan prompt setiap kali memanggil fungsi ini, bukan? Cara saya menerapkan ini adalah saya menyebutnya saat pengguna menekan "pulihkan pembelian" dan setelah purchaseUpdatedListener dipanggil. Untuk mengetahui apakah pengguna memiliki langganan di masa mendatang, saya menyimpannya di backend dan menampilkannya ke aplikasi.
Hai @voxspox @alexpchin benar. @alexpchin Karena kami sedang mengerjakan jembatan, kami berasumsi bahwa orang mungkin tahu sedikit tentang IAP
dalam bahasa asli. Menempatkan semua hal yang sudah ada di setiap platform cukup membebani pengelola. Jika ada beberapa karya pada dokumen yang menurut Anda mungkin berguna, silakan tambahkan apa saja dan berikan PR
.
@mifi Saya belum pernah melihat aplikasi dengan tombol "pulihkan pembelian saya". Dari perspektif UX, tombol seperti itu merupakan beban dan juga tidak perlu, karena aplikasi harus tahu apa yang telah saya beli;)
@hyochan Saya mendapatkan prompt juga setelah mendistribusikan aplikasi melalui TestFlight (Saya menganggap ini adalah mode produksi ?!)
Saya telah melihat beberapa aplikasi dengan fungsi itu. Saya tidak begitu ingat sekarang tetapi saya pikir itu diperlukan (atau dibutuhkan oleh apel) dalam beberapa kasus. Juga dalam contoh pedoman toko aplikasi Apple mereka memiliki tombol ini:
https://developer.apple.com/app-store/subscriptions/
Juga saya pikir itu akan menjadi UX yang buruk jika pengguna harus memasukkan ID apel mereka saat membuka aplikasi saya, saya pikir itu akan membingungkan. (Saya pernah melihat ini terjadi sebelumnya jika sesi kedaluwarsa atau sesuatu terjadi dengan SSL MITM yang sering terjadi pada halaman arahan wifi publik)
edit: sebenarnya tampaknya apel membutuhkannya
Apakah mungkin ada cara untuk mengetahui sebelum menelepon getAvailablePurchases
bahwa prompt akan muncul? Atau dengan kata lain, bagaimana saya bisa mendeteksi jika pengguna terhubung ke iTunes atau tidak?
1+ sama
Hai teman-teman, ada jawaban tentang ini? seperti yang saya pahami ini adalah fungsi debugging tetapi saya sedang menguji dengan testflight dan saya ingin mencegah hal ini terjadi, apakah mungkin untuk meninggalkan mode kotak pasir?
Sementara itu, saya telah menemukan solusi untuk saya. Saya memperkenalkan variabel baru isRestorePurchasesEnabled
yang disimpan secara permanen oleh aplikasi saya.
Init:
isRestorePurchasesEnabled = false
Saat aplikasi dimulai:
if (Android || isRestorePurchasesEnabled) {
call getAvailablePurchases
on error.code === 'E_USER_CANCELLED' -> isRestorePurchasesEnabled= false
}
Saat membeli:
isRestorePurchasesEnabled = true
requestSubscription ...
Pengaturan:
Button "restore purchases" -> isRestorePurchasesEnabled = true
Pengguna tidak akan pernah melihat perintah sambungkan iTunes lagi. Pemulihan hanya terjadi setelah pembelian selesai dan dengan demikian kredensial sudah diketik + disimpan dan prompt tidak akan ditampilkan.
Satu-satunya kasus di mana prompt akan ditampilkan, tetapi hanya sekali, adalah jika pengguna logout di Akun Pengaturan / iTunes / Sandbox. Tidak tahu apakah ini ada dalam mode produksi.
Halo, sepertinya tidak ada aktivitas terkait masalah ini akhir-akhir ini. Apakah masalah sudah diperbaiki, atau masih membutuhkan perhatian masyarakat? Masalah ini mungkin ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Anda juga dapat memberi label masalah ini sebagai "Untuk Diskusi" atau "Edisi pertama yang baik" dan saya akan membiarkannya terbuka. Terima kasih atas kontribusi Anda.
Halo,
Saya benar-benar bingung tentang satu topik, dapatkah seseorang membantu saya?
Saya ingin membuat pengontrol yang memeriksa apakah pengguna masih memiliki produk atau tidak?
Bagaimana saya bisa mendeteksi pembatalan pengguna dengan menggunakan perpustakaan ini untuk Apple dan Google Play Store?
Saya bahkan tidak tahu apakah itu terkait dengan metode getAvailablePurchase ini.
Terima kasih.
Saya ingin mencari tahu apakah ini juga akan terjadi dalam produksi, bukan hanya TestFlight.
Saat ini kami menggunakan fungsi ini saat aplikasi dimuat, bukan saat menekan tombol.
Apple masih menyarankan kami untuk tidak memanggil fungsi ini di aplikasi secara otomatis atau memulai
Jangan pulihkan pembelian secara otomatis, terutama saat aplikasi Anda diluncurkan. Memulihkan permintaan pembelian untuk kredensial App Store pengguna, yang mengganggu aliran aplikasi Anda.
https://developer.apple.com/documentation/storekit/in-app_purchase/restoring_purchased_products# : ~: text = Restore% 20Completed% 20Transactions, dari% 20your% 20app's% 20completed% 20transactions.
Cara saya menerapkannya adalah mengirim tanda terima ke backend saat pengguna menekan beli atau pulihkan pembelian. Kemudian backend dapat menyediakan aplikasi dengan status langganan di masa mendatang.
Apple masih menyarankan kami _not_ untuk memanggil fungsi ini pada aplikasi secara otomatis atau startup
Jangan pulihkan pembelian secara otomatis, terutama saat aplikasi Anda diluncurkan. Memulihkan permintaan pembelian untuk kredensial App Store pengguna, yang mengganggu aliran aplikasi Anda.
https://developer.apple.com/documentation/storekit/in-app_purchase/restoring_purchased_products# : ~: text = Restore% 20Completed% 20Transactions, dari% 20your% 20app's% 20completed% 20transactions.
Cara saya menerapkannya adalah mengirim tanda terima ke backend saat pengguna menekan beli atau pulihkan pembelian. Kemudian backend dapat menyediakan aplikasi dengan status langganan di masa mendatang.
Untuk langganan perpanjangan otomatis, bagaimana Anda mendapatkan tanda terima terbaru tanpa mengunggah dari klien?
Dengan menjalankan polling berkala di backend yang secara berkala memvalidasi setiap pembelian seperti ini. Kemudian ambil tanda terima terbaru dari validasi (yang berasal dari server google / apple) dan simpan kembali ke database.
Dengan menjalankan polling berkala di backend yang secara berkala memvalidasi setiap pembelian seperti ini. Kemudian ambil tanda terima terbaru dari validasi (yang berasal dari server google / apple) dan simpan kembali ke database.
Hai @mifi Terima kasih atas tanggapan yang cepat! Saya telah menyimpan latestReceipt
di server setelah transaksi awal. Jadi saat polling dengan latestReceipt
apakah nilai latestReceipt
dikembalikan?
Ya, fungsi iap.validate
di backend akan memanggil apple / google apis yang mengembalikan tanda terima terbaru. ini dapat dengan mudah dilihat saat menguji langganan yang dapat diperbarui dengan interval pengembangan (5 menit per periode langganan)
Terima kasih @mifi. Itu sangat membantu pemahaman saya! Rasanya aneh mengirim "recentReceipt" untuk menerima "latestReceipt"
Halo, sepertinya tidak ada aktivitas terkait masalah ini akhir-akhir ini. Apakah masalah sudah diperbaiki, atau masih membutuhkan perhatian masyarakat? Masalah ini mungkin ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Anda juga dapat memberi label masalah ini sebagai "Untuk Diskusi" atau "Edisi pertama yang baik" dan saya akan membiarkannya terbuka. Terima kasih atas kontribusi Anda.
Menutup masalah ini setelah tidak aktif dalam waktu lama. Jika masalah ini masih ada di rilis terbaru, silakan membuat masalah baru dengan informasi terbaru.
Komentar yang paling membantu
Apakah mungkin ada cara untuk mengetahui sebelum menelepon
getAvailablePurchases
bahwa prompt akan muncul? Atau dengan kata lain, bagaimana saya bisa mendeteksi jika pengguna terhubung ke iTunes atau tidak?