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. Diese Anleitung deckt alles ab, was Sie wissen müssen, um die Überprüfung auf Ihrer ersten Einreichung zu bestehen.

iOS-App-Store-Bewertungsprozess

Bevor Apple Ihre Kaufablaufprüfung durchführt, stellen Sie sicher, dass das App-Record selbst vollständig ist:

  • Ein Daten schutzrichtlinien URL im App Store Connect
  • Hinzufügen Support URL eine URL, die zu echten Kontaktinformationen für Benutzer führt
  • Abschließen Alterseinstufung context: Seite/ Bereich: Lösungsseite App-Beispiele Abschnitt. Rolle: Kurzer UI-Label oder Navigationselement. Gesehen in: Komponenten Lösung/ SolutionAppExample.astro. Nachrichten Schlüssel `solution_app_examples_rating` (Lösung App Beispiele Bewertung).
  • Fragebogen abschließen, damit die App veröffentlicht werden kann Hinzufügen App-Bewertungskontaktinformationen
  • und klare Notizen des Rezensenten Demo-Konto, das während der Überprüfung nicht abläuft
App-Store-Listeneinstellungen mit Richtlinien- und Support-Links
  • Verwenden Sie die aktuellen Bilder aus dem tatsächlichen Build, der derzeit überprüft wird
  • Für iPhone 1290 x 2796 (6,7 Zoll) ist die einfachste Standardgröße
  • Wenn Ihre App auf iPad läuft, sollten Sie auch iPad-Bilder hochladen
  • Die aktuellen akzeptierten großen iPad-Größen umfassen 2064 x 2752 (13-Zoll) und 2048 x 2732 (12,9-Zoll)
  • Strecke iPhone-Bildschirme nie auf, 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 nach, 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:

Must-Have-Elemente:

  • Zeige den genauen Preis vor dem Kaufknopf an
  • Zeige die Abrechnungsfrist (z.B. „9,99 €/Monat“) an
  • Erkläre klar, was sich die Nutzer für ihr Geld leisten können
  • Zeige an, wann Abrechnungen erfolgen

Gemeinsame 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

Even a $1 discrepancy between store listing ($4.99) and app ($5.99) will trigger automatic rejection.

Zwingende Offenlegungen:

  • Alle verfügbaren Abonnementstufen werden gemeinsam angezeigt
  • Eindeutige 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 Kaufleistungen 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, um Benutzern die Wiederherstellung vorheriger Kaufleistungen ohne Unterstützung zu ermöglichen.

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 Abonnement-Flüsse von Anfang bis Ende
  • Überprüfen Sie, ob die Erhaltung der Bezahlbestätigung funktioniert
  • Überprüfen Sie die Netzwerkfehlerbehandlung

Warum es scheitert:

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

Metadaten-Übersicht

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

Warum es scheitert:

  • Kamera/Ortungs-/Gesundheitszugriff ohne Erklärung anfordern
  • Berechtigungsanfragen in mehreren Bildschirmen tief vergraben
  • Vage oder allgemeine Berechtigungsbeschreibungen

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 Dringlichkeits-Taktiken („Nur noch 2 Plätze frei!“)

Beschreibungshinweise Beispiele

Zusätzliche Beschreibungshinweise

Vermeidung:

  • Seien Sie in Beschreibungen spezifisch und tatsächlich
  • Vermeiden Sie Superlativen ohne Beweise
  • Drängen Sie Benutzer nicht mit fiktiver Knappheit

Weshalb es scheitert:

  • Keine Erwähnung der Stornierungsanleitung
  • Stornierungsbutton versteckt oder behindert
  • Multi-Schritt-Stornierungsprozess ohne Apples nativen Flow

Vorbeugung:

// 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/geshared 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 Betrugsverhinderung)
  • Verwendungsdaten (für Analysen)

Unzutreffende Datenschutzetiketten sind ein häufiger Ablehnungsgrund im Jahr 2025. Überprüfen Sie Ihre Datensammlung sorgfältig.

Überprüfungscheckliste vor der Einreichung

  1. Alle Kaufströme testen

    • Jedes Abonnementstufe kaufen
    • Freitriale testen
    • Einleitungsangebote korrekt überprüfen
    • Wiederherstellungen von Kaufs testen
    • Familienfreundliche Funktion (falls 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 dem aktuellen Build 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
    • 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 Kaufprozess abschließen kann
    • Fügen Sie zusätzliche Konten oder App-spezifische Schalter in der Anmerkungsfeld, wenn erforderlich
  6. Überprüfen Sie die Metadaten

    • Bildschirme passen sich der aktuellen Benutzeroberfläche an
    • Die Support-URL enthält echte Kontaktinformationen
    • Die Datenschutzrichtlinien-URL ist ausgefüllt
    • Die Altersstufe passt sich dem Inhalt im Build an
    • Die App-Vorschau-Video (falls vorhanden) zeigt die aktuelle Version
    • Beschreibung beschreibt genau die Funktionen
    • Die Datenschutzrichtlinie ist in der App und im Laden einsehbar
  7. Schreiben Sie detaillierte Notizen zum Review

    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 App-Store-Reviews

Standard-Review: 24-48 Stunden Hochbetriebstage: 3-5 Tage (Veröffentlichungen von App-Store-Holiday) Wochenenden: No Reviews verarbeitet wurden Expedierte 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. Abonnementklarheit

  • Seitenseitige Vergleichsplanungen erforderlich
  • Keine ' dunklen Muster', die günstigere Optionen verbergen
  • Klare Ab- und Aufstiegswege

2. Metadatengenauigkeit

  • 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. Datenschutz und Qualität der Bewertungsdetails

  • Die Datenschutzmitteilungen müssen den tatsächlich von Ihren SDKs gesammelten Daten entsprechen
  • Die App-Bewertungs-Kontaktinformationen und -Anmerkungen sollten auf der ersten Einreichung vollständig sein
  • Die Demo-Anmeldeinformationen müssen während der gesamten Bewertungszeit 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 – die Ursache beseitigen
    • 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. Erneut schnell einreichen

    • Die Wiederinserbungen werden in der Regel schneller geprüft
    • 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 zeigen
    • 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 Anforderung von Dokumenten

Unterstützung

Unterstützung

Wenn Sie weiterhin Probleme haben:

Benötigen Sie Fachexperten?

Benötigen Sie Fachexperten?

Sorgen Sie sich um die Bewertung Ihrer App oder benötigen Sie persönliche Unterstützung? Buchen Sie eine Beratungsruf mit unserem Team für eine dedizierte Unterstützung mit:

  • Überprüfung und Optimierung der IAP-Implementierung
  • Vorbereitung und Strategie für die App-Store-Bewertung
  • Überprüfung des Einreichungschecklisten
  • Auflösung von Ablehnungen und Beschwerden
  • Vollständige Testung und Validierung

Unsere Experten haben bereits erfolgreich Hunderte von Apps durch die Bewertung gebracht!

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