Pedoman Ulasan App Store iOS untuk IAP
Copikan prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Mengapa Anda perlu memperhatikan dengan teliti pedoman Apple untuk mendapatkan aplikasi Anda disetujui di App Store, terutama ketika mengimplementasikan pembelian dalam aplikasi dan langganan. Panduan ini mencakup segala yang Anda butuhkan untuk melewati tinjauan pada submission pertama Anda.

Sebelum Anda Mengirimkan
Bab yang berjudul “Sebelum Anda Mengirimkan”Selesaikan Pengaturan App Store Connect
Bab yang berjudul “Selesaikan Pengaturan App Store Connect”Sebelum Apple meninju aliran pembelian Anda, pastikan catatan aplikasi itu sendiri sudah lengkap:
- Tambahkan Kebijakan Privasi URL di App Store Connect
- Tambahkan sebuah URL Bantuan yang mengarah ke informasi kontak yang sebenarnya untuk pengguna
- Selesaikan penilaian usia context: Halaman/area: Halaman solusi contoh aplikasi. Peran: Label UI singkat atau item navigasi. Dilihat di: komponen solusi/SolutionAppExample.astro. Kunci pesan `solution_app_examples_rating` (Penilaian Contoh Aplikasi Solusi).
- soal survei sehingga aplikasi dapat dipublikasikan Tambahkan Detail Kontak Ulasan Aplikasi
- dan catatan reviewer yang jelas akun demo yang tidak berakhir selama tinjauan
Siapkan Screenshot Nyata
Bagian berjudul “Siapkan Screenshot Nyata”- Gunakan screenshot saat ini dari build yang sebenarnya sedang dalam tinjauan
- Untuk iPhone,
1290 x 2796(6,7 inci) adalah ukuran default yang paling mudah - Jika aplikasi Anda berjalan di iPad, unggah screenshot iPad juga
- Ukuran iPad yang diterima saat ini termasuk
2064 x 2752dan (13 inci)2048 x 2732dan (12,9 inci) - Tidak perlu memanjangkan tangkapan layar iPhone untuk memalsukan dukungan iPad
Melakukan Tes Perjalanan Peninjau di TestFlight
Judul bagian “Melakukan Tes Perjalanan Peninjau di TestFlight”Jalankan jalur yang tepat yang akan diikuti Apple di perangkat nyata:
- Pasang versi terbaru dari TestFlight
- Masuk dengan akun tinjauan yang Anda rencanakan untuk menyediakan
- Capai paywall tanpa gerakan tersembunyi atau menu debug
- Lakukan alur pembelian, restorasi, dan pengelolaan langganan
- Verifikasi aplikasi masih berfungsi dengan benar jika izin di tolak
Persyaratan Pembelian Aplikasi
Judul Bagian: “Persyaratan Pembelian Aplikasi”Pengungkapan Harga Transparan (Kritis)
Judul Bagian: “Pengungkapan Harga Transparan (Kritis)”Apple memerlukan pengungkapan harga yang jelas sebelum pembelian apapun:
Elemen Wajib:
- Tampilkan harga yang tepat sebelum tombol pembelian
- Tampilkan frekuensi pembayaran (misalnya “$9,99/bulan”)
- Tunjukkan apa yang didapatkan pengguna dengan uang mereka
- Indikasikan kapan biaya akan terjadi
Penolakan Umum:
“Harga langganan harus jelas dan terbuka.”
:::peringatan Konsistensi Harga Semua harga harus sesuai di:
- Daftar Metadata Toko App
- Antarmuka Pembelian Aplikasi
- Antarmuka Pengelolaan Langganan
Perbedaan harga sebesar $1 antara daftar toko ($4,99) dan aplikasi ($5,99) akan memicu penolakan otomatis.
Pengenalan Paket Langganan
Bab yang berjudul “Pengenalan Paket Langganan”Klarifikasi yang Wajib:
- Tunjukkan semua tingkat langganan yang tersedia secara bersamaan
- Perbandingan yang Jelas Fitur per Tingkat
- Tidak ada pengaturan otomatis ke tingkat premium melalui trik UI
- Instruksi Pencabutan yang Mudah Ditemukan

Contoh UI yang Patuh:
import { NativePurchases } from '@capgo/native-purchases';
function SubscriptionScreen() { return ( <div> <h2>Choose Your Plan</h2>
{/* Show all tiers equally */} <PlanCard title="Basic" price="$4.99/month" features={['Feature A', 'Feature B']} /> <PlanCard title="Premium" price="$9.99/month" features={['All Basic', 'Feature C', 'Feature D']} highlighted={false} // Don't force premium />
{/* Clear cancellation info */} <Text> Cancel anytime in Settings > Subscriptions. No refunds for partial periods. </Text> </div> );}Pembelian Ulang
Bab berjudul “Pembelian Ulang”Pengimplementasian yang Diperlukan:
Setiap aplikasi dengan IAP harus menyediakan cara bagi pengguna untuk memulihkan pembelian sebelumnya tanpa menghubungi dukungan.
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function restorePurchases() { try { await NativePurchases.restorePurchases();
const { purchases } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.SUBS, });
const activeSub = purchases.find( (purchase) => purchase.isActive && purchase.expirationDate, );
if (activeSub) { unlockPremiumFeatures(); showMessage('Purchases restored successfully!'); return; }
const { purchases: iaps } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.INAPP, }); const hasIap = iaps.some((purchase) => purchase.productIdentifier === 'premium_unlock');
showMessage( hasIap ? 'Premium purchase restored!' : 'No previous purchases found.', ); } catch (error) { showError('Failed to restore purchases. Please try again.'); }}
// Add a visible "Restore Purchases" button<Button onClick={restorePurchases}> Restore Purchases</Button>Alasan Penolakan yang Umum
Bab berjudul “Alasan Penolakan yang Umum”1. Aplikasi Mengalami Crash atau Fungsi yang Rusak
Bab berjudul “1. Aplikasi Mengalami Crash atau Fungsi yang Rusak”Kenapa Gagal:
- Mengapa aplikasi mengalami crash saat di-launch
- Mengapa alur pembelian gagal untuk diselesaikan
- Mengapa fitur-fitur yang ditampilkan dalam screenshot tidak berfungsi
Mengapa Mencegahnya:
- Mengapa Anda harus menguji aplikasi di perangkat nyata (bukan hanya simulator)
- Mengapa Anda harus menguji semua alur langganan secara keseluruhan
- Mengapa Anda harus memastikan validasi strukturnya berfungsi
- Mengapa Anda harus memeriksa penanganan kesalahan jaringan
2. Kesalahan Metadata
Bab 2. Kesalahan MetadataKenapa Gagal:
- Contoh layar menampilkan fitur yang tidak ada di build saat ini
- Deskripsi menyebutkan fungsi yang tidak ada
- Harga di metadata berbeda dari harga di aplikasi

Pencegahan:
// Document exactly what's in each tierconst SUBSCRIPTION_FEATURES = { basic: ['Ad-free', 'Cloud sync', 'Basic themes'], premium: ['Ad-free', 'Cloud sync', 'All themes', 'Priority support']};
// Use these in both your app AND App Store description3. Penjelasan Izin yang Hilang
Bab berjudul “3. Penjelasan Izin yang Hilang”Mengapa Gagal:
- Mengajukan kamera/lokasi/kesehatan tanpa penjelasan
- Mengajukan izin yang disembunyikan di beberapa layar
- Penjelasan izin yang tidak jelas atau umum
Pencegahan:
Perbarui Info.plist dengan penjelasan yang jelas:
<key>NSCameraUsageDescription</key><string>Camera access is needed to scan product barcodes for quick subscription upgrades.</string>
<key>NSLocationWhenInUseUsageDescription</key><string>Location helps us show relevant local content in your Premium subscription.</string>4. Pemasaran yang Menipu
Bab berjudul “4. Pemasaran yang Menipu”Mengapa Gagal:
- Klaim seperti “Aplikasi #1 di dunia” tanpa bukti
- Fitur “Tidak Terbatas” yang memiliki batasan rahasia
- Taktik kebutuhan darurat palsu (“Hanya 2 tempat tersisa!”)


Pencegahan:
- Jelaskan dengan spesifik dan faktual dalam deskripsi
- Hindari superlatif tanpa bukti
- Jangan tekan pengguna dengan kekurangan palsu
5. Proses Pembatalan Tersembunyi
Bab berjudul “5. Proses Pembatalan Tersembunyi”Mengapa Gagal:
- Tidak ada penjelasan tentang cara pembatalan
- Tombol pembatalan disembunyikan atau tertutup
- Proses pembatalan multi-langkah tanpa alur asli Apple
Pencegahan:
// Always inform users about cancellationfunction SubscriptionInfo() { return ( <div> <h3>How to Cancel</h3> <ol> <li>Open iPhone Settings</li> <li>Tap your name at the top</li> <li>Tap Subscriptions</li> <li>Select this app and tap Cancel</li> </ol>
<p>Or manage directly in the App Store app.</p>
<Button onClick={openSubscriptionManagement}> Manage Subscription in Settings </Button> </div> );}
async function openSubscriptionManagement() { // Direct link to iOS subscription management await NativePurchases.showManageSubscriptions();}Privasi & Penggunaan Data (Bagian 5.1.1)
Judul Bagian “Privasi & Penggunaan Data (Bagian 5.1.1)”Apple telah memperketat persyaratan privasi pada tahun 2025.
Penyataan yang Wajib
Judul Bagian “Penyataan yang Wajib”Untuk Setiap Izin:
- Mengapa Anda membutuhkannya (contoh penggunaan spesifik)
- Kapan data akan digunakan
- Bagaimana data disimpan/dibagikan
- Apakah itu opsional atau wajib
Contoh: Alur Izin yang Tepat
Judul Bagian “Contoh: Alur Izin yang Tepat”async function requestCameraPermission() { // Show explanation BEFORE requesting await showDialog({ title: 'Camera Access', message: 'We need camera access to let you scan barcodes for quick product lookup. Your photos are never uploaded or stored.', buttons: ['Not Now', 'Allow'] });
// Then request permission const result = await Camera.requestPermissions(); return result.camera === 'granted';}Label Gizi Privasi
Judul Bagian “Label Gizi Privasi”Pastikan label privasi App Store Anda akurat menggambarkan:
- Sejarah Pembelian
- Alamat Email (untuk bukti pembelian)
- ID Perangkat (untuk pencegahan penipuan)
- Data Penggunaan (untuk analisis)
Label privasi yang tidak akurat adalah alasan penolakan yang umum pada tahun 2025. Audit dengan hati-hati pengumpulan data Anda.
Daftar Periksa Sebelum Pengiriman
Daftar Pemeriksaan Sebelum Pengiriman
-
Tes Semua Aliran Pembelian
- Belilah setiap tingkat langganan
- Tes uji coba gratis
- Pastikan penawaran promosi berlaku dengan benar
- Tes pembelian kembali
- Pastikan Bagian Keluarga Berbagi (jika diaktifkan)
- Tes pada perangkat yang berbeda
-
Pastikan Konsistensi Harga
- Periksa metadata App Store sesuai dengan harga dalam aplikasi
- Pastikan semua mata uang benar
- Mengonfirmasi durasi percobaan gratis sesuai dengan deskripsi
- Periksa syarat-syarat penawaran awal yang akurat
-
Ulas Semua Konten
- Menghapus teks tempat
- Mengverifikasi klaim dapat diuji
- Periksa tata bahasa dan ejaan
- Menggunakan deskripsi yang sesuai dengan build saat ini
- Menghapus pengacuan kompetitor
-
Menguji Izin
- Mengajukan hanya izin yang diperlukan
- Menggambarkan penjelasan yang jelas sebelum meminta
- Menguji aliran “Tolak” (aplikasi masih harus berfungsi)
- Verifikasi deskripsi Info.plist yang jelas
-
Siapkan Akun Uji
- Buat akun tinjauan yang tetap valid selama tinjauan
- Dokumentasi kredit login di Informasi Tinjauan Aplikasi
- Verifikasi bahwa reviewer dapat mencapai paywall dan menyelesaikan alur pembelian
- Termasuk akun tambahan atau switch aplikasi khusus di bidang Catatan jika perlu
-
Periksa Metadata
- Gambar layar sesuai dengan UI saat ini
- URL Support mencakup informasi kontak yang nyata
- URL kebijakan privasi telah diisi
- Rating usia sesuai dengan konten di build
- Video pratinjau aplikasi (jika ada) menampilkan versi saat ini
- Deskripsi akurat menggambarkan fitur
- Kebijakan privasi dapat diakses dalam aplikasi dan dari daftar aplikasi
-
Tulis Catatan Ulasan Rinci
Contact:Name: Jane DeveloperEmail: review@yourapp.comPhone: +1 555-0100Test Account:Email: reviewer@test.comPassword: TestPass123!This account does not expire during review.Testing Instructions:1. Log in with test account above2. Tap "Upgrade to Premium" button3. Select "Monthly Premium" subscription4. Complete purchase (no charge in sandbox)5. Verify premium features unlockNote: Subscription pricing is clearly shown before purchase.Cancellation instructions are in Settings > Account.
Jadwal Ulasan
Bab berjudul “Jadwal Ulasan”
Ulasan Standar: 24-48 jam Masa Sibuk: 3-5 hari (rilis libur App Store) Akhir Pekan: No review yang diproses Ulasan Cepat: Tersedia untuk perbaikan bug kritikal (kirimkan melalui App Store Connect)
Status umum yang akan Anda lihat di App Store Connect:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
Fokus Pengiriman 2026
Bab berjudul “Fokus Pengiriman 2026”Daerah Fokus Saat Ini
Bab berjudul “Daerah Fokus Saat Ini”1. Klarifikasi Langganan
- Perbandingan rencana samping-samping yang diperlukan
- Tidak ada “pola gelap” yang menyembunyikan opsi yang lebih murah
- Rute penurunan/peningkatan yang jelas
2. Akurasi Metadata
- Gambar layar harus sesuai dengan build yang sedang direview
- Gambar layar iPad diperlukan jika dukungan iPad diaktifkan
- URL dukungan dan kebijakan privasi harus sudah aktif sebelum pengajuan
3. Kualitas Detail Ulasan dan Privasi
- Pengungkapan privasi harus sesuai dengan apa yang dikumpulkan oleh SDK Anda
- Info kontak dan catatan App Review harus lengkap pada pengajuan pertama
- Kredensial demo harus tetap valid selama jendela ulasan penuh
4. Kesiapan Pengajuan
- Apple memperbarui persyaratan minimum SDK secara teratur, jadi pastikan tanggal batas saat ini sebelum mengunggah rilis build
- TestFlight adalah tempat yang paling aman untuk memverifikasi jalur reviewer yang tepat sebelum Anda mengirimkan
Praktik Terbaik untuk Plugin Pembelian Asli
Judul Bagian “Praktik Terbaik untuk Plugin Pembelian Asli”Implementasikan Pengelolaan Kesalahan yang Tepat
Judul Bagian “Implementasikan Pengelolaan Kesalahan yang Tepat”import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function handlePurchase(productId: string) { try { const transaction = await NativePurchases.purchaseProduct({ productIdentifier: productId, productType: PURCHASE_TYPE.SUBS, });
// Success await validateReceiptOnServer(transaction.receipt); showSuccess('Subscription activated!'); unlockFeatures();
} catch (error: any) { // Handle specific error cases if (error.code === 'USER_CANCELLED') { // User cancelled - don't show error console.log('Purchase cancelled by user'); } else if (error.code === 'PAYMENT_PENDING') { showInfo('Payment is pending. Please check back later.'); } else if (error.code === 'PRODUCT_ALREADY_PURCHASED') { // Restore instead await NativePurchases.restorePurchases(); } else { // Show user-friendly error showError('Unable to complete purchase. Please try again.'); } }}Tampilkan Status Menggunakan
Judul Bagian “Tampilkan Status Menggunakan”function PurchaseButton({ productId }: { productId: string }) { const [loading, setLoading] = useState(false);
const handlePurchase = async () => { setLoading(true); try { await NativePurchases.purchaseProduct({ productIdentifier: productId }); } finally { setLoading(false); } };
return ( <button onClick={handlePurchase} disabled={loading}> {loading ? 'Processing...' : 'Subscribe Now'} </button> );}Tampilkan Ketentuan dengan Jelas
Judul Bagian “Tampilkan Ketentuan dengan Jelas”function SubscriptionTerms() { return ( <div className="terms"> <p> Subscription automatically renews unless cancelled at least 24 hours before the end of the current period. </p> <p> Your account will be charged for renewal within 24 hours prior to the end of the current period. </p> <p> Subscriptions may be managed by the user and auto-renewal may be turned off in Account Settings after purchase. </p> <p> <a href="/terms">Terms of Service</a> | <a href="/privacy/">Privacy Policy</a> </p> </div> );}Jika Aplikasi Anda Ditolak
Bab berjudul “Jika Aplikasi Anda Ditolak”Langkah untuk Menyelesaikan
Bab berjudul “Langkah untuk Menyelesaikan”-
Baca penolakan dengan teliti
- Catat pedoman spesifik yang disebutkan (misalnya, 3.1.1, 5.1.1)
- Pahami secara tepat apa yang ditandai oleh Apple
-
Perbaiki masalah secara menyeluruh
- Tidak hanya perbaiki - perbaiki penyebab akar
- Uji perbaikan secara menyeluruh
- Dokumentasikan apa yang Anda ubah
-
Balas di Pusat Resolusi
Thank you for your feedback. I have addressed the issue:Issue: Subscription pricing not clear upfrontFix: Added explicit pricing display on subscription selectionscreen showing "$9.99/month" before purchase button. Also addedcancellation instructions on the same screen.The changes are in this submission and can be tested using theprovided test account. -
Resubmit dengan segera
- Resubmisi biasanya diperiksa lebih cepat
- Biasanya dalam waktu 24 jam
Proses Banding
Bab berjudul “Proses Banding”Jika Anda percaya bahwa penolakan itu salah:

- Klik “Banding” di App Store Connect
- Berikan bukti yang jelas:
- Sketsa layar yang menunjukkan kelayakan
- Referensi ke pedoman spesifik
- Penjelasan bagaimana Anda memenuhi persyaratan
- Jadilah profesional dan faktual
- Termasuk akun uji jika fungsi sulit ditemukan

Sumber Daya Tambahan
Bab berjudul “Sumber Daya Tambahan”- Pedoman Ulasan Aplikasi App Store Apple
- Pedoman Pembelian Aplikasi
- Praktik Terbaik Subskripsi
- Bantuan App Store Connect
- Spesifikasi Screenshot
- Informasi Versi Platform
Review
- Dokumentasi Pembelian Asli Periksa
- masalah troubleshooting umum Hubungi Dukungan Pengembang Apple untuk klarifikasi pedoman
- Membutuhkan Bantuan Ahli?
Bagian berjudul “Membutuhkan Bantuan Ahli?’
Bagian berjudul “Membutuhkan Bantuan Ahli?’Sulit dengan tinjauan aplikasi atau membutuhkan bantuan pribadi? Jadwalkan panggilan konsultasi dengan tim kami untuk dukungan yang terfokus dengan:
- Ulasan dan optimasi implementasi IAP
- Persiapan dan strategi tinjauan App Store
- Tinjauan checklist pengiriman
- Pengembalian penolakan dan banding
- Pengujian dan validasi lengkap
Ahli kami telah berhasil membantu ratusan aplikasi melewati tinjauan!
Teruskan dari Pedoman Tinjauan App Store iOS untuk IAP
Bab berjudul “Teruskan dari Pedoman Tinjauan App Store iOS untuk IAP”Jika Anda menggunakan Pedoman Tinjauan App Store iOS untuk IAP Untuk merencanakan persetujuan toko dan distribusi, hubungkannya dengan Menggunakan @capgo/native-purchases untuk kemampuan native di Menggunakan @capgo/native-purchases, @capgo/capacitor-ulasan-dalam-aplikasi untuk detail implementasi di @capgo/capacitor-ulasan-dalam-aplikasi, Menggunakan @capgo/capacitor-ulasan-dalam-aplikasi untuk kemampuan native di Menggunakan @capgo/capacitor-ulasan-dalam-aplikasi, @capgo/capacitor-pasar-native untuk detail implementasi di @capgo/capacitor-pasar-native, dan Menggunakan @capgo/capacitor-pasar-native untuk kemampuan native di Menggunakan @capgo/capacitor-pasar-native.