Directives de Revue de l'App Store iOS pour les IAP
Copiez un prompt de configuration avec les étapes d'installation et la guide markdown complète pour ce plugin.
Pour obtenir l'approbation de votre application sur l'App Store, il est essentiel de prêter attention aux lignes directrices d'Apple, en particulier lors de l'implémentation des achats en application et des abonnements. Cette guide couvre tout ce dont vous avez besoin pour passer la revue à votre première soumission.

Avant de Soumettre
Section intitulée « Avant de Soumettre »Terminer la Configuration de App Store Connect
Section intitulée « Terminer la Configuration de App Store Connect »Avant que Apple révise votre flux d'achat, assurez-vous que le dossier de l'application lui-même est complet :
- Ajouter un URL de la Politique de Confidentialité dans App Store Connect
- Ajouter un URL de Support qui mène à des informations de contact réelles pour les utilisateurs
- Completez le note d'âge formulaire pour que l'application soit publiable
- Ajoutez Détails de contact pour la revue d'application et notes de rédacteur clairs
- Si un login est requis, fournissez un compte de démonstration qui ne expire pas pendant la revue
Préparez des captures d'écran réelles
Section intitulée « Préparez des captures d'écran réelles »- Utilisez les captures d'écran actuelles provenant de la build réelle en examen
- Pour iPhone,
1290 x 2796La taille par défaut la plus facile est (6,7 pouces) - If your app runs on iPad, upload iPad screenshots too
- Les tailles iPad acceptées incluent actuellement
2064 x 2752(13 pouces) et2048 x 2732(12,9 pouces) - Never stretch iPhone screenshots to fake iPad support
Passer en revue le parcours du Reviewer dans TestFlight
Titre de la section : “Simuler le parcours du rédacteur dans TestFlight”Exécutez le chemin exact que Apple suivra sur un appareil réel :
- Installez la dernière version de TestFlight
- Connectez-vous avec le compte de revue que vous prévoyez fournir
- Accédez au paywall sans gestes cachés ou menus de débogage
- Flux d'achat, de restauration et de gestion de l'abonnement
- Vérifiez que l'application se comporte toujours correctement si les permissions sont refusées
Exigences d'Achat en Ligne
Section intitulée « Exigences d'Achat en Ligne »Transparence des Tarifs (Critique)
Section intitulée « Transparence des Tarifs (Critique) »Apple exige une transparence totale des tarifs avant toute achat :
Éléments Obligatoires :
- Afficher le prix exact avant le bouton d'achat
- Show billing frequency (e.g., “$9.99/month”)
- État clair de ce que les utilisateurs obtiennent pour leur argent
- Indiquer quand les factures seront émises
Rejet commun :
« Le tarification des abonnements doit être claire et explicite. »
:::précaution Coût cohérent Tous les prix doivent correspondre à :
- Liste de métadonnées de l'App Store
- Écrans d'achat en application
- Écrans de gestion des abonnements
Même un désaccord de 1$ entre la liste de magasin (4,99$) et l'application (5,99$) déclenchera une rejet automatique.
Présentation du plan d'abonnement
Section intitulée « Présentation du plan d'abonnement »Informations obligatoires :
- Tous les niveaux d'abonnement disponibles ensemble
- Comparaison claire des fonctionnalités par niveau
- Pas de redirige vers les niveaux premium par des astuces d'interface
- Instructions de suppression facilement accessibles

Exemple d'interface 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> );}Restaurer les achats
Section intitulée « Restaurer les achats »Mise en œuvre requise :
Tout application avec IAP doit fournir un moyen pour les utilisateurs de restaurer leurs achats précédents sans contacter le support.
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>Raisons de refus courantes
Section intitulée « Raisons de refus courantes »1. L'application s'effondre ou ne fonctionne pas
Section intitulée « 1. L'application s'effondre ou ne fonctionne pas »Pourquoi cela ne fonctionne pas :
- L'application s'effondre lors du lancement
- La progression d'achat ne se termine pas
- Features shown in screenshots don’t work
Prévention :
- Testez sur des appareils réels (pas seulement des simulateurs)
- Testez tous les flux de souscription de bout en bout
- Vérifiez la validation de la facture
- Vérifiez la gestion des erreurs de réseau
2. Incompatibilités de métadonnées
Titre de la section « 2. Incompatibilités de métadonnées »Pourquoi cela ne fonctionne pas :
- Screenshots show features not in current build
- La description mentionne des fonctionnalités qui n'existent pas
- Le prix dans les métadonnées diffère de celui en application

Prévention :
// 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. Explications manquantes sur les permissions
Section intitulée « 3. Explications manquantes sur les permissions »Pourquoi cela ne fonctionne pas :
- Demande de la caméra/lieu/santé sans explication
- Demandes de permissions enterrées plusieurs écrans plus loin
- Descriptions de permissions vagues ou génériques
Prévention :
Mettez à jour votre Info.plist avec des explications claires :
<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. Publicité trompeuse
Section intitulée « 4. Publicité trompeuse »Pourquoi cela ne fonctionne pas :
- Revendications sans preuves comme « #1 app au monde ».
- Des « fonctionnalités illimitées » avec des limites cachées
- Fake urgency tactics (“Only 2 spots left!”)


Prévention :
- Soyez spécifique et factuel dans les descriptions
- Évitez les superlatifs sans preuve
- Don’t pressure users with fake scarcity
5. Procédure de suppression cachée
Section intitulée « 5. Procédure de suppression cachée »Pourquoi cela ne fonctionne pas :
- Pas de mention de la façon de se désinscrire
- Bouton de désinscription caché ou masqué
- Procédure de désinscription à plusieurs étapes sans flux natif d'Apple
Prévention :
// 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();}Confidentialité et Utilisation des données (Section 5.1.1)
Section intitulée « Confidentialité et Utilisation des données (Section 5.1.1) »Apple a considérablement renforcé les exigences de confidentialité en 2025.
Informations requises
Section intitulée « Informations requises »Pour chaque autorisation :
- Pourquoi l'utiliser (utilisation spécifique)
- Quand elle sera utilisée
- Comment les données sont stockées/échangées
- Est-ce qu'elle est facultative ou obligatoire
Exemple : Flux d'autorisation correct
Section intitulée « Exemple : Flux d'autorisation correct »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';}Étiquettes de Nutrition de Confidentialité
Section titled “Privacy Nutrition Labels”Ensure your App Store privacy labels accurately reflect:
- Collecte de l'histoire des achats
- Adresses e-mail (pour les reçus)
- Device IDs (for fraud prevention)
- Données d'utilisation (pour les analyses)
Les étiquettes de confidentialité inexactes constituent une raison courante de refus en 2025. Vérifiez soigneusement vos collectes de données.
Vérification préalable à la soumission
Vérifiez tous les flux d'achat
-
Achetez chaque niveau de souscription
- Testez les essais gratuits
- Vérification préalable à la soumission
- Verify introductory offers apply correctly
- Testez la restauration des achats
- Vérifiez la partage de famille (si activé)
- Testez sur plusieurs appareils
-
Vérifiez la cohérence des tarifs
- Check App Store metadata matches in-app prices
- Vérifiez que toutes les devises sont correctes
- Confirm free trial durations match descriptions
- Vérifiez que les termes des offres d'introduction sont exacts
-
Révisez tous les textes
- Supprimez le texte de remplacement
- Vérifiez que les affirmations sont testables
- Vérifiez la grammaire et l'orthographe
- Ensure descriptions match current build
- Supprimez les mentions de concurrents
-
Testez les autorisations
- Demandez uniquement les autorisations nécessaires
- Affichez des explications claires avant de demander
- Test “Deny” flows (app should still work)
- Vérifiez que les descriptions d'Info.plist sont claires
-
Préparez un compte de test
- Créez un compte de revue qui reste valide pendant la revue
- Document login credentials in App Review information
- Vérifiez que le réviseur peut atteindre la barrière payante et terminer la flux de paiement
- Inclure d'autres comptes ou des paramètres d'application dans le champ Notes si nécessaire
-
Vérifier les Métadonnées
- Les captures d'écran correspondent à l'interface utilisateur actuelle
- L'URL de support inclut des informations de contact réelles
- L'URL de la politique de confidentialité est remplie
- La note d'âge correspond au contenu dans la build
- App preview video (if any) shows current version
- La description décrit avec précision les fonctionnalités
- La politique de confidentialité est accessible en ligne et depuis la liste des applications
-
Écrire des notes de revue détaillées
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.
Chronologie de la revue
Section intitulée “Chronologie de la Revue”
Revue standard : 24-48 heures Périodes de pointe : 3-5 jours (lancements de l'App Store pendant les fêtes) Week-ends : Aucune revue traitée Revue accélérée : Disponible pour les correctifs de bugs critiques (demande via App Store Connect)
États courants que vous verrez dans App Store Connect :
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
Focus de soumission 2026
Section intitulée « Focus de soumission 2026 »Domaines d'actualité actuels
Section intitulée « Domaines d'actualité actuels »1. Clarté des abonnements
- Comparaisons de plans côté à côté nécessaires
- Aucun « schéma sombre » qui cache les options moins chères
- Itinéraires de dégradation/mise à niveau clairs
2. Précision des métadonnées
- Screenshots must match the build being reviewed
- Écrans d'écran iPad sont nécessaires si le support iPad est activé.
- L’URL de support et la politique de confidentialité doivent déjà être en ligne avant la soumission
3. Qualité de la note et vie privée
- Privacy disclosures must match what your SDKs actually collect
- Informations de contact et notes de la revue d'application doivent être complètes lors de la première soumission.
- Les informations de démo doivent rester valides pendant toute la fenêtre de revue.
4. Préparation de la soumission
- Apple met à jour régulièrement les exigences minimales SDK ; assurez-vous donc de confirmer la date limite actuelle avant de publier une version de production.
- TestFlight est le meilleur endroit pour vérifier le chemin exact du réviseur avant de soumettre
Meilleures pratiques pour le plugin d'achats natifs
Section intitulée « Meilleures pratiques pour le plugin d'achats natifs »Implémenter un traitement d'erreurs approprié
Section intitulée « Gérer les Erreurs Correctement »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.'); } }}Afficher les États de Chargement
Section intitulée « Afficher les États de Chargement »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> );}Afficher les Termes de Manière Claire
Afficher les Termes de manière Clairefunction 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> );}Si Votre Application Est Rejetée
Section intitulée « Si Votre Application Est Rejetée »Étapes pour Résoudre le Problème
Section titled “Steps to Resolve”-
Lisez attentivement le refus
- Notez la règle spécifique citée (par exemple, 3.1.1, 5.1.1)
- Comprenez exactement ce que Apple a signalé
-
Réparez l'erreur de manière approfondie
- Don’t just patch - fix root cause
- Testez la correction de manière exhaustive
- Documentez les modifications apportées
-
Répondre dans le Centre de Résolution de Conflits
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. -
Résubmittez rapidement
- Les résubmissions sont généralement examinées plus rapidement
- Généralement dans les 24 heures
Procédure d'appel
Section intitulée « Procédure d'appel »Si vous pensez que la réjection est incorrecte :

- Cliquez sur « Appel » dans App Store Connect
- Fournissez des preuves claires :
- Captures d'écran de conformité
- Références à des lignes directrices spécifiques
- Explication de la manière dont vous respectez les exigences
- Soyez professionnel et factuel
- Incluez un compte de test si la fonctionnalité est difficile à trouver

Ressources supplémentaires
Section intitulée « Ressources supplémentaires »- Directives de la plateforme d'applications Apple
- Lignes directrices des achats en application
- Meilleures pratiques pour les abonnements
- Aide de App Store Connect
- Spécifications des captures d'écran
- Informations de version de la plateforme
Si vous rencontrez toujours des problèmes :
- Vérifiez Documentation de ventes natives
- Vérifier Problèmes de dépannage courants
- Contactez le support Apple Developer pour clarifications.
Besoin d'aide experte?
Section intitulée « Besoin d'aide experte ? »Struggling with app review or need personalized assistance? Réservez un appel de consultation avec notre équipe pour un soutien dédié avec :
- Examen et optimisation de l'implémentation de IAP
- Préparation et stratégie de revue de l'App Store
- Examen du checklist de soumission
- Résolution de rejet et recours
- Effectuer des tests et des validations complètes
Nos experts ont aidé avec succès des centaines d'applications à passer en revue !
Continuez de la section iOS App Store Review Guidelines for IAP
Titre de la section « Continuez de la section iOS App Store Review Guidelines for IAP »Si vous utilisez iOS App Store Review Guidelines for IAP pour planifier l'approbation et la distribution de l'application, connectez-l’avec En utilisant @capgo/native-purchases pour la capacité native dans En utilisant @capgo/native-purchases, @capgo/capacitor-avis-à-l'intérieur-de-l'application pour le détail d'implémentation dans @capgo/capacitor-in-app-review, Utilisation de @capgo/capacitor-avis de l'application pour la capacité native dans Utilisation de @capgo/capacitor-avis de l'application @capgo/capacitor-marché natif pour le détail d'implémentation dans @capgo/capacitor-marché natif, et Utilisation de @capgo/capacitor-marché natif pour la capacité native dans Utilisation de @capgo/capacitor-marché natif.