Pedoman Ulasan Aplikasi iOS untuk IAP
Copas prompt setup dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Proses Tinjauan Aplikasi App Store

Sebelum Anda Mengirimkan
Judul Bagian “Sebelum Anda Mengirimkan”Selesai Konfigurasi App Store Connect
Judul Bagian “Selesai Konfigurasi App Store Connect”Sebelum Apple memeriksa alur pembelian Anda, pastikan catatan aplikasi itu sendiri sudah lengkap:
- Tambahkan URL Kebijakan Privasi di App Store Connect
- Tambahkan URL Bantuan yang mengarah ke informasi kontak nyata bagi pengguna
- Selesaikan __CAPGO_KEEP_0__ kuesioner untuk memastikan aplikasi dapat dipublikasikan
- Tambahkan Detail Kontak Ulasan Aplikasi dan catatan reviewer yang jelas
- Jika login diperlukan, berikan akun demo yang tidak berakhir selama proses ulasan
Siapkan Screenshot Nyata
Bab yang berjudul “Siapkan Layar Screenshot Nyata”- Gunakan screenshot saat ini dari build yang sebenarnya sedang diulas
- 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 besar yang diterima saat ini termasuk
2064 x 2752(13 inci) dan2048 x 2732(12.9 inci) - Jangan pernah meregangkan screenshot iPhone untuk memalsukan dukungan iPad
Lakukan Dry-Run Perjalanan Pemirsa di TestFlight
Bab yang berjudul “Lakukan Dry-Run Perjalanan Pemirsa di TestFlight”Jalankan jalur yang tepat yang akan diikuti oleh 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
- Aliran pembelian, pengembalian, dan pengelolaan langganan
- Verifikasi aplikasi masih berperilaku dengan benar jika izin di tolak
Persyaratan Pembelian Aplikasi
Bagian berjudul “Persyaratan Pembelian Aplikasi”Transparansi Harga (Kritis)
Bagian berjudul “Transparansi Harga (Kritis)”Apple memerlukan diskripsi harga yang jelas sebelum pembelian apa pun:
Elemen Wajib:
- Tampilkan harga tepat sebelum tombol pembelian
- Menampilkan frekuensi pembayaran (misalnya, “$9,99/bulan”)
- Jelaskan dengan jelas apa yang didapatkan oleh pengguna untuk uang mereka
- Menunjukkan kapan biaya akan terjadi
Penolakan Umum:
“Harga langganan harus jelas dan terbuka.”
:::peringatan Konsistensi Harga Semua harga harus sesuai di:
- Daftar metadata App Store
- Layar pembelian dalam aplikasi
- Layar pengelolaan langganan
Meskipun perbedaan $1 antara daftar toko ($4,99) dan aplikasi ($5,99) akan mengaktifkan penolakan otomatis. :::
Pengaturan Rencana Langganan
Bab yang berjudul “Pengaturan Rencana Langganan”Pemberitahuan yang Diperlukan:
- Semua tingkat langganan yang tersedia ditampilkan bersamaan
- Perbandingan fitur yang jelas per tingkat
- Tidak ada pengaturan otomatis ke tingkat premium melalui trik UI
- Instruksi pembatalan yang mudah ditemukan

Contoh UI yang Kompatibel:
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> );}Mengembalikan Pembelian
Bagian berjudul “Mengembalikan Pembelian”Implementasi yang Diperlukan:
Aplikasi setiap 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 Umum
Bab berjudul “Alasan Penolakan Umum”1. Aplikasi Bajik atau Fungsi yang Rusak
Bab berjudul “1. Aplikasi Bajik atau Fungsi yang Rusak”Mengapa Gagal:
- Aplikasi gagal membuka
- Alur pembelian gagal untuk diselesaikan
- Fungsi yang ditampilkan dalam screenshot tidak berfungsi
Pencegahan:
- Uji coba pada perangkat nyata (bukan hanya simulator)
- Menguji semua alur langganan secara end-to-end
- Mengverifikasi validasi tagihan berfungsi
- Mengecek penanganan kesalahan jaringan
2. Kesalahan Metadata
Judul bagian “2. Kesalahan Metadata”Mengapa Gagal:
- Tampilan screenshot menampilkan fitur yang tidak ada di build saat ini
- Deskripsi menyebutkan fungsi yang tidak ada
- Harga di metadata berbeda dengan 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
Judul Bagian 3. Penjelasan Izin yang HilangMengapa Gagal:
- Mengajukan kamera/lokasi/kesehatan tanpa penjelasan
- Izin yang diminta disembunyikan di beberapa layar
- Penjelasan izin yang kabur atau umum
Pencegahan:
Perbarui Anda 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
Judul Bagian “4. Pemasaran yang Menipu”Mengapa Gagal:
- Klaim seperti “Aplikasi #1 di Dunia” tanpa bukti
- Fitur “Tidak Terbatas” yang memiliki batasan tertentu
- Taktik Kebutuhan Darurat Palsu (“Hanya 2 Tempat yang Tersedia!”)


Pencegahan:
- Jelaskan secara spesifik dan faktual dalam deskripsi
- Hindari superlatif tanpa bukti
- Jangan tekan pengguna dengan kebutuhan palsu
5. Proses Pembatalan Tersembunyi
Judul Bagian 5. Proses Pembatalan TersembunyiMengapa Gagal:
- Tidak ada informasi tentang cara pembatalan
- Tombol pembatalan disembunyikan atau tertutup
- Proses pembatalan multi-langkah tanpa aliran native 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.
Pembekuan yang Diperlukan
Bagian berjudul “Pengungkapan Wajib”Untuk Setiap Izin:
- Mengapa Anda membutuhkannya (contoh penggunaan spesifik)
- Kapan akan digunakan
- Bagaimana data disimpan/dibagikan
- Apakah itu opsional atau wajib
Contoh: Alur Izin yang Tepat
Bagian berjudul “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
Bagian berjudul “Label Gizi Privasi”Pastikan label privasi App Store Anda akurat menggambarkan:
- Pengumpulan riwayat pembelian
- Alamat email (untuk bukti pembayaran)
- ID perangkat (untuk pencegahan penipuan)
- Data penggunaan (untuk analisis)
Label privasi yang tidak akurat adalah alasan penolakan yang umum pada tahun 2025. Audit pengumpulan data dengan hati-hati.
Daftar Periksa Sebelum Pengiriman
Daftar Periksa Sebelum Pengiriman
-
Beli setiap tingkat langganan
- Tes uji coba gratis
- Verifikasi bahwa penawaran promosi yang diberikan tepat
- Tes semua aliran pembelian
- Test restore pembelian
- Verifikasi Family Sharing (jika diaktifkan)
- Test pada perangkat beberapa
-
Verifikasi Konsistensi Harga
- Periksa metadata App Store sesuai dengan harga dalam aplikasi
- Verifikasi semua mata uang benar
- Konfirmasi durasi trial gratis sesuai dengan deskripsi
- Periksa syarat tawaran intro yang akurat
-
Ulas Semua Salinan
- Hapus teks tempat
- Verifikasi klaim dapat diuji
- Periksa tata bahasa dan ejaan
- Pastikan deskripsi sesuai dengan build saat ini
- Hapus pengacuan kompetitor
-
Uji Izin
- Minta hanya izin yang diperlukan
- Tampilkan penjelasan yang jelas sebelum meminta izin
- Uji 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 aliran pembelian
- Termasuk akun tambahan atau switch aplikasi khusus di bidang Catatan jika perlu
-
Periksa Metadata
- Layar Screenshot sesuai dengan UI saat ini
- URL Bantuan mencakup informasi kontak yang sebenarnya
- 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-fitur
- Kebijakan privasi dapat diakses dalam aplikasi dan dari daftar aplikasi toko
-
Tulis Catatan 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.
Lini Waktu Ulasan
Bagian berjudul “Lini Waktu Ulasan”
Standar Tinjau: 24-48 jam Masa Sibuk: 3-5 hari (Rilis Libur App Store) Akhir Pekan: Tidak ada tinjauan diproses Tinjauan Dipercepat: tersedia untuk perbaikan bug kritikal (minta melalui App Store Connect)
Status yang sering Anda lihat di App Store Connect:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
Fokus Pengajuan 2026
Bab yang berjudul “Fokus Pengajuan 2026”Bidang Fokus Saat Ini
Bab yang berjudul “Bidang Fokus Saat Ini”1. Klarifikasi Langganan
- Perbandingan rencana sampingan diperlukan
- Tidak ada “pola gelap” yang menyembunyikan opsi yang lebih murah
- Rute penurunan/peningkatan yang jelas
2. Akurasi Metadata
- Screenshots harus sesuai dengan build yang sedang diperiksa
- Screenshots iPad diperlukan jika dukungan iPad diaktifkan
- URL dukungan dan kebijakan privasi harus sudah aktif sebelum pengajuan
3. Kualitas Detail Pengawasan Privasi
- Pengungkapan privasi harus sesuai dengan apa yang dikumpulkan oleh SDK Anda
- Informasi 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 mengajukan
Praktik Terbaik untuk Plugin Pembelian Asli
Judul bagian “Praktik Terbaik untuk Plugin Pembelian Asli”Implementasi Pengelolaan Kesalahan yang Tepat
Judul bagian “Implementasi 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 Mengisi
Bagian berjudul “Tampilkan Status Mengisi”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
Bagian berjudul “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
Bagian berjudul “Jika Aplikasi Anda Ditolak”Langkah untuk Menyelesaikan
Bagian berjudul “Langkah untuk Menyelesaikan”-
Baca ulang penolakan dengan teliti
- Perhatikan pedoman spesifik yang dikutip (misalnya 3.1.1, 5.1.1)
- Pahami secara tepat apa yang diketahui Apple
-
Perbaiki masalah secara menyeluruh
- Jangan hanya memperbaiki - perbaiki penyebab utama
- Uji perbaikan secara menyeluruh
- Dokumentasikan apa yang Anda ubah
-
Bersikap dalam Pusat Penyelesaian
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. -
Tajuk kembali dengan segera
- Pengajuan ulang biasanya dievaluasi lebih cepat
- Biasanya dalam waktu 24 jam
Proses Banding
Proses BandingJika Anda percaya bahwa penolakan itu salah:

- Klik “Banding” di App Store Connect
- Sediakan bukti yang jelas:
- Fotokopi layar menunjukkan kinerja yang sesuai
- Pengacuan khusus ke pedoman tertentu
- Penguraian bagaimana Anda memenuhi persyaratan
- Tunjukkan profesional dan fakta
- Termasuk akun uji jika fungsi sulit ditemukan

Sumber Daya Tambahan
Sumber Daya Tambahan- Pedoman Ulasan App Store Apple
- Pedoman Pembelian Aplikasi
- Praktik Terbaik Subskripsi
- Bantuan App Store Connect
- Spesifikasi Screenshot
- Informasi Versi Platform
Dukungan
DukunganJika Anda masih mengalami masalah:
- Tinjau Dokumentasi Pembelian Asli
- Periksa masalah umum yang dapat diatasi
- Hubungi Support Pengembang Apple untuk klarifikasi pedoman
Membutuhkan Bantuan Ahli?
Bab berjudul “Membutuhkan Bantuan Ahli?”Sulit dengan peninjauan aplikasi atau membutuhkan bantuan yang disesuaikan? Booking panggilan konsultasi dengan tim kami untuk dukungan yang dedikasi dengan:
- Review dan optimasi implementasi IAP
- Persiapan dan strategi peninjauan App Store
- Pengujian checklist pengiriman
- Pengembalian dan banding rencana
- Melakukan tes dan validasi yang lengkap
Para ahli kami telah berhasil membantu ratusan aplikasi melewati tinjauan!
Lanjutkan dari Pedoman Tinjauan App Store iOS untuk IAP
Judul bagian “Lanjutkan dari Pedoman Tinjauan App Store iOS untuk IAP”Jika Anda menggunakan Pedoman Tinjauan App Store iOS untuk IAP untuk merencanakan persetujuan dan distribusi toko, hubungkannya dengan Menggunakan @capgo/native-purchases untuk kemampuan native di Menggunakan @capgo/native-purchases, Menggunakan @capgo/capacitor-in-app-review untuk detail implementasi di Menggunakan @capgo/capacitor-in-app-review, Menggunakan @capgo/capacitor-in-app-review untuk kemampuan asli di Menggunakan @capgo/capacitor-ulasan-dalam-aplikasi, @capgo/capacitor-pasar-nasional untuk rincian implementasi di @capgo/capacitor-pasar-nasional, dan Menggunakan @capgo/capacitor-pasar-nasional untuk kemampuan asli di Menggunakan @capgo/capacitor-pasar-nasional.