Pedoman Ulasan Aplikasi iOS untuk IAP
Copas prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Menggunakan aplikasi Anda disetujui di App Store memerlukan perhatian yang hati-hati terhadap pedoman Apple, terutama ketika menerapkan pembelian dalam aplikasi dan langganan.

Proses Tinjauan App Store iOS
Sebelum Anda MengirimJudul Bagian “Sebelum Anda Mengirim”
Selesai Konfigurasi App Store ConnectJudul Bagian “Selesai Konfigurasi App Store Connect”
- Sebelum Apple meninjau aliran 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 yang sebenarnya untuk pengguna
- Selesaikan kuesioner peringkat usia agar aplikasi dapat dipublikasikan
- Tambahkan Detail Kontak Pengulas Aplikasi dan catatan yang jelas untuk pengulas
- Jika login diperlukan, berikan akun demo yang tidak berakhir masa aktif selama proses tinjauan
Siapkan Layar Screenshot Nyata
Bab berjudul “Siapkan Layar Screenshot Nyata”- Gunakan layar 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 layar screenshot iPad juga
- Ukuran iPad yang diterima saat ini termasuk
2064 x 2752(13 inci) dan2048 x 2732(12.9-inch) - Jangan memanjangkan screenshot iPhone untuk memalsukan dukungan iPad
Melakukan simulasi perjalanan reviewer di TestFlight
Bagian berjudul “Melakukan simulasi perjalanan reviewer di TestFlight”Lakukan jalur yang tepat yang akan diikuti Apple pada perangkat nyata:
- Pasang versi terbaru dari TestFlight
- Masuk dengan akun review yang Anda rencanakan untuk menyediakan
- Mencapai paywall tanpa gerakan tersembunyi atau menu debug
- Lakukan alur pembelian, restorasi, dan pengelolaan langganan
- Pastikan aplikasi masih berfungsi dengan benar jika izin di tolak
Persyaratan Pembelian Aplikasi
Bagian berjudul “Persyaratan Pembelian Aplikasi”Transparansi Harga (Kritis)
Judul Bagian “Transparansi Harga (Kritis)”Apple memerlukan transparansi harga yang jelas sebelum pembelian apapun:
Elemen Wajib:
- Tampilkan harga yang tepat sebelum tombol pembelian
- Tampilkan frekuensi tagihan (misalnya “$9,99/bulan”)
- Jelaskan dengan jelas apa yang pengguna dapatkan dari 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 App Store
- Antarmuka Pembelian Aplikasi
- Antarmuka Pengelolaan Langganan
Perbedaan harga $1 saja antara daftar aplikasi ($4.99) dan aplikasi ($5.99) akan memicu penolakan otomatis.
Presentasi Rencana Langganan
Bab berjudul “Presentasi Rencana Langganan”Klarifikasi yang Diperlukan:
- Tunjukkan semua tingkat langganan yang tersedia secara bersamaan
- Perbandingan jelas fitur per tingkat
- Tidak ada pengaturan otomatis ke tingkat premium melalui trik UI
- Instruksi pembatalan mudah ditemukan

Contoh UI yang Sesuai:
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> );}Tetapkan Pembelian
Bagian berjudul “Tetapkan Pembelian”Implementasi yang Diperlukan:
Setiap aplikasi dengan IAP harus menyediakan cara bagi pengguna untuk mengembalikan 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
Bagian berjudul “Alasan Penolakan yang Umum”1. Aplikasi Bajik atau Fungsi yang Rusak
Bagian berjudul “1. Aplikasi Bajik atau Fungsi yang Rusak”Mengapa Gagal:
- Aplikasi mengalami crash saat dijalankan
- Alur pembelian gagal untuk diselesaikan
- Fitur yang ditampilkan dalam tangkapan layar tidak berfungsi
Pencegahan:
- Test pada perangkat nyata (bukan hanya simulator)
- Test semua alur langganan secara end-to-end
- Verifikasi validasi pembayaran berhasil
- Periksa penanganan kesalahan jaringan
2. Kesalahan Metadata
Judul bagian “2. Kesalahan Metadata”Mengapa Gagal:
- Tangkapan layar 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
Bagian berjudul “3. Penjelasan Izin yang Hilang”Mengapa Gagal:
- Mengajukan kamera/lokasi/kesehatan tanpa penjelasan
- Permintaan izin disembunyikan di beberapa layar
- Penjelasan izin yang kabur 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
Judul bagian “4. Pemasaran yang Menipu”Mengapa Gagal:
- Klaim seperti “Aplikasi #1 di dunia” tanpa bukti
- Fitur “Tidak Terbatas” yang memiliki batasan yang disembunyikan
- Taktik kebutuhan darurat palsu (“Hanya 2 tempat yang tersedia!”)


Pencegahan:
- Beri deskripsi yang spesifik dan faktual
- Hindari superlatif tanpa bukti
- Jangan tekan pengguna dengan kekurangan palsu
5. Proses Pembatalan Tersembunyi
Judul Bagian "5. Proses Pembatalan Tersembunyi"Mengapa Gagal:
- Tidak ada penjelasan tentang cara pembatalan
- Tombol pembatalan disembunyikan atau tertutup
- Proses pembatalan multi-langkah tanpa alur 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.
Pembatasan yang Diperlukan
Judul Bagian “Pembatasan yang Diperlukan”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 Benar
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 Nutrisi Privasi
Bagian berjudul “Label Nutrisi Privasi”Pastikan label privasi App Store Anda akurat menggambarkan:
- Pengumpulan riwayat pembelian
- Alamat email (untuk faktur)
- 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
Bagian berjudul “Daftar Periksa Sebelum Pengiriman”
-
Tes Semua Alur Pembelian
- Beli setiap tingkat langganan
- Tes uji coba gratis
- Pastikan tawaran promosi awal berlaku dengan benar
- Tes mengembalikan pembelian
- Pastikan Bagikan Keluarga (jika diaktifkan) berfungsi dengan benar
- Tes pada perangkat yang berbeda
-
Pastikan Konsistensi Harga
- Periksa metadata App Store sesuai dengan harga dalam aplikasi
- Pastikan semua mata uang benar
- Konfirmasi durasi uji coba gratis sesuai dengan deskripsi
- Periksa syarat-syarat penawaran awal yang akurat
-
Ulangi Semua Konten
- Hapus teks tempat penempatan
- Periksa klaim yang dapat diuji
- Periksa tata bahasa dan ejaan
- Pastikan deskripsi sesuai dengan build saat ini
- Hapus pengacuan kompetitor
-
Uji Izin
- Minta izin yang diperlukan saja
- Tunjukkan penjelasan yang jelas sebelum meminta izin
- Uji aliran 'Tolak' (aplikasi masih harus berfungsi)
- Periksa deskripsi Info.plist yang jelas
-
Siapkan Akun Uji
- Buat akun tinjau 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
- Layar tangkapan layar sesuai dengan UI saat ini
- URL Support mencakup informasi kontak yang sebenarnya
- URL kebijakan privasi telah diisi
- Peringkat 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 toko
-
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.
Lingkaran Ulasan
Judul Bagian “Lingkaran Ulasan”
Ulasan Standar: 24-48 jam Masa Sibuk: 3-5 hari (Rilis Liburan App Store) Akhir Pekan: Tidak ada ulasan yang diproses Pengujian yang Dipercepat: Tersedia untuk perbaikan bug kritikal (permintaan melalui App Store Connect)
Status yang umum Anda lihat di App Store Connect:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
Fokus Pengiriman 2026
Bagian berjudul “Fokus Pengiriman 2026”Bidang Fokus Saat Ini
Bagian berjudul “Bidang Fokus Saat Ini”1. Klarifikasi Langganan
- Perbandingan rencana samping-samping yang diperlukan
- No ada pola gelap yang menyembunyikan opsi yang lebih murah
- Rute penurunan/peningkatan yang jelas
2. Akurasi Metadata
- Screenshot harus sesuai dengan build yang sedang direview
- Screenshot iPad diperlukan jika dukungan iPad diaktifkan
- URL dukungan dan kebijakan privasi harus sudah aktif sebelum pengajuan
3. Kualitas Detail Review 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 review penuh
4. Kesiapan Pengajuan
- Apple memperbarui persyaratan minimum SDK secara teratur, jadi pastikan deadline saat ini sebelum mengunggah build rilis
- Tempat Teraman untuk Mengverifikasi Jalur Pemirsa yang Tepat sebelum Anda Mengirimkan
Praktik Terbaik untuk Plugin Pembelian Asli
Bagian berjudul “Praktik Terbaik untuk Plugin Pembelian Asli”Implementasikan Pengelolaan Kesalahan yang Tepat
Bagian berjudul “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 Mengunduh
Bagian berjudul “Tampilkan Status Mengunduh”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
Judul Bagian “Jika Aplikasi Anda Ditolak”Langkah-Langkah Mengatasi
Judul Bagian “Langkah-Langkah Mengatasi”-
Baca ulang penolakan yang diberikan
- Catat pedoman spesifik yang disebutkan (misalnya, 3.1.1, 5.1.1)
- Pahami secara tepat apa yang ditandai oleh Apple
-
Perbaiki masalah secara menyeluruh
- Jangan hanya memperbaiki - perbaiki penyebab akar
- Uji perbaikan secara menyeluruh
- Dokumentasikan perubahan yang Anda lakukan
-
Beri tanggapan 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 segera
- Resubmission biasanya diperiksa lebih cepat
- Biasanya dalam waktu 24 jam
Proses Banding
Judul bagian “Proses Banding”Jika Anda percaya bahwa penolakan itu salah:

- Klik “Banding” di App Store Connect
- Berikan bukti yang jelas:
- Layar tangkapan 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
Dukungan
Judul Bagian “Dukungan”Jika Anda masih mengalami masalah:
- Tinjau Dokumentasi Pembelian Nativ
- Periksa masalah troubleshooting umum
- Hubungi Dukungan Pengembang Apple untuk klarifikasi pedoman
Membutuhkan Bantuan Ahli?
Judul Bagian “Membutuhkan Bantuan Ahli?”Mengalami kesulitan dalam tinjauan aplikasi atau membutuhkan bantuan yang disesuaikan? Bukukanlah panggilan konsultasi dengan tim kami untuk dukungan yang spesifik dengan:
- Ulasan dan optimasi implementasi IAP
- Persiapan dan strategi ulasan App Store
- Ulasan daftar pemeriksaan pengiriman
- Pengembalian penolakan dan banding
- Pengujian dan validasi lengkap
Para ahli kami telah membantu ratusan aplikasi lolos ulasan!
Teruskan dari Pedoman Ulasan App Store iOS untuk IAP
Judul bagian “Teruskan dari Pedoman Ulasan App Store iOS untuk IAP”Jika Anda menggunakan Pedoman Ulasan App Store iOS untuk IAP untuk merencanakan persetujuan toko dan distribusi, hubungkannya dengan Menggunakan @capgo/native-purchases untuk kemampuan asli dalam Menggunakan @capgo/native-purchases, @capgo/capacitor-in-app-review untuk detail implementasi dalam @capgo/capacitor-in-app-review, Menggunakan @capgo/capacitor-in-app-review untuk kemampuan asli dalam Menggunakan @capgo/capacitor-in-app-review, @capgo/capacitor-native-market untuk detail implementasi dalam @capgo/capacitor-native-market, dan Menggunakan @capgo/capacitor-native-market untuk kemampuan asli dalam Menggunakan @capgo/capacitor-native-market.