Yang Perlu Anda Ketahui tentang Verifikasi Pemeriksaan Toko Aplikasi (tanda terima App Store)

StackOverflow masih memiliki banyak pertanyaan tentang memvalidasi cek App Store, jadi kami memutuskan untuk menulis artikel tentang topik ini dalam format pertanyaan dan jawaban.


gambar


Apa itu cek App Store?


Ini adalah file terenkripsi dalam format PKCS # 7, yang berisi informasi tentang semua pembelian dalam aplikasi. Itu terletak di bundel aplikasi dan dapat dengan mudah diperoleh dengan memanggil: Bundle.main.appStoreReceiptURL .


Apakah selalu ada file ini?


Jika aplikasi diunduh dari App Store, maka ya, selalu. Dan jika itu diinstal melalui Xcode atau Testflight, maka pada awalnya aplikasi tidak memiliki cek kotak pasir sampai pembelian pertama atau pemulihan cek.


Apa artinya "memvalidasi cek"?


Ini berarti mendekripsi file, menerima tanggal JSON, dan memverifikasi pembelian yang dilakukan oleh pengguna. Anda dapat melakukan ini secara lokal atau dengan mengirim permintaan ke Apple.


Dalam kasus apa pengembang memerlukan validasi cek?


Untuk memvalidasi pembelian yang baru saja selesai.
Ketika banyak yang melakukan jailbreak, itu relevan: ada utilitas untuk memalsukan cek. Sekarang masalah ini telah berhenti menjadi akut, karena jailbreak telah menjadi langka.


Saat mengembalikan pembelian.
Jika pengguna menginstal ulang aplikasi Anda atau meluncurkan dari perangkat lain, Anda harus memberinya akses ke fungsionalitas yang telah dibayarnya. Setelah mendekripsi App Store, Anda dapat mengetahui apakah pembelian dalam aplikasi dibeli.


Saat membeli langganan yang dapat diperbarui secara otomatis.
Untuk menentukan status langganan saat ini dan tanggal kedaluwarsa.


Pembelian apa yang dapat dikembalikan selama validasi?


Ada 4 jenis pembelian dalam aplikasi:


  • pembelian barang habis pakai
  • pembelian non-konsumsi
  • langganan yang tidak diperpanjang
  • Berlangganan yang dapat diperpanjang secara otomatis
    Anda dapat mengembalikan semuanya kecuali pembelian yang dihabiskan. Ini termasuk, misalnya, koin dalam aplikasi Anda - sesuatu yang dapat Anda beli sebanyak yang Anda suka. Anda harus menyimpan jumlah koin saat ini di pengguna di server Anda.

Apa metode validasi yang ada?


Ada tiga di antaranya:


  • validasi lokal menggunakan OpenSSL,
  • Validasi atas permintaan oleh Apple langsung dari perangkat iOS,
  • Validasi berdasarkan permintaan oleh Apple menggunakan server Anda.

Metode validasi mana yang lebih baik?


Validasi lokal sangat kompleks dan membutuhkan banyak waktu dan upaya untuk mengimplementasikannya. Anda juga perlu menambahkan pustaka OpenSSL ke proyek Anda. Dalam beberapa kasus, Anda harus memperbarui cek.


Apple tidak merekomendasikan memeriksa cek pada perangkat iOS itu sendiri. Ini tidak aman: permintaan dapat dicegat dengan serangan man-in-the-middle.


Cara terbaik untuk memvalidasi cek di server. Selain itu, Apple sesekali menambahkan bidang baru di sana, misalnya, grace_period_expires_date dan subscription_group_identifier . Di server kami, kami dapat dengan cepat melakukan perubahan tanpa memperbarui aplikasi. Dan dua metode validasi sebelumnya dapat dengan mudah dibodohi dengan hanya mengubah waktu sistem pada perangkat iOS.


Untuk Apa Rahasia Bersama?


Ini adalah garis kunci khusus yang diperlukan untuk mendekripsi cek dengan pembelian yang dapat diperbarui secara otomatis. Apple menggunakan rahasia Bersama sebagai parameter dalam permintaan HTTPS ke Apple.


Di mana mendapatkan Rahasia Bersama?


Buka App Store Connect, buka aplikasi, buka tab Fitur , di bagian Pembelian bawaan Anda akan melihat kunci Dibagikan untuk tombol aplikasi . Hasilkan kunci baru, jika belum.


Kode sampel untuk memvalidasi cek


 func validateReceipt(){ #if DEBUG let urlString = "https://sandbox.itunes.apple.com/verifyReceipt" #else let urlString = "https://buy.itunes.apple.com/verifyReceipt" #endif guard let receiptURL = Bundle.main.appStoreReceiptURL, let receiptString = try? Data(contentsOf: receiptURL).base64EncodedString() , let url = URL(string: urlString) else { return } let requestData : [String : Any] = ["receipt-data" : receiptString, "password" : "YOUR_SHARED_SECRET", "exclude-old-transactions" : false] let httpBody = try? JSONSerialization.data(withJSONObject: requestData, options: []) var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("Application/json", forHTTPHeaderField: "Content-Type") request.httpBody = httpBody URLSession.shared.dataTask(with: request) { (data, response, error) in // convert data to Dictionary and view purchases }.resume() } 

Ini adalah contoh memvalidasi cek di iOS. Ingatlah untuk mengganti nilai YOUR_SHARED_SECRET dengan rahasia Anda bersama .


Setelah menerima data , konversikan ke Dictionary :


 DispatchQueue.main.async { if let data = data, let jsonData = try? JSONSerialization.jsonObject(with: data, options: .allowFragments){ // your non-consumable and non-renewing subscription receipts are in `in_app` array // your auto-renewable subscription receipts are in `latest_receipt_info` array } } 

Contoh tanda terima App Store yang didekripsi


Di sini Anda dapat melihat contoh cek dengan dua transaksi dalam aplikasi dengan langganan yang dapat diperpanjang secara otomatis.


Apa perbedaan antara in_app dan latest_receipt_info ?


  • latest_receipt_info berisi semua transaksi, termasuk pembaruan pembelian yang dapat diperbarui secara otomatis. Anda harus menggunakan hanya array ini.


  • in_app berisi transaksi pembelian yang tidak in_app dan langganan yang tidak dapat diperbarui. Transaksi pertama langganan Anda yang dapat diperpanjang secara otomatis juga digandakan di sini. Pembelian yang dapat in_app juga akan muncul di array in_app , tetapi kemudian menghilang ketika pengembang menyelesaikan transaksi.



Kesimpulan


Kami di Apphud menerapkan validasi pemeriksaan App Store untuk aplikasi dengan langganan yang dapat diperbarui secara otomatis di SDK sumber terbuka yang nyaman. Apphud juga membantu Anda melacak status berlangganan, menganalisis metrik kunci, secara otomatis menawarkan diskon kepada pengguna yang tidak berlangganan, dan banyak lagi. Jika Anda mengalami sakit saat bekerja dengan langganan, cobalah solusi kami secara gratis.

Source: https://habr.com/ru/post/id472188/


All Articles