Aller directement à la navigation

Lignes directrices de la boutique iOS pour les achats en ligne

Procédure de revue de l'App Store iOS

Avant de Soumettre

Titre de la section « Avant de Soumettre »

Terminez la configuration de App Store Connect

Pour obtenir votre application approuvée sur l'App Store, il faut une attention soigneuse aux directives d'Apple, surtout lors de l'implémentation des achats et des abonnements en ligne. Ce guide couvre tout ce dont vous avez besoin pour passer la revue à votre première soumission.

Section intitulée « Terminez la configuration de Setup App Store Connect »

Avant que votre flux d'achat soit examiné par Apple, assurez-vous que l'enregistrement de l'application soit complet :

  • Ajoutez un URL de la politique de confidentialité dans App Store Connect
  • Ajoutez un URL de support qui mène à des informations de contact réelles pour les utilisateurs
  • Terminez le questionnaire d'âge pour que l'application soit publiable
  • Ajoutez Détails de contact pour la revue d'applications et notes de réviseur claires
  • Si un connexion est requise, fournissez un compte de démonstration qui ne expire pas pendant la revue
Méta-données de la liste de l'App Store avec des liens de politique et de support
  • Utilisez les écrans d'iPhone actuels du build réel en cours de revue
  • Pour iPhone, 1290 x 2796 (6.7 pouces) est la taille par défaut la plus facile à utiliser
  • Si votre application fonctionne sur iPad, téléchargez également des captures d'écran d'iPad
  • Les tailles d'iPad acceptées actuellement incluent 2064 x 2752 (13 pouces) et 2048 x 2732 (12,9 pouces)
  • N'agrandissez jamais les captures d'écran d'iPhone pour simuler le support iPad

Effectuez une évaluation en mode simulation dans TestFlight

Section intitulée “Effectuez une évaluation en mode simulation dans TestFlight”

Exécutez le chemin exact que suivra Apple sur un appareil réel :

  • Installez la dernière version de TestFlight
  • Connectez-vous avec le compte de revue que vous prévoyez fournir
  • Parvenez à la barrière de paiement 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

Apple exige une transparence totale des tarifs avant toute achat :

Éléments Impératifs :

  • Affichez le prix exact avant le bouton d'achat
  • Affichez la fréquence de facturation (par exemple, « $9,99 $/mois »)
  • Définissez clairement ce que les utilisateurs obtiennent pour leur argent
  • Indiquez quand les factures seront émises

Rejet Commun:

“Le prix d'abonnement doit être clair et explicite.”

:::attention Coût Consistance Tous les prix doivent correspondre à :

  • Liste de métadonnées de l'App Store
  • Écrans d'achat en application
  • Écrans de gestion d'abonnement

Même une différence de 1 $ entre la liste de l'App Store (4,99 $) et l'application (5,99 $) déclenchera un rejet automatique. :::

Disclosures Obligatoires:

  • Tous les niveaux d'abonnement disponibles affichés ensemble
  • Comparaison claire des fonctionnalités par niveau
  • Aucune mise automatique en niveau vers les tarifs premium par le biais de ruses d'interface utilisateur
  • Instructions de désabonnement faciles à localiser

Conseils de conception d'interface utilisateur

Paywall avec restauration d'achats et liens juridiques

Exemple d'interface utilisateur 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>
);
}

Implémentation requise :

Tout application avec IAP doit fournir un moyen pour les utilisateurs de restaurer les 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>

1. L'application s'effondre ou la fonctionnalité est cassée

Section intitulée « 1. L'application s'effondre ou la fonctionnalité est cassée »

Pourquoi cela échoue :

  • L'application s'effondre lors du lancement
  • La passerelle d'achat ne parvient pas à se terminer
  • Les fonctionnalités montrées dans les captures d'écran ne fonctionnent pas

Prévention :

  • Testez sur des appareils réels (et non seulement des simulateurs)
  • Testez toutes les flux de souscription de bout en bout
  • Vérifiez que la validation des réceptions fonctionne
  • Vérifiez la gestion des erreurs de réseau

Pourquoi cela ne fonctionne pas :

  • Les captures d'écran montrent des fonctionnalités qui ne sont pas dans la dernière version
  • La description mentionne des fonctionnalités qui n'existent pas
  • Le prix dans les métadonnées diffère de celui en application

Liste de vérification des métadonnées

Prévention :

// 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

Pourquoi cela ne fonctionne pas :

  • Demande de la caméra/lieu/santé sans explication
  • Demandes d'autorisation enfouies plusieurs écrans plus loin
  • Descriptions d'autorisation vagues ou génériques

Prévention :

Mettez à jour votre Info.plist avec des explications claires :

Copie de l'autorisation trop vague pour examen Copie d'autorisation avec des explications plus 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>

Pourquoi cela ne fonctionne pas :

  • Revendications comme « l'application n°1 au monde » sans preuve
  • « Fonctionnalités illimitées » qui ont des limites cachées
  • Tactiques d'urgence fausses (« Seulement 2 places restantes ! »)

Exemples de lignes directrices de description

Lignes directrices de description supplémentaires

Prévention :

  • Soyez spécifique et factuel dans les descriptions
  • Évitez les superlatifs sans preuve
  • N'obligez pas les utilisateurs avec une fausse rareté

Pourquoi cela ne fonctionne pas :

  • Pas de mention de la façon de se désinscrire
  • Bouton d'annulation caché ou obscurci
  • Procédure d'annulation à plusieurs étapes sans flux natif d'Apple

Prévention :

// 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();
}

Confidentialité & Utilisation des données (Section 5.1.1)

Section intitulée « Confidentialité & Utilisation des données (Section 5.1.1) »

Apple a considérablement renforcé les exigences de confidentialité en 2025.

Pour chaque autorisation :

  1. Pourquoi vous en avez besoin (utilisation spécifique)
  2. When il sera utilisé
  3. Comment les données sont stockées/échangées
  4. Est-ce qu'il est facultatif ou obligatoire
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';
}

Assurez-vous que vos étiquettes de vie privée de l'App Store reflètent avec précision :

  • Collecte de l'histoire d'achat
  • Adresses e-mail (pour les reçus)
  • Identifiants de dispositif (pour la prévention de la fraude)
  • Données d'utilisation (pour les analyses)

Les étiquettes de confidentialité inexactes sont une raison courante de refus en 2025. Vérifiez soigneusement vos collectes de données.

Liste de vérification avant soumission

  1. Testez tous les flux d'achat

    • Achetez chaque niveau de souscription
    • Testez les essais gratuits
    • Vérifiez que les offres d'introduction s'appliquent correctement
    • Testez la restauration des achats
    • Vérifiez que la partage de famille (si activé) fonctionne correctement
    • Testez sur plusieurs appareils
  2. Vérifiez la cohérence des tarifs

    • Vérifiez que les métadonnées de l'App Store correspondent aux prix affichés dans l'application
    • Vérifiez que tous les devises sont corrects
    • Confirmez que les durées des essais gratuits correspondent aux descriptions
    • Vérifiez que les termes des offres d'introduction sont exacts
  3. Révisez tous les textes

    • Supprimez le texte de remplacement
    • Vérifiez que les affirmations sont testables
    • Vérifiez la grammaire et l'orthographe
    • Assurez-vous que les descriptions correspondent à la dernière version
    • Supprimez les mentions des concurrents
  4. Testez les autorisations

    • Demander uniquement les autorisations nécessaires
    • Afficher des explications claires avant de demander
    • Tester les flux « Refuser » (l'application devrait toujours fonctionner)
    • Vérifier les descriptions de Info.plist sont claires
  5. Préparer un compte de test

    • Créer un compte de revue qui reste valide pendant la revue
    • Documenter les informations de connexion dans les informations de revue de l'application
    • Vérifier que le réviseur peut atteindre la barrière payante et terminer le flux de commande
    • Inclure des comptes supplémentaires ou des commutateurs spécifiques à l'application dans le champ Notes si nécessaire
  6. 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
    • La politique de confidentialité est remplie
    • Le classement d'âge correspond au contenu dans la build
    • La vidéo de prévisualisation de l'application (si elle existe) montre la version actuelle
    • La description décrit avec précision les fonctionnalités
    • La politique de confidentialité est accessible dans l'application et depuis la liste des applications
  7. Écrire des notes de révision détaillées

    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.

Ligne de temps de révision de l'App Store

Révision standard : 24-48 heures Époques de pointe : 3-5 jours (lancements de l'App Store pendant les vacances) Week-ends : Aucun avis traité Examen accéléré : Disponible pour les correctifs de bugs critiques (demande via App Store Connect)

États courants que vous verrez dans App Store Connect :

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

1. Clarté des abonnements

  • Comparaisons de plans de côté à côté requises
  • Aucun « schéma sombre » qui cache les options moins chères
  • Chemins de dégradation/upgrade clairs

2. Exactitude des métadonnées

  • Les captures d'écran doivent correspondre à la version du build en revue
  • Les captures d'écran iPad sont requises 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é des détails de la revue et confidentialité

  • Les déclarations de confidentialité doivent correspondre à ce que vos SDK collectent réellement
  • Les informations de contact et les notes de la revue de l'application doivent être complètes lors de la première soumission
  • Les informations de démo doivent rester valides pour toute la fenêtre de revue

4. Préparation de la soumission

  • Apple met à jour régulièrement les exigences minimales SDK, veuillez confirmer la date limite actuelle avant de télécharger une version de production
  • TestFlight est le lieu le plus sûr 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 »

Mettre en œuvre un traitement correct des erreurs

Section intitulée « Mettre en œuvre un traitement correct des erreurs »
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. Lisez attentivement le rejet

    • Notez la norme spécifique citée (par exemple, 3.1.1, 5.1.1)
    • Comprenez exactement ce que Apple a signalé
  2. Réparez soigneusement le problème

    • N'appliquez pas juste une solution - corrigez la cause profonde
    • Testez la correction de manière approfondie
    • Documentez les modifications apportées
  3. Répondez dans le Centre de résolution

    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. Résubmittez rapidement

    • Les résubmissions sont généralement examinées plus rapidement
    • Généralement dans les 24 heures

Procédure de clarification de l'App Store

__CAPGO_KEEP_0__

  1. Cliquez sur « Appelez » dans App Store Connect
  2. Fournissez des preuves claires :
    • Captures d'écran montrant le respect des normes
    • Références à des lignes directrices spécifiques
    • Explication de la manière dont vous respectez les exigences
  3. Soyez professionnel et factuel
  4. Incluez un compte de test si la fonctionnalité est difficile à trouver

Exemple de demande de documents

Si vous rencontrez toujours des problèmes :

Difficile de passer la revue de l'application ou besoin d'une assistance personnalisée ? Réservez un appel de consultation avec notre équipe pour un soutien dédié avec :

  • Révision et optimisation de l'implémentation de l'IAP
  • Préparation et stratégie de revue de l'App Store
  • Révision du checklist de soumission
  • Résolution de rejets et recours
  • Vérification complète et validation

Nos experts ont aidé avec succès des centaines d'applications à passer la revue !

Continuez à partir des lignes directrices de revue de l'App Store iOS pour l'IAP

Section intitulée « Continuez à partir des lignes directrices de la boutique iOS pour les achats en ligne »

Si vous utilisez Lignes directrices de la boutique iOS pour les achats en ligne pour planifier l'approbation et la distribution de la boutique, connectez-le avec Utilisation de @capgo/native-purchases pour la capacité native dans Utilisation de @capgo/native-purchases, @capgo/capacitor-examen-de-avis-en-ligne pour le détail d'implémentation dans @capgo/capacitor-examen-de-avis-en-ligne, Utilisation de @capgo/capacitor-examen-de-avis-en-ligne pour la capacité native dans Utilisation de @capgo/capacitor-examen-de-avis-en-ligne, @capgo/capacitor-marché-natif pour le détail d'implémentation dans @capgo/capacitor-marché-natif, et En utilisant @capgo/capacitor-native-market pour la capacité native dans En utilisant @capgo/capacitor-native-market.