Linee Guida per la Revisione dell'App Store di Apple per IAP
Copia un prompt di configurazione con le istruzioni di installazione e la guida markdown completa per questo plugin.
Per ottenere l'approvazione del tuo'app sullo Store Richieste di Apple richiede molta attenzione, soprattutto quando si implementano acquisti e abbonamenti all'interno dell'app. Questa guida copre tutto ciò di cui hai bisogno per superare la revisione alla tua prima sottoscrizione.

Prima di sottoporre
Sezione intitolata “Prima di sottoporre”Completa la configurazione di App Store Connect
Sezione intitolata “Completa la configurazione di App Store Connect”Prima che Apple valuti il flusso di acquisto, assicurati che il record dell'app sia completo:
- Aggiungi un URL della politica sulla privacy in App Store Connect
- Aggiungi un URL del supporto che porta a informazioni di contatto reali per gli utenti
- Completa il questionario di valutazione di età per rendere l'app pubblicabile età di valutazione Riempi i dati di contatto per la revisione dell'app e aggiungi note chiare per il revisore
- Aggiungi Inserisci i dati di contatto per la revisione dell'app e aggiungi note chiare per il revisore Se è richiesta la registrazione, fornisci un account demo che non scade durante la revisione
- Nota Nota
Preparare Screenshot Realistici
Sezione intitolata “Preparare Screenshot Realistici”- Utilizza screenshot correnti dal build reale in esame
- Per iPhone,
1290 x 2796(6,7 pollici) è la dimensione di default più facile da utilizzare - Se il tuo app funziona su iPad, carica anche screenshot di iPad
- Le dimensioni di iPad accettate includono
2064 x 2752(13 pollici) e2048 x 2732(12,9 pollici) - Non allungare mai screenshot di iPhone per simulare il supporto iPad
Esegui un Dry-Run del Percorso del Recensore in TestFlight
Sezione intitolata “Esegui un Dry-Run del Percorso del Recensore 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 hai in programma di fornire
- Raggiungi la paywall senza gesti nascosti o menu di debug
- Flussi di acquisto, ripristino e gestione abbonamento
- Verifica che l'app si comporti correttamente anche se vengono negati i permessi
Requisiti per le Vendite All'interno dell'App
Sezione intitolata “Requisiti per le Vendite All'interno dell'App”Transparenza dei prezzi (Critico)
Sezione intitolata “Transparenza dei prezzi (Critico)”Apple richiede una chiara dichiarazione di prezzi prima di qualsiasi acquisto:
Elementi obbligatori:
- Visualizza prezzo esatto prima del pulsante di acquisto
- Mostra la frequenza di fatturazione (ad esempio, "9,99 €/mese")
- Stabilisci chiaramente cosa gli utenti ottengono per il loro denaro
- Indica quando avverranno le addebitazioni
Rifiuto comune:
"Il prezzo delle sottoscrizioni deve essere chiaro e immediato."
:::avviso Coerenza dei prezzi Tutti i prezzi devono corrispondere a:
- Elenco di metadata della Store
- Schermate di acquisto in-app
- Schermate di gestione delle sottoscrizioni
Even a $1 discrepancy between store listing ($4.99) and app ($5.99) will trigger automatic rejection. :::
Presentazione del piano di sottoscrizione
Sezione intitolata “Presentazione del piano di abbonamento”Informazioni obbligatorie:
- Tutti i piani di abbonamento disponibili visualizzati insieme
- Comparazione chiara delle caratteristiche per livello
- Nessuna impostazione automatica dei livelli premium attraverso trucchi di interfaccia utente
- Istruzioni di cancellazione facilmente reperibili

Esempio di interfaccia utente conforme alle norme:
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 acquisti
Sezione intitolata “Ripristina acquisti”Implementazione Richiesta:
Ogni app con IAP deve fornire un modo per gli utenti per ripristinare le precedenti acquisizioni 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
Sezione intitolata “Motivi di Rifiuto Comuni”1. L'app si blocca o la funzionalità è rotta
Sezione intitolata “1. L'app si blocca o la funzionalità è rotta”Perché Fallisce:
- L'app si blocca al lancio
- Il flusso di acquisto non riesce a completarsi
- Le funzionalità mostrate nelle schermate non funzionano
Prevenzione:
- Testare su dispositivi reali (non solo simulatori)
- Testare tutti i flussi di abbonamento end-to-end
- Verificare il funzionamento della validazione del ricevimento
- Controllare il trattamento degli errori di rete
2. Mancanze di metadati
Sezione intitolata “2. Mancanze di metadati”Perché Fallisce:
- Le schermate mostrano funzionalità non presenti nella versione corrente
- La descrizione menziona funzionalità che non esistono
- Il prezzo nei metadati differisce da quello presente nell'applicazione

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. Spiegazioni di permessi mancanti
Sezione intitolata “3. Spiegazioni di permessi mancanti”Perché non funziona:
- Richiesta di camera/ubicazione/salute senza spiegazione
- Richieste di permessi nascoste a più schermate di distanza
- Descrizioni di permessi 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. Marketing ingannevole
Sezione intitolata “4. Marketing ingannevole”Perché fallisce:
- Affermazioni come “l'app più popolare al mondo” senza prove
- “Caratteristiche illimitate” che hanno limiti nascosti
- Tattiche di urgenza false (“Solo 2 posti disponibili!”)


Prevenzione:
- Sii specifico e fattuale nelle descrizioni
- Evita superlativi senza evidenze
- Non costringere gli utenti con la scarsità falsa
5. Procedura di cancellazione nascosta
Sezione intitolata “5. Procedura di cancellazione nascosta”Perché fallisce:
- Menzione assente su come cancellare
- Pulsante di cancellazione nascosto o oscurato
- Procedura di cancellazione a più passaggi senza il 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)
Sezione intitolata “Privacy e Utilizzo dei Dati (Sezione 5.1.1)”Apple ha notevolmente rafforzato i requisiti di privacy nel 2025.
Informazioni obbligatorie
Sezione intitolata “Informazioni obbligatorie”Per ogni autorizzazione:
- Perché ne hai bisogno (utilizzo specifico)
- Quando verrà utilizzato
- Come viene memorizzato/condiviso i dati
- Se è facoltativo o obbligatorio
Esempio: Flusso di autorizzazione corretto
Sezione 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 per la nutrizione della privacy
Sezione intitolata “Etichette per la nutrizione della privacy”Assicurati che i tuoi etichette di privacy per l'App Store siano accurate e riflettano:
- Raccolta dei dati di acquisto
- Indirizzi email (per le ricevute)
- ID dispositivi (per la prevenzione dei frodi)
- Dati di utilizzo (per l'analisi)
Le etichette di privacy inesatte sono una delle principali ragioni di rifiuto nel 2025. Verifica con cura la raccolta dei dati.
Elenco di controllo pre-invio
Sezione intitolata “Elenco di controllo pre-invio”
-
Testa tutti i flussi di acquisto
- Acquista ogni livello di abbonamento
- Testa le prove gratuite
- Verifica che le offerte introduttive siano applicate correttamente
- Testa la ripristinazione degli acquisti
- Verifica la condivisione di famiglia (se abilitata)
- Testa su più dispositivi
-
Verifica la consistenza dei prezzi
- Controlla che i metadati dell'App Store corrispondano ai prezzi in-app
- Verifica che tutti i valori di valuta siano corretti
- Conferma che le durate dei periodi di prova gratuiti corrispondono alle descrizioni
- Controlla che le condizioni delle offerte introduttive siano accurate
-
Revisiona Tutti i Copioni
- Elimina il testo di placeholder
- Verifica che le affermazioni siano testabili
- Verifica grammatica e ortografia
- Assicurati che le descrizioni corrispondano alla versione corrente
- Elimina menzioni dei concorrenti
-
Testa le autorizzazioni
- Richiedi solo le autorizzazioni necessarie
- Mostra spiegazioni chiare prima di richiedere
- Testa i flussi di
- Verifica che le descrizioni di Info.plist siano 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 recensione dell'app
- Verifica che il revisore possa raggiungere la paywall e completare il flusso di acquisto
- Includere conti aggiuntivi o impostazioni app-specifiche nel campo Note se necessario
-
Verifica Metadata
- Le schermate di screenshot corrispondono all'interfaccia attuale
- L'URL di supporto include informazioni di contatto reali
- L'URL della politica sulla privacy è compilato
- La classificazione di età corrisponde al contenuto presente nel 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 dei prodotti
-
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.
Cronologia della Recensione
Sezione intitolata “Timeline di revisione”
Revisione standard: 24-48 ore Periodi di punta: 3-5 giorni (rilevazioni di App Store durante le festività) Weekend: Nessuna revisione elaborata Revisione accelerata: Disponibile per correzioni di bug critici (richiesta tramite App Store Connect)
Stati comuni che si vedranno in App Store Connect:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
2026 Focus di Invio
Sezione intitolata “2026 Focus di Invio”Aree di attenzione correnti
Sezione intitolata “Aree di attenzione correnti”1. Chiarezza della Sottoscrizione
- Richiede confronti a lato dei piani
- Nessun uso di “tecniche oscuranti” che nascondano opzioni più economiche
- Percorsi di downgrade/upgrade chiari
2. Precisione dei Metadati
- Le schermate devono corrispondere alla build in esame
- Sono richieste le schermate iPad se è abilitata la supporto per iPad
- L'URL di supporto e la politica sulla privacy dovrebbero già essere attivi prima della sottoscrizione
3. Qualità dei dettagli sulla privacy e sulla revisione
- Le dichiarazioni sulla privacy devono corrispondere a ciò che i propri SDK raccolgono effettivamente
- L'informazione di contatto e le note per la revisione App dovrebbero essere complete nella prima sottoscrizione
- I credenziali del demo devono rimanere valide per tutta la finestra di revisione
4. Prontezza della sottoscrizione
- Apple aggiorna regolarmente i requisiti minimi SDK, quindi conferma la scadenza corrente prima di caricare un rilascio di build
- TestFlight è il luogo più sicuro per verificare il percorso del revisore esatto prima di sottoscrivere
Pratiche migliori per il plugin delle acquisti native
Sezione intitolata “Pratiche migliori per il plugin delle acquisti native”Implementa il trattamento degli errori corretto
Implementare un corretto trattamento degli erroriimport { 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.'); } }}Visualizza gli stati di caricamento
Visualizza gli stati di caricamentofunction 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 chiaramente le condizioni
Visualizza chiaramente le condizionifunction 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 la tua app viene rifiutata
Visualizza gli stati di caricamentoVisualizza gli stati di caricamento
Passaggi per risolvere il problema-
Leggi attentamente la rifiutazione
- Nota la specifica linea guida citata (ad esempio, 3.1.1, 5.1.1)
- Capisci esattamente cosa Apple ha segnalato
-
Risolve il problema in modo approfondito
- Non si tratta solo di patch - risolvi la causa radice
- 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. -
Risubmetti prontamente
- Le risubmissioni sono generalmente esaminate più velocemente
- Di solito entro 24 ore
Procedura di Ricorso
Sezione intitolata “Procedura di Ricorso”Se ritiene che la rifiutazione sia errata:

- Clicca su “Ricorso” in App Store Connect
- Fornisci prove chiare:
- Schermate che mostrano la conformità
- Riferimenti a specifiche linee guida
- Spiegazione di come si soddisfano i requisiti
- Sii professionale e fattuale
- Includi un account di test se la funzionalità è difficile da trovare

Risorse Aggiuntive
Sezione intitolata “Risorse Aggiuntive”- Linee guida per la revisione dell'App Store di Apple
- Linee guida per l'acquisto in-app
- Pratiche migliori per le sottoscrizioni
- Aiuto per App Store Connect
- Specifiche per le schermate di anteprima
- Informazioni sulla versione del sistema
Supporto
Sezione intitolata “Supporto”Se hai ancora problemi:
- Rivista le Documentazione per acquisti nativi
- Verifica Problemi di risoluzione comuni
- Contatta il supporto dello sviluppatore Apple per chiarimenti sulle linee guida
Hai bisogno di aiuto esperto?
Sezione intitolata “Hai bisogno di aiuto esperto?”Stai lottando con la revisione dell'app o hai bisogno di assistenza personalizzata? Prenota una chiamata di consultazione con il nostro team per un 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 ricorsi
- Verifica completa e validazione
I nostri esperti hanno già aiutato centinaia di app a superare la revisione!