Linee guida di revisione App Store per iOS per IAP
Copia un prompt di configurazione con i passaggi di installazione e la guida markdown completa per questo plugin.
Getting your app approved on the App Store requires careful attention to Apple’s guidelines, especially when implementing in-app purchases and subscriptions. This guide covers everything you need to know to pass review on your first submission.

Prima di Invio
Prima della SottoscrizioneTitolo della sezione 'Prima di Invio'
Completa la configurazione di App Store ConnectPrima che Apple esamini il flusso di acquisto, assicurati che il record dell'app sia completo:
- Aggiungi URL della politica sulla privacy in App Store Connect
- Aggiungi URL di supporto che porta a informazioni di contatto reali per gli utenti
- Completa il la domanda di età perché l'app sia pubblicabile
- Aggiungi Dettagli di Contatto per la Recensione dell'App e note di revisione chiari
- Se richiesto l'accesso, fornisce un account demo che non scade durante la revisione
Preparare Screenshot Realistici
Sezione intitolata “Preparare Screenshot Realistici”- Utilizza screenshot correnti dall'edizione reale in revisione
- Per iPhone,
1290 x 2796(6,7 pollici) è la dimensione predefinita più facile - Se il tuo app funziona su iPad, carica anche le schermate di iPad
- Le dimensioni iPad accettate attualmente includono
2064 x 2752(13 pollici) e2048 x 2732(12,9 pollici) - Non allungare mai le schermate iPhone per simulare il supporto iPad
Esegui un Dry-Run del percorso del revisore in TestFlight
Sottosezione intitolata “Esegui un Dry-Run del percorso del revisore in TestFlight”Esegui il percorso esatto che Apple seguirà su un dispositivo reale:
- Installa l'ultima versione da TestFlight
- Accedi con il conto di recensione che intendi fornire
- Raggiungi la paywall senza gesti nascosti o menu di debug
- Completa le flussi di acquisto, ripristino e gestione abbonamento
- Verifica che l'app funzioni correttamente anche se le autorizzazioni sono negate
In-App Acquisto Requisiti
Sottosezione intitolata “In-App Acquisto Requisiti”Transparenza dei prezzi (Critico)
Sottosezione intitolata “Transparenza dei prezzi (Critico)”L'Apple richiede una chiara dichiarazione dei prezzi prima di qualsiasi acquisto:
Elementi da non dimenticare:
- Mostra il prezzo esatto prima del pulsante di acquisto
- Mostra la frequenza di fatturazione (ad esempio “$9.99/mese”)
- Clearly state what users get for their money
- Indica quando si verificheranno le addebitazioni
Rifiuto comune:
"Il prezzo della sottoscrizione deve essere chiaro e immediato."
:::attenzione Coerenza dei prezzi Tutti i prezzi devono corrispondere a:
- Elenco dei metadati della Store App
- Schermate delle compravendite in-app
- Schermate di gestione delle sottoscrizioni
Even una differenza di $1 tra l'elenco della Store ($4.99) e l'app ($5.99) attiverà la rifiutazione automatica. :::
Presentazione del Piano di Sottoscrizione
Sottosezione intitolata “Presentazione del Piano di Sottoscrizione”Disclosures obbligatorie:
- Tutti i piani di sottoscrizione disponibili visualizzati insieme
- Comparazione chiara delle caratteristiche per livello
- No auto-defaulting to premium tiers through UI tricks
- Istruzioni di cancellazione facili da trovare

Esempio di interfaccia utente conforme:
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> );}Ripristina le acquisizioni
Sezione intitolata “Ripristina acquisti”Implementazione richiesta:
Tutti gli app con IAP devono fornire un modo per gli utenti per ripristinare acquisti precedenti senza contattare il supporto.
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>Motivi di rifiuto comuni
Sottosezione intitolata “Motivi di rifiuto comuni”1. Crashes o Funzionamento Rotto dell'App
Sezione intitolata “1. Crashes o Funzionamento Rotto dell'App”Perché Fallisce:
- L'app si blocca al lancio
- La flussi di acquisto non si completa
- I caratteristiche mostrate nelle schermate non funzionano
Prevenzione:
- Testare sull'apparecchiature reali (non solo simulatori)
- Testare tutti i flussi di abbonamento da fine a fine
- Verificare che la validazione delle ricevute funzioni
- Controllare il trattamento degli errori di rete
2. Mancosincronizzazioni dei Metadati
Sezione intitolata “2. Mancanze di metadati”Perché Fallisce:
- Schermate mostrano funzionalità non presenti nella versione corrente
- La descrizione menziona funzionalità che non esistono
- I prezzi nei metadati differiscono da quelli in-app

Prevenzione:
// 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. Mancanze di spiegazioni sui permessi
Sezione intitolata “3. Mancanze di spiegazioni sui permessi”Perché Fallisce:
- Richiesta di camera/ubicazione/salute senza spiegazione
- Richieste di autorizzazione nascoste a più schermate
- Descrizioni di autorizzazione vaghe o generiche
Prevenzione:
Aggiorna il tuo Info.plist con spiegazioni chiare:
<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. Promozione Marketing Ingannevole
Sezione intitolata “4. Marketing ingannevole”Sottosezione intitolata “4. Marketing ingannevole”
- Affermazioni come “l’app più popolare al mondo” senza prove
- “Caratteristiche illimitate” con limiti nascosti
- “Tattiche di urgenza false” (‘Solo 2 posti disponibili!’)


Prevenzione:
- Sii specifico e fattuale nelle descrizioni
- Evita gli superlativi senza prove
- Non costringere gli utenti con false carenze
5. Procedura di cancellazione nascosta
Sottosezione intitolata “5. Procedura di cancellazione nascosta”Perché fallisce:
- Nessuna menzione di come cancellare
- Cancella la registrazione nascosta o ostruita
- Processo di cancellazione a più fasi senza flusso nativo di Apple
Prevenzione:
// 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();}Privacy e Utilizzo dei Dati (Sezione 5.1.1)
Privacy e Utilizzo dei Dati (Sezione 5.1.1)Sezione intitolata “Privacy e Utilizzo dei Dati (Sezione 5.1.1)”
Informazioni Requisite
Sezione intitolata “Dichiarazioni obbligatorie”Sezione intitolata “Disclosures Obbligatorie”
- Perché ne hai bisogno (caso d'uso specifico)
- Perché ne hai bisogno (caso d'uso specifico)
- How i dati sono archiviati/condivisi
- Se è facoltativo o obbligatorio
Esempio: Flusso di autorizzazione corretto
Sottosezione intitolata “Esempio: Flusso di autorizzazione corretto”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';}Etichette di Etichetta Nutrizionale sulla Privacy
Etichette di nutrizione sulla privacySottosezione intitolata “Etichette di nutrizione sulla privacy”
- Raccolta della storia degli acquisti
- La raccolta dei dati di acquisto
- Gli indirizzi e-mail (per le ricevute)
- Dati di utilizzo (per analisi)
Etichette di privacy inaccurate sono una comune ragione di rifiuto nel 2025. Verifica con attenzione la raccolta dei dati.
Elenco di controllo prima della sottoscrizione
Elenco dei controlli prima della sottoscrizione
-
Testa tutti i flussi di acquisto
- Acquista ogni livello di sottoscrizione
- Testa le prove gratuite
- Verify introductory offers apply correctly
- Testa il ripristino degli acquisti
- Verify Family Sharing (if enabled)
- Testa su più dispositivi
-
Verifica la consistenza dei prezzi
- Verifica che i dati di App Store corrispondano ai prezzi in-app
- Verifica che tutte le valute siano corrette
- Confirm free trial durations match descriptions
- Verifica che i termini degli offerti introduttivi siano precisi
-
Rivista Tutti i Testi
- Elimina il testo di placeholder
- Verifica che le affermazioni siano verificabili
- Verifica la grammatica e l'ortografia
- Ensure descriptions match current build
- Elimina le menzioni dei concorrenti
-
Testa le autorizzazioni
- Richiedi solo le autorizzazioni necessarie
- Mostra spiegazioni chiare prima di chiedere
- Test “Deny” flows (app should still work)
- Verifica le descrizioni di Info.plist sono chiare
-
Prepara un account di test
- Crea un account di recensione che rimane valido durante la revisione
- Documenta le credenziali di accesso nell'informazione di valutazione dell'app
- Verifica che il revisore possa raggiungere la paywall e completare il flusso di acquisto
- Includi conti aggiuntivi o interfacce di app specifiche nel campo Note se necessario
-
Verifica i Metadati
- Le schermate corrispondono all'interfaccia attuale
- L'URL del Supporto include informazioni di contatto reali
- L'URL della politica sulla privacy è compilato
- La classificazione di età corrisponde al contenuto nella build
- Il video di anteprima dell'app (se presente) mostra la versione corrente
- La descrizione descrive accuratamente le funzionalità
- La politica sulla privacy è accessibile all'interno dell'app e dalla lista dell'app store
-
Scrivi Note di Recensione Dettagliate
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.
Timeline della Recensione
Sezione intitolata “Timeline della Recensione”
Recensione Standard: 24-48 ore Periodi di punta: 3-5 giorni (rilasci di App Store durante le festività) Weekend: Nessuna recensione elaborata Revisione accelerata: Disponibile per correzioni di bug critici (richiedi tramite App Store Connect)
Stati comuni che potrai vedere in App Store Connect:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
Focalizzazione sulla Sottomissione 2026
Sezione intitolata “Focus sulla presentazione del 2026”Aree di Focalizzazione Corrente
Sezione intitolata “Aree di attualità”1. Chiarezza della sottoscrizione
- Confronti di piani a confronto richiesti
- Nessun ‘modello oscuro’ che nasconda opzioni più economiche
- I percorsi di downgrade/upgrade sono chiari
2. Precisione dei metadati
- I screenshot devono corrispondere alla build in rassegna
- Schermate di iPad sono richieste se è abilitata la supporto per iPad
- L'URL di supporto e la politica sulla privacy dovrebbero già essere attivi prima della sottomissione
3. Qualità della Recensione e Riservatezza
- Privacy disclosures must match what your SDKs actually collect
- L'informazione di contatto per la recensione e le note dovrebbero essere complete nella prima sottomissione
- Le credenziali di demo devono rimanere valide per tutta la finestra di revisione
4. Prontezza di Invio
- L'Apple aggiorna regolarmente le minime SDK richieste, quindi conferma la scadenza corrente prima di caricare un rilascio
- TestFlight è il luogo più sicuro per verificare il percorso del revisore esatto prima di inviare
Pratiche Migliori per il Plugin di Acquisto Nativo
Sezione intitolata “Pratiche Migliori per il Plugin di Acquisto Nativo”Implementare un Gestione degli Errori Adeguata
Sezione intitolata “Implementare un Gestione degli Errori Adeguata”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.'); } }}Visualizzare gli Stati di Caricamento
Sezione intitolata “Visualizzare gli Stati di Caricamento”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> );}Mostra Termini Chiaramente
Sezione intitolata “Mostra Termini Chiaramente”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> );}Se il tuo App viene Rifiutato
Sezione intitolata “Se la tua App viene rifiutata”Passaggi per Risolvere
Section titled “Steps to Resolve”-
Sezione intitolata “Passaggi per Risolvere”
- Nota la specifica linea guida citata (ad esempio, 3.1.1, 5.1.1)
- Capisci esattamente cosa Apple ha segnalato
-
Capisci esattamente cosa Apple ha segnalato
- Don’t just patch - fix root cause
- Testa la soluzione estensivamente
- Documenta le modifiche apportate
-
Rispondi nel Centro Risoluzione
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. -
Ripresenta prontamente
- Le ripresentazioni sono generalmente esaminate più velocemente
- Di solito entro 24 ore
Procedura di Appello
Se ritiene che la rifiutazione sia errata:Procedura di chiarimento App Store

- Clicca su “Appello” in App Store Connect
- Evidenziare chiaramente:
- Schermate che mostrano la conformità
- Riferimenti a specifiche linee guida
- Spiegazione di come si rispettano le richieste
- Sii professionale e fattuale
- Includere un account di prova se la funzionalità è difficile da trovare

Risorse aggiuntive
Sottosezione intitolata “Risorse aggiuntive”- Linee guida di revisione dell'App Store di Apple
- Linee guida per le compravendite in-app
- Pratiche migliori per le sottoscrizioni
- Aiuto per App Store Connect
- Specifiche per screenshot
- Informazioni sulla versione della piattaforma
Supporto
Sezione di supportoSe hai ancora problemi:
- Verifica documentazione delle compravendite native
- Controlla problemi di risoluzione comuni
- Contatta il supporto per sviluppatori Apple per chiarimenti sui lineamenti guida
Hai bisogno di aiuto esperto?
Sezione intitolata “Hai bisogno di aiuto esperto?”Soffri con la valutazione dell'app o hai bisogno di assistenza personalizzata? Prenota una chiamata di consultazione con il nostro team per supporto dedicato con:
- Revisione e ottimizzazione dell'implementazione IAP
- Preparazione e strategia per la revisione dell'App Store
- Revisione del checklist di invio
- Risoluzione delle rimostranze e ricorso
- Test e validazione completi
I nostri esperti hanno già aiutato centinaia di app a superare la revisione!
Continua da qui: Linee guida per la revisione dell'App Store per IAP
Sezione intitolata “Continua da qui: Linee guida per la revisione dell'App Store per IAP”If sei stai utilizzando IAP Store Review Guidelines per iOS per pianificare l'approvazione e la distribuzione della store, collega Utilizza @capgo/acquisti-nativi per la capacità nativa in Utilizza @capgo/acquisti-nativi, @capgo/capacitor-recensione-in-app per il dettaglio di implementazione in @capgo/capacitor-recensione-in-app, Utilizza @capgo/capacitor-recensione-in-app per la capacità nativa in Utilizza @capgo/capacitor-recensione-in-app, @capgo/capacitor-mercato-nativo per il dettaglio di implementazione in @capgo/capacitor-mercato-nativo, e Utilizza @capgo/capacitor-mercato-nativo per la capacità nativa in Utilizzo @capgo/capacitor-market nativo.