Saltare al contenuto

Linee guida per la revisione dell'App Store per IAP

GitHub

Per ottenere l'approvazione del tuo'app sullo Store richiede molta attenzione alle linee guida di Apple, soprattutto quando si implementano le compravendite e le sottoscrizioni all'interno dell'app. Questa guida copre tutto ciò di cui hai bisogno per superare la revisione alla tua prima sottoscrizione.

Processo di revisione dello Store iOS

Prima che Apple revisioni il tuo flusso di acquisto, assicurati che il record dell'app stesso sia completo:

  • Aggiungi 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 valutazione di età domanda questionario affinché l'app sia pubblicabile
  • Aggiungi Dettagli di contatto per la revisione dell'app e note di revisione chiare
  • Se è richiesto l'accesso, fornisce un account di demo che non scade durante la revisione
Metadati di lista App Store con collegamenti a politiche e supporto
  • Utilizzare screenshot correnti dal build effettivo in revisione
  • Per iPhone 1290 x 2796 (6,7 pollici) è la dimensione di default più facile da utilizzare
  • Se la tua app funziona su iPad, carica anche screenshot di iPad
  • Le dimensioni di iPad accettate includono 2064 x 2752 (13 pollici) e 2048 x 2732 (12,9 pollici)
  • Non allungare le schermate iPhone per fingere il supporto iPad

Eseguire il percorso del revisore in TestFlight in modalità di prova

Sezione intitolata “Eseguire il percorso del revisore in TestFlight in modalità di prova”

Eseguire il percorso esatto che Apple seguirà su un dispositivo reale:

  • Installa l'ultima versione da TestFlight
  • Accedi con l'account 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 si comporti correttamente anche se vengono negati i permessi

L'Apple richiede una chiara dichiarazione dei prezzi prima di qualsiasi acquisto:

Elementi da non mancare:

  • Mostra il prezzo esatto prima del pulsante di acquisto
  • Mostra la frequenza di fatturazione (ad esempio “$9.99/mese”)
  • Stabilisci con chiarezza cosa gli utenti ottengono per il loro denaro
  • Indica quando si verificheranno le spese

Rifiuto comune:

“La tariffazione per abbonamento deve essere chiara e immediata.”

:::avviso Coerenza dei prezzi Tutti i prezzi devono corrispondere in:

  • Metadata della lista App Store
  • Pantalla delle acquisti in-app
  • Pantalla di gestione delle sottoscrizioni

Even una differenza di $1 tra la lista del negozio ($4.99) e l'app ($5.99) attiverà la rifiuto automatico.

Disclosures obbligatorie:

  • Tutti i piani di sottoscrizione disponibili visualizzati insieme
  • Comparazione chiara delle caratteristiche per livello
  • Non defaultare automaticamente ai livelli premium attraverso trucchi di interfaccia
  • Istruzioni di cancellazione facili da trovare

Linee guida per la progettazione dell'interfaccia

Barriera di pagamento con ripristino delle transazioni e collegamenti legali

Esempio di interfaccia 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>
);
}

Implementazione richiesta:

Tutti gli app con IAP devono fornire un modo per gli utenti per ripristinare le transazioni 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>

Perché Fallisce:

  • La tua app si blocca al lancio
  • La procedura di acquisto non riesce a completarsi
  • Le funzionalità mostrate nelle schermate non funzionano

Prevenzione:

  • Testa l'applicazione su dispositivi reali (non solo simulatori)
  • Testa tutti i flussi di sottoscrizione da inizio a fine
  • Verifica che la validazione del ricevuto funzioni correttamente
  • Controlla il trattamento degli errori di rete

Perché Fallisce:

  • Le screenshot mostra funzionalità non presenti nella versione corrente
  • La descrizione menziona funzionalità che non esistono
  • Il prezzo nei metadati differisce da quello in-app

Elenco di controllo dei metadati

Prevenzione:

// Document exactly what's in each tier
const 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 description

Perché fallisce:

  • Richiesta di camera/ubicazione/salute senza spiegazione
  • Richieste di autorizzazione nascoste a più schermate di distanza
  • Descrizioni di autorizzazione vaghe o generiche

Prevenzione:

Aggiorna con spiegazioni chiare: Info.plist Permesso di copia troppo vago per la revisione

Permesso di copia con spiegazioni più chiare Copia negli appunti
<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>

Sottosezione intitolata “4. Marketing ingannevole”

Perché fallisce:

Affermazioni come “l'app più popolare al mondo” senza prove

  • Caratteristiche “senza limiti” che hanno limiti nascosti
  • Tattiche di urgenza false (“Solo 2 posti disponibili!”)
  • Aggiorna il tuo

Linee guida per la descrizione Esempi

Linee guida aggiuntive per la descrizione

Prevenzione:

  • Sii specifico e fattuale nelle descrizioni
  • Evita superlativi senza evidenze
  • Non costringere gli utenti con una falsa scarsità

Perché fallisce:

  • Assenza di menzione sulla cancellazione
  • Bottoni di cancellazione nascosti o oscurati
  • Procedura di cancellazione a più passaggi senza il flusso nativo di Apple

Prevenzione:

// Always inform users about cancellation
function 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();
}

Apple ha rafforzato significativamente le norme sulla privacy nel 2025.

Disclosures obbligatorie

Per ogni autorizzazione:

Perché ce ne hai bisogno (caso d'uso specifico)

  1. Quando verrà utilizzato
  2. Come viene memorizzato e condiviso i dati
  3. Se è facoltativo o obbligatorio
  4. Copia negli appunti
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';
}

Assicurati che le tue etichette sulla privacy di App Store riflettano accuratamente:

  • La raccolta dei dati di acquisto
  • Gli indirizzi e-mail (per le ricevute)
  • ID dei dispositivi (per la prevenzione dei frodi)
  • I dati di utilizzo (per gli analytics)

Le etichette sulla privacy inesatte sono una ragione comune di rifiuto nel 2025. Verifica con cura la raccolta dei dati.

Elenco di controllo prima della sottoscrizione

  1. Testa tutti i flussi di acquisto

    • Acquista ogni livello di sottoscrizione
    • Testa le prove gratuite
    • Verifica che gli offerti introduttivi si applichino correttamente
    • Testa il ripristino degli acquisti
    • Verifica la condivisione della famiglia (se abilitata)
    • Testa su più dispositivi
  2. Verifica la coerenza dei prezzi

    • Controlla che i metadati dell'App Store corrispondano ai prezzi in-app
    • Verifica che tutti i valori di valuta siano corretti
    • Verifica che le durate dei periodi di prova gratuiti corrispondano alle descrizioni
    • Verifica che i termini degli offerti introduttivi siano precisi
  3. Revisiona Tutti i Testi

    • Elimina il testo di placeholder
    • Verifica che le affermazioni siano verificabili
    • Verifica la grammatica e l'ortografia
    • Assicurati che le descrizioni corrispondano alla versione corrente
    • Elimina le menzioni dei concorrenti
  4. Testa le Autorizzazioni

    • Richiedi solo le autorizzazioni necessarie
    • Mostra spiegazioni chiare prima di richiederle
    • Testa i flussi di "Rifiuta" (l'applicazione dovrebbe funzionare comunque)
    • Verifica le descrizioni di Info.plist sono chiare
  5. Prepara un account di prova

    • Creare un account di recensione che rimane valido durante la revisione
    • Documenta le credenziali di accesso nella sezione Informazioni sulla recensione
    • Verifica che il recensore possa raggiungere la paywall e completare il flusso di acquisto
    • Includere conti aggiuntivi o switch specifici dell'app nella sezione Note se necessario
  6. Verifica i Metadati

    • I screenshot corrispondono all'interfaccia attuale
    • L'URL del Supporto include informazioni di contatto reali
    • L'URL della politica sulla privacy è compilato
    • L'etichetta di età corrisponde al contenuto presente nel build
    • La videoanteprima dell'app (se presente) mostra la versione corrente
    • Descrizione fornisce una descrizione dettagliata delle funzionalità
    • La politica sulla privacy è accessibile all'interno dell'app e dalla lista dell'app Store
  7. Scrivi Note di Recensione Dettagliate

    Contact:
    Name: Jane Developer
    Email: review@yourapp.com
    Phone: +1 555-0100
    Test Account:
    Email: reviewer@test.com
    Password: TestPass123!
    This account does not expire during review.
    Testing Instructions:
    1. Log in with test account above
    2. Tap "Upgrade to Premium" button
    3. Select "Monthly Premium" subscription
    4. Complete purchase (no charge in sandbox)
    5. Verify premium features unlock
    Note: Subscription pricing is clearly shown before purchase.
    Cancellation instructions are in Settings > Account.

Timeline della Recensione dell'App Store

Revisione Standard: 24-48 ore Periodi di Picco: 3-5 giorni (rilevamenti dell'app Store durante le festività) Fine settimana: No recensioni elaborate Revisione accelerata: Disponibile per correzioni di bug critici (richiedi tramite App Store Connect)

Stati comuni che potrai vedere in App Store Connect:

  • Waiting for Review
  • In Review
  • Pending Developer Release
  • Rejected

1. Chiarezza delle sottoscrizioni

  • Confronto dei piani a lato richiesto
  • Nessun "modello oscuro" che nasconda opzioni più economiche
  • Percorsi di downgrade/upgrade chiari

2. Precisione dei metadati

  • I screenshot devono corrispondere alla build in esame
  • I screenshot per iPad sono richiesti se è abilitata la supporto per iPad
  • L'URL del supporto e la politica sulla privacy dovrebbero già essere attivi prima della sottoscrizione

3. Qualità dei dettagli sulla privacy e della recensione

  • I divulgamenti sulla privacy devono corrispondere a ciò che i vostri SDK raccolgono effettivamente
  • I contatti e le note per la recensione dell'applicazione dovrebbero essere completi nella prima sottoscrizione
  • I credenziali del demo devono rimanere valide per tutta la finestra di revisione

4. Prontezza della sottoscrizione

  • Aggiorna regolarmente le SDK minime richieste da Apple, quindi conferma la scadenza attuale prima di caricare un rilascio
  • TestFlight è il luogo più sicuro per verificare il percorso di revisione esatto prima di inviare
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.');
}
}
}
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>
);
}
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>
);
}
  1. Leggi attentamente la motivazione del rifiuto

    • Nota la specifica norma citata (ad esempio, 3.1.1, 5.1.1)
    • Capisci esattamente cosa Apple ha segnalato
  2. Risolve il problema in modo approfondito

    • Non solo ripara - risolvi la causa radice
    • Testa la soluzione estensivamente
    • Documenta le modifiche apportate
  3. Rispondi nel Centro Risoluzione

    Thank you for your feedback. I have addressed the issue:
    Issue: Subscription pricing not clear upfront
    Fix: Added explicit pricing display on subscription selection
    screen showing "$9.99/month" before purchase button. Also added
    cancellation instructions on the same screen.
    The changes are in this submission and can be tested using the
    provided test account.
  4. Risubmetti prontamente

    • Le risubmissioni vengono solitamente esaminate più velocemente
    • Di solito entro 24 ore

Se ritiene che la rifiutazione sia errata:

Procedura di chiarimento App Store

  1. Clicca su “Appello” in App Store Connect
  2. Fornisci prove chiare:
    • Schermate che mostrano la conformità
    • Riferimenti a specifiche linee guida
    • Spiegazione su come soddisfare le richieste
  3. Sii professionale e fattuale
  4. Includi un account di prova se la funzionalità è difficile da trovare

Esempio di richiesta di Documenti

Se hai ancora problemi:

Se hai difficoltà con la recensione 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 valutazione della Store App
  • Revisione della lista di controllo di sottoscrizione
  • Risoluzione delle rimostranze e delle ricorrenze
  • Test e validazione completi

I nostri esperti hanno già aiutato centinaia di app a superare la valutazione!

Continua da qui per le linee guida della Store App per IAP

Sezione intitolata “Continua da qui per le linee guida della Store App per IAP”

Se stai utilizzando Linee guida della Store App per IAP per pianificare l'approvazione e la distribuzione della store, connettilo con Usando @capgo/native-purchases per la capacità nativa in Usando @capgo/native-purchases, @capgo/capacitor-recensione-in-app per il dettaglio di implementazione in @capgo/capacitor-recensione-in-app, Usando @capgo/capacitor-recensione-in-app per la capacità nativa in Usando @capgo/capacitor-recensione-in-app, @capgo/capacitor-mercato-nativo per il dettaglio di implementazione in @capgo/capacitor-mercato-nativo, e Usando @capgo/capacitor-mercato-nativo per la capacità nativa in Usando @capgo/capacitor-mercato-nativo.