Zum Inhalt springen

iOS App Store Review Richtlinien für IAP

GitHub

Um Ihr App auf dem App Store zu genehmigen, erfordert es sorgfältige Aufmerksamkeit der Richtlinien von Apple, insbesondere bei der Implementierung von In-App-Käufen und Abonnements. Dieser Leitfaden deckt alles ab, was Sie wissen müssen, um die Überprüfung auf Ihrer ersten Einreichung zu bestehen.

iOS-App-Store-Bewertungsprozess

Bevor Apple Ihren Kaufprozess überprüft, stellen Sie sicher, dass das App-Record selbst vollständig ist:

  • Ein Datenschutzrichtlinien-URL in App Store Connect
  • Hinzufügen eines Support-URL eine URL, die zu echten Kontaktinformationen für Benutzer führt
  • Das Fragebogen so abschließen, dass die App veröffentlicht werden kann Hinzufügen App-Bewertungs-Kontaktinformationen
  • und klare Notizen des Rezensenten Wenn ein Login erforderlich ist, stellen Sie sicher, dass Sie eine __CAPGO_KEEP_0__
  • eine __CAPGO_KEEP_0__ __CAPGO_KEEP_0__
App Store-Liste mit Richtlinien- und Support-Links
  • Verwenden Sie Screenshots aus dem aktuellen Build, das derzeit unter Review steht
  • Für iPhone ist die Größe (6,7 Zoll) die einfachste Standardgröße 1290 x 2796 Wenn Ihre App auf iPad läuft, sollten Sie auch iPad-Screenshots hochladen
  • Die aktuellen akzeptierten großen iPad-Größen umfassen
  • protectedTokens 2064 x 2752 (13-Zoll) und 2048 x 2732 (12,9-Zoll)
  • Strecke keine iPhone-Bildschirme, um eine iPad-Unterstützung vorzutäuschen

Durchführen Sie einen Trockenlauf durch die Rezensionsreise in TestFlight

Abschnitt mit dem Titel “Durchführen Sie einen Trockenlauf durch die Rezensionsreise in TestFlight”

Führen Sie den genauen Weg durch, den Apple auf einem realen Gerät verfolgt:

  • Installieren Sie die neueste Version aus TestFlight
  • Melden Sie sich mit dem Rezensionskonto an, das Sie bereitstellen möchten
  • Erreichen Sie die Paywall ohne versteckte Gesten oder Debug-Menüs
  • Abschließen Sie die Kauf-, Wiederherstellungs- und Abonnement-Flüsse
  • Überprüfen Sie, ob die App korrekt verhält, wenn die Berechtigungen verweigert werden

Apple verlangt eine klare Preisoffenlegung vor jedem Kauf:

Pflichtelemente:

  • Zeigen Sie den genauen Preis vor dem Kaufknopf an
  • Zeigen Sie die Abrechnungshäufigkeit (z. B. „9,99 €/Monat“) an
  • Stellen Sie klar, was die Benutzer für ihr Geld erhalten
  • Anzeigen Sie, wann Gebühren anfallen

Häufige Ablehnung:

„Die Abonnementpreise müssen klar und unmittelbar sein.”

:::Vorsicht Preis-Konsistenz Alle Preise müssen übereinstimmen mit:

  • App Store-Metadaten-Liste
  • In-App-Kaufschirme
  • Abonnementsverwaltungsschirme

Ein Betrag von nur 1 $ zwischen der Ladenliste (4,99 $) und der App (5,99 $) wird automatisch zur Ablehnung führen.

Erforderliche Offenlegungen:

  • Alle verfügbaren Abonnementebenen werden gemeinsam angezeigt
  • Klare Vergleichbarkeit der Funktionen pro Ebene
  • Keine automatische Zuweisung zu Premium-Ebenen durch UI- Tricks
  • Einfache, leicht zu lokalisierende Anweisungen zur Kündigung

UI-Design-Tipps und Fauxpas

Bezahlbarkeit mit Wiederherstellung von Kaufs und rechtlichen Links

Beispiel für eine einvernehmliche Benutzeroberfläche:

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

Erforderliche Implementierung:

Jedes App mit IAP muss eine Möglichkeit bieten, damit Benutzer ihre vorherigen Käufe ohne Unterstützung wiederherstellen können.

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>

Warum es scheitert:

  • Die App stürzt beim Start ab
  • Der Kauffluss schlägt fehl
  • Die in den Screenshots gezeigten Funktionen funktionieren nicht

Prävention:

  • Testen Sie die App auf echten Geräten (nicht nur auf Simulatoren)
  • Testen Sie alle Abonnements-Flüsse von Anfang bis Ende
  • Überprüfen Sie, ob die Erhaltung der Belege funktioniert
  • Überprüfen Sie die Netzwerkfehlerbehandlung

Warum es scheitert:

  • Bildschirme zeigen Funktionen, die nicht im aktuellen Build enthalten sind
  • Beschreibung erwähnt Funktionen, die nicht existieren
  • Preise in den Metadaten stimmen nicht mit den In-App-Preisen überein

Metadaten-Checkliste

Verhütung:

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

Warum es scheitert:

  • Kamera/Standort/Gesundheitszugriff ohne Erklärung anfordern
  • Erlaubnisanfragen in mehreren Bildschirmen tief vergraben
  • Vage oder allgemeine Erlaubnisbeschreibungen

Prävention:

Aktualisieren Sie Ihre Info.plist mit klaren Erklärungen:

Erlaubnis-Kopie, die für die Überprüfung zu vage ist Erlaubnis-Kopie mit klaren Erklärungen
<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>

Weshalb es scheitert:

  • Behauptungen wie „Nummer 1-App in der Welt“ ohne Beweise
  • „Unbegrenzte“ Funktionen mit versteckten Grenzen
  • Falsche Dringlichkeitstaktiken („Nur noch 2 Plätze frei!“)

Beschreibungshinweise Beispiele

Zusätzliche Beschreibungshinweise

Vermeidung:

  • Beschreibungen spezifisch und faktenbasiert halten
  • Vermeide Superlativen ohne Beweise
  • Dränge die Benutzer nicht mit fiktiver Knappheit

Warum es scheitert:

  • Keine Erwähnung der Stornierung
  • Stornierungsknopf versteckt oder behindert
  • Mehrschrittiger Stornierungsprozess ohne Apples nativen Flow

Verhütung:

// 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 hat die Datenschutzanforderungen 2025 erheblich verschärft.

Für jede Berechtigung:

  1. Warum Sie es benötigen (spezifischer Einsatzfall)
  2. Wenn es verwendet wird
  3. Wie Daten gespeichert/geschützt werden
  4. Ob es optional oder erforderlich ist
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';
}

Stellen Sie sicher, dass Ihre App-Store-Datenschutzetiketten genau folgende Informationen widerspiegeln:

  • Kaufhistorie-Sammlung
  • E-Mail-Adressen (für Rechnungen)
  • Geräte-IDs (für Betrugsprävention)
  • Verwendungsdaten (für Analysen)

Unzutreffende Datenschutzetiketten sind eine häufige Ablehnungsgrundlage im Jahr 2025. Überprüfen Sie Ihre Datensammlung sorgfältig.

Überprüfungsliste vor der Einreichung

  1. Alle Kaufströme testen

    • Jedes Abonnementstiefe kaufen
    • Freitriale testen
    • Einführende Angebote korrekt anwenden
    • Wiederherstellungen von Kaufs testen
    • Familienfreundliche Funktion (wenn aktiviert) überprüfen
    • Auf mehreren Geräten testen
  2. Preisgleichheit überprüfen

    • App-Store-Metadaten mit In-App-Preisen abgleichen
    • Alle Währungen sind korrekt
    • Bestätigen Sie, dass die Dauer der kostenlosen Testversion den Beschreibungen entspricht
    • Überprüfen Sie, ob die Bedingungen für die Einführungsangebote genau sind
  3. Überprüfen Sie alle Kopien

    • Entfernen Sie Platzhaltertext
    • Überprüfen Sie, ob die Behauptungen getestet werden können
    • Überprüfen Sie Grammatik und Rechtschreibung
    • Stellen Sie sicher, dass die Beschreibungen der aktuellen Version entsprechen
    • Entfernen Sie Erwähnungen von Konkurrenten
  4. Testen Sie Berechtigungen

    • Bitten Sie nur notwendige Berechtigungen an
    • Zeigen Sie klare Erklärungen vor der Anfrage an
    • Testen Sie die 'Ablehnen'-Flüsse (die App sollte weiterhin funktionieren)
    • Überprüfen Sie die Beschreibungen in Info.plist
  5. Vorbereiten Sie ein Testkonto

    • Erstellen Sie ein Bewertungskonto, das während der Überprüfung gültig bleibt
    • Dokumentieren Sie die Anmeldeinformationen in der App-Bewertungsinformation
    • Überprüfen Sie, ob der Rezensent die Paywall erreichen und den Kauffluss abschließen kann
    • Fügen Sie zusätzliche Konten oder App-spezifische Schalter in der Anmerkungsfeld auf, wenn erforderlich
  6. Überprüfen Sie die Metadaten

    • Bildschirme passen der aktuellen Benutzeroberfläche
    • Support-URL enthält echte Kontaktinformationen
    • URL der Datenschutzrichtlinie ist ausgefüllt
    • Die Altersfreigabe entspricht dem Inhalt im Build
    • App-Vorschau-Video (falls vorhanden) zeigt die aktuelle Version
    • Beschreibung beschreibt genaue Funktionen
    • Datenschutzrichtlinie ist in der App und im Laden einsehbar
  7. Schreiben Sie detaillierte Notizen für die Bewertung

    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.

Zeitplan für die Bewertung im App Store

Standard-Bewertung: 24-48 Stunden Hochbetriebstage: 3-5 Tage (Veröffentlichungen von App Store-Holiday-Apps) Wochenenden: Keine Bewertungen verarbeitet Beschleunigte Bewertung: Verfügbar für kritische Fehlerbehebungen (Anfrage über App Store Connect)

Gemeinsame Status, die Sie in App Store Connect sehen werden:

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

1. Klarheit bei Abonnements

  • Seitlich angezeigte Vergleichspläne erforderlich
  • Keine 'dunklen Muster', die günstigere Optionen verbergen
  • Klare Abstiegs- und Aufstiegswege

2. Genauigkeit der Metadaten

  • Die Screenshots müssen dem zu überprüfenden Build entsprechen
  • iPad-Screenshots sind erforderlich, wenn iPad-Unterstützung aktiviert ist
  • Die Support-URL und die Datenschutzrichtlinie sollten bereits vor der Einreichung aktiv sein

3. Privatsphäre und Qualität der Review-Detail

  • Die Privatsphäreerklärungen müssen den tatsächlich von den SDKs gesammelten Daten entsprechen
  • Die App-Review-Kontaktinformationen und -Anmerkungen sollten auf der ersten Einreichung vollständig sein
  • Die Demo-Anmeldeinformationen müssen während der gesamten Review-Frist gültig bleiben

4. Einreichereife

  • Apple updates minimum SDK requirements regularly, so confirm the current deadline before uploading a release build
  • TestFlight ist der sichere Ort, um die genaue Rezensionsroute vor der Einreichung zu überprüfen
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. Die Ablehnung sorgfältig lesen

    • Den spezifischen Richtlinienverweis (z. B. 3.1.1, 5.1.1) festhalten
    • Genau wissen, was Apple beanstandet hat
  2. Den Fehler gründlich beheben

    • Nicht nur ein Pflaster anbringen – den Grundursache beheben
    • Den Fix ausgiebig testen
    • Dokumentieren, was Sie geändert haben
  3. Antwort im Resolution Center

    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. Wieder einreichen, sobald möglich

    • Wiederinreichungen werden in der Regel schneller bearbeitet
    • Häufig innerhalb von 24 Stunden

Wenn Sie glauben, dass die Ablehnung falsch ist:

App Store-Klarstellungsverfahren

  1. Klicken Sie auf „Berufung“ in App Store Connect
  2. Stellen Sie eindeutige Beweise vor:
    • Screenshots, die die Einhaltung nachweisen
    • Verweise auf spezifische Richtlinien
    • Erklärung, wie Sie die Anforderungen erfüllen
  3. Seien Sie professionell und faktenbasiert
  4. Beifügen Sie ein Testkonto, wenn die Funktion schwer zu finden ist

Beispiel für eine Dokumentenanfrage

Unterstützung

Unterstützung

Unterstützung

Brauchen Sie Fachexperten-Hilfe?

Unterstützung

Benötigen Sie Fachexperten-Hilfe? Ein Beratungstermin buchen mit unserem Team zur Unterstützung mit:

  • IAP-Implementierungsbewertung und -Optimierung
  • Vorbereitung und Strategie für die App-Store-Bewertung
  • Überprüfung des Einreichungschecklisten
  • Rejektionsbeilegung und Beschwerdeverfahren
  • Komplettprüfung und -validierung

Unsere Experten haben bereits erfolgreich Hunderte von Apps zur Zulassung gebracht!

Wenn Sie iOS App Store Review Guidelines für IAP verwenden für die Planung der Genehmigung und Verteilung im App Store, verbinden Sie es mit Verwenden Sie @capgo/native-purchases für die native Fähigkeit in Verwenden Sie @capgo/native-purchases für die Implementierungsdetail in @capgo/capacitor-in-app-review Verwenden Sie @capgo/capacitor-in-app-review für die native Fähigkeit in Verwenden Sie @capgo/capacitor-in-app-review für die Implementierungsdetail in @capgo/capacitor-native-market, und Verwenden Sie @capgo/capacitor-native-market für die native Fähigkeit in Verwenden Sie @capgo/capacitor-native-market Using @capgo/capacitor-native-market for the native capability in Using @capgo/capacitor-native-market.