Pedoman Ulasan Aplikasi iOS untuk IAP
Salin prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Mendapatkan aplikasi Anda disetujui di App Store memerlukan perhatian yang hati-hati terhadap pedoman Apple, terutama ketika menerapkan pembelian dalam aplikasi dan langganan. Panduan ini mencakup segala yang Anda butuhkan untuk melewati tinjauan pada pengajuan pertama.

Sebelum Anda Mengajukan
Judul bagian “Sebelum Anda Mengajukan”Selesai Pengaturan App Store Connect
Bagian berjudul “Selesai Konfigurasi Setup App Store”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 yang sebenarnya untuk pengguna
- Selesaikan kuesioner peringkat usia agar aplikasi dapat dipublikasikan
- Tambahkan Detail Kontak Ulasan Aplikasi dan catatan reviewer yang jelas
- Jika login diperlukan, berikan akun demo yang tidak berakhir selama ulasan Catatan
Bab berjudul “Siapkan Screenshot Nyata”
Gunakan screenshot saat ini dari build asli yang sedang diulas- Untuk iPhone
- __CAPGO_KEEP_0__
1290 x 2796(6.7-inch) adalah ukuran default yang paling mudah - Jika aplikasi Anda berjalan di iPad, unggah juga screenshot iPad
- Ukuran iPad besar yang saat ini diterima termasuk
2064 x 2752(13-inch) dan2048 x 2732(12.9-inch) - Jangan pernah menarik screenshot iPhone untuk memalsukan dukungan iPad
Lakukan Dry-Run Journey Reviewer di TestFlight
Judul bagian “Lakukan Dry-Run Journey Reviewer di TestFlight”Lakukan jalur yang tepat yang Apple akan ikuti di perangkat nyata:
- Pasang versi terbaru dari TestFlight
- Masuk dengan akun review yang Anda rencanakan untuk menyediakan
- Capai paywall tanpa gerakan tersembunyi atau menu debug
- Alur Pembelian, Pengembalian, dan Pengelolaan Langganan
- Pastikan aplikasi masih berfungsi dengan benar jika izin di tolak
Persyaratan Pembelian Aplikasi
Bagian berjudul “Persyaratan Pembelian Aplikasi”Transparansi Harga (Kritis)
Bagian berjudul “Transparansi Harga (Kritis)”Apple memerlukan diskusi harga yang jelas sebelum pembelian:
Elemen Wajib:
- Tampilkan harga yang tepat sebelum tombol pembelian
- Tampilkan frekuensi tagihan (misalnya “$9.99/bulan”)
- Jelaskan dengan jelas apa yang didapatkan oleh pengguna dengan uang mereka
- Tunjukkan kapan tagihan akan terjadi
Penolakan Umum:
“Subscription pricing must be clear and upfront.”
Peringatan: Konsistensi Harga Semua harga harus sesuai di:
- Metadata Daftar Aplikasi di App Store
- Tampilan Pembelian dalam Aplikasi
- Tampilan Pengelolaan Langganan
Bahkan perbedaan $1 antara daftar aplikasi ($4.99) dan aplikasi ($5.99) akan menyebabkan penolakan otomatis. :::
Pengenalan Paket Langganan
Bagian berjudul “Pengenalan Paket Langganan”Pemberitahuan yang Diperlukan:
- Semua tingkat langganan yang tersedia ditampilkan bersamaan
- Perbandingan yang jelas fitur per tingkat
- Tidak menggunakan trik UI untuk beralih ke tingkat premium secara otomatis
- Instruksi pembatalan yang mudah ditemukan

Contoh Desain 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> );}Memulihkan Pembelian
Bagian berjudul “Memulihkan Pembelian”Implementasi yang Diperlukan:
Setiap aplikasi dengan IAP harus menyediakan cara bagi pengguna untuk memulihkan pembelian sebelumnya tanpa harus 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
Judul Bagian: Alasan Penolakan Umum1. Aplikasi Bajik atau Fungsi yang Rusak
Judul Bagian: 1. Aplikasi Bajik atau Fungsi yang RusakMengapa Gagal:
- Aplikasi gagal saat dijalankan
- Alur pembelian gagal untuk diselesaikan
- Fungsi yang ditampilkan dalam screenshot tidak berfungsi
Pencegahan:
- Uji coba pada perangkat nyata (bukan hanya simulator)
- Uji coba semua alur langganan secara keseluruhan
- Verifikasi validasi pembayaran berfungsi
- Periksa pengaturan error jaringan
2. Kesalahan Metadata
Bagian berjudul “2. Kesalahan Metadata”Mengapa Gagal:
- Tampilan 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 yang disembunyikan di beberapa layar
- Deskripsi 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
Judul bagian “4. Pemasaran yang Menipu”Mengapa Gagal:
- Klaim seperti “Aplikasi #1 di dunia” tanpa bukti
- Fitur-fitur “Tidak Terbatas” yang memiliki batasan tertentu
- Taktik kebutuhan darurat palsu (“Hanya tersisa 2 tempat!”)


Pencegahan:
- Jelaskan secara spesifik dan faktual dalam deskripsi
- Hindari superlatif tanpa bukti
- Jangan tekan pengguna dengan kebutuhan palsu
5. Proses Pembatalan yang Tersembunyi
Judul Bagian “5. Proses Pembatalan yang Tersembunyi”Mengapa Gagal:
- Tidak ada informasi tentang cara membatalkan
- 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
Pengungkapan yang Wajib
Judul bagian “Pengungkapan yang Wajib”Untuk Setiap Izin:
- Mengapa Anda membutuhkannya (penggunaan kasus spesifik)
- When akan digunakan
- Bagaimana data disimpan/dibagikan
- Apakah itu opsional atau wajib
Contoh: Alur Izin yang Tepat
Bab 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
Bab berjudul “Label Nutrisi Privasi”Pastikan label privasi App Store Anda akurat:
- 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 kumpulan data dengan hati-hati.
Daftar Periksa Sebelum Pengiriman
Daftar Periksa Sebelum Pengiriman
-
Beli setiap tingkat langganan
- Uji trial gratis
- Verifikasi tawaran awal yang berlaku dengan benar
- Uji pembelian yang dapat dipulihkan
- Verifikasi Family Sharing (jika diaktifkan)
- Uji pada beberapa perangkat
- Tes pada perangkat yang berbeda-beda
-
Pastikan Konsistensi Harga
- Periksa metadata Toko Aplikasi sesuai dengan harga dalam aplikasi
- Pastikan semua mata uang benar
- Konfirmasi durasi trial gratis sesuai dengan deskripsi
- Periksa syarat-syarat penawaran intro yang akurat
-
Ulas Semua Konten
- Hapus teks tempat penempatan
- Pastikan klaim dapat diuji
- Periksa tata bahasa dan ejaan
- Pastikan deskripsi sesuai dengan build saat ini
- Hapus pengacuan kompetitor
-
Uji Izin Akses
- Minta hanya izin yang diperlukan
- Tampilkan penjelasan yang jelas sebelum meminta izin
- Tes 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 tangkapan layar sesuai dengan UI saat ini
- URL Support termasuk informasi kontak yang nyata
- URL privasi telah diisi
- Peringkat usia sesuai dengan konten di build
- Video pratinjau aplikasi (jika ada) menampilkan versi saat ini
- Deskripsi secara akurat menggambarkan fitur-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.
Lini Waktu Ulasan
Bagian berjudul “Lini Waktu Ulasan”
Ulasan Standar: 24-48 jam Periode Puncak: 3-5 hari (Rilis App Store libur hari) Hari Libur: Tidak ada ulasan diproses Pengembalian Cepat: Tersedia untuk perbaikan bug kritis (minta 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”Daerah Fokus Saat Ini
Judul Bagian ‘Daerah Fokus Saat Ini’1. Klarifikasi Langganan
- Diperlukan perbandingan rencana sampingan
- Tidak ada ‘pola gelap’ yang menyembunyikan opsi yang lebih murah
- Jalur penurunan/peningkatan yang jelas
2. Akurasi Metadata
- Screen shot harus sesuai dengan build yang sedang dinilai
- Diperlukan screen shot iPad jika dukungan iPad diaktifkan
- URL dukungan dan kebijakan privasi harus sudah aktif sebelum pengiriman
3. Kualitas Detail Tinjauan dan Privasi
- Penyataan privasi harus sesuai dengan apa yang dikumpulkan oleh SDK Anda
- Info kontak dan catatan ulasan aplikasi 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”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 Pengisian
Judul Bagian “Tampilkan Status Pengisian”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 Jelas
Judul Bagian “Tampilkan Ketentuan 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 untuk Menyelesaikan
Judul Bagian “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
- Jangan hanya memperbaiki - perbaiki penyebab utama
- Testi perbaikan secara menyeluruh
- Dokumentasikan perubahan yang Anda buat
-
Balas di 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. -
Tayangkan kembali dengan segera
- Biasanya dalam waktu 24 jam
- Proses Banding
Bagian berjudul “Proses Banding”
Jika Anda percaya bahwa penolakan itu salah:Proses Penjelasan App Store

- Klik ‘Tolak’ di App Store Connect
- Berikan bukti yang jelas:
- Layar tangkapan yang menunjukkan kinerja sesuai
- Referensi ke pedoman spesifik
- Penjelasan bagaimana Anda memenuhi persyaratan
- Tunjukkan profesional dan faktual
- Masukkan akun uji jika fungsi sulit ditemukan

Sumber Daya Tambahan
Bagian berjudul ‘Sumber Daya Tambahan’- Pedoman Ulasan Aplikasi App Store Apple
- Pedoman Pembelian dalam Aplikasi
- Praktik Terbaik Subskripsi
- Bantuan App Store Connect
- Spesifikasi Screenshot
- Informasi Versi Platform
Dukungan
Bagian berjudul “Dukungan”Jika Anda masih mengalami masalah:
- Tinjau Dokumentasi Pembelian Asli
- Periksa masalah troubleshooting umum
- Hubungi Dukungan Pengembang Apple untuk klarifikasi pedoman
Butuh Bantuan Ahli?
Judul Bagian “Butuh Bantuan Ahli?”Sulit dengan ulasan aplikasi atau membutuhkan bantuan yang disesuaikan? Buku janji panggilan dengan tim kami untuk dukungan yang dedikasi dengan:
- Pengimplementasian IAP review dan optimasi
- Pengembangan strategi ulasan App Store dan persiapan
- Review checklist pengiriman
- Pengembalian penolakan dan banding
- Pengujian dan validasi lengkap
Ahli kami telah berhasil membantu ratusan aplikasi melewati ulasan!
Lanjutkan dari iOS App Store Review Guidelines untuk IAP
Bagian berjudul “Teruskan dari Pedoman Ulasan Aplikasi iOS untuk IAP”Jika Anda menggunakan Pedoman Ulasan Aplikasi iOS untuk IAP untuk merencanakan persetujuan dan distribusi toko, hubungkannya dengan Menggunakan @capgo/native-purchases untuk kemampuan native di Menggunakan @capgo/native-purchases, @capgo/capacitor-in-app-review untuk detail implementasi di @capgo/capacitor-in-app-review, Menggunakan @capgo/capacitor-in-app-review untuk kemampuan native di Menggunakan @capgo/capacitor-in-app-review, @capgo/capacitor-native-market untuk detail implementasi di @capgo/capacitor-native-market, dan Menggunakan @capgo/capacitor-native-market untuk kemampuan asli di Menggunakan @capgo/capacitor-native-market. Menggunakan @capgo/capacitor-native-market untuk kemampuan asli.