Zum Inhalt springen

Richtlinien für iOS App Store Review für IAP

GitHub

Um eine App im App Store zu genehmigen, ist eine sorgfältige Beachtung der Richtlinien von Apple erforderlich, 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 bei Ihrer ersten Einreichung zu bestehen.

iOS-App-Store-Bewertungsprozess

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

  • Hinzufügen Datenschutzrichtlinien-URL in App Store Connect
  • Hinzufügen eines Support-URL eine, die zu realen Kontaktinformationen für Benutzer führt
  • Abschließen des Altersfreigabe-Befragung, damit die App veröffentlicht werden kann Hinzufügen
  • App-Review-Kontaktinformationen und klare Notizen des Rezensenten Wenn ein Login erforderlich ist, stellen Sie sicher, dass Sie __CAPGO_KEEP_0__
  • __CAPGO_KEEP_0__ Demo-Konto, das während der Überprüfung nicht abläuft
App-Store-Listeneintrag mit Richtlinien- und Support-Links
  • Verwenden Sie Screenshots aus dem aktuellen Build, das derzeit überprüft wird
  • Für iPhone ist 1290 x 2796 (6,7 Zoll) die einfachste Standardgröße
  • Wenn Ihre App auf iPad läuft, sollten Sie auch iPad-Screenshots hochladen
  • Zu den akzeptierten großen iPad-Größen gehören 2064 x 2752 __CAPGO_KEEP_0__ und __CAPGO_KEEP_1__ 2048 x 2732 __CAPGO_KEEP_0__-Zoll
  • Iphone-Bilder nicht auf iPad-Hintergrund aufweiten

TestFlight: Vorbereitung der Rezensionsreise simulieren

Abschnitt: "TestFlight: Vorbereitung der Rezensionsreise simulieren"

Die genaue Route, die Apple auf einem echten Gerät verfolgt: simulieren

  • Installieren Sie die neueste Version aus TestFlight
  • Mit dem Konto anmelden, das Sie zur Rezension bereitstellen möchten
  • Zugriff auf den Paywall ohne versteckte Gesten oder Debug-Menüs
  • Einkaufs-, Wiederherstellungs- und Abonnement-Flüsse überprüfen
  • Überprüfen Sie, ob die App korrekt funktioniert, wenn die Berechtigungen abgelehnt werden

Apple verlangt eine klare Preisoffenlegung vor jedem Kauf:

Pflichtelemente:

  • Zeige den genauen Preis vor dem Kaufknopf an
  • Zeige die Abrechnungshäufigkeit (z.B. „9,99 $/Monat“) an
  • Erkläre klar, was die Benutzer für ihr Geld bekommen
  • Anzeige, wann Gebühren anfallen

Häufige Ablehnung:

“Subscription pricing must be clear and upfront.”

Warnung Preisbeständigkeit Alle Preise müssen übereinstimmen:

  • 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.

Erforderliche Offenlegungen:

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

UI-Design-Tipps und Fauxpas

Zahlungssperre mit Wiederherstellung von Kaufleistungen und rechtlichen Links

Beispiel für eine konforme 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 Kaufleistungen 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>

Why es scheitert:

  • Die App stürzt beim Start ab
  • Der Kaufprozess 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 von Belegen funktioniert
  • Überprüfen Sie die Netzwerkfehlerbehandlung

Why es scheitert:

  • Bildschirmfotos zeigen Funktionen, die nicht im aktuellen Build enthalten sind
  • Beschreibung erwähnt Funktionen, die nicht existieren
  • Preise im Metadaten-Setzen unterscheiden sich von den im App-Preisen

Metadaten-Checkliste

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/Ort/ Gesundheitsdaten ohne Erklärung anfordern
  • Berechtigungsanfragen sind mehrere Bildschirme tief vergraben
  • Vage oder allgemeine Berechtigungsbeschreibungen

Vorbeugung:

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

Zustimmung zu Kopien, die für eine Überprüfung zu vage sind Zustimmung zu Kopien mit kläreren 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>

Warum es scheitert:

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

Beschreibung Richtlinien Beispiele

Zusätzliche Beschreibung Richtlinien

Verhütung:

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

Warum es scheitert:

  • Keine Erwähnung, wie man stornieren kann
  • Stornierungsbutton versteckt oder behindert
  • Mehrschrittiger Stornierungsprozess ohne Apple-Fließband

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. Wann 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 genau widerspiegeln:

  • Kaufhistorie-Sammlung
  • E-Mail-Adressen (für Rechnungen)
  • Geräte-IDs (für Betrugsverhinderung)
  • Nutzungsdaten (für Analysen)

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

Vor der Einreichung: Überprüfungsliste

  1. Alle Kaufflüsse testen

    • Jedes Abonnementstufe kaufen
    • Freitests durchführen
    • Überprüfen, ob Einführungsangebote korrekt angewendet werden
    • Wiederherstellungen von Kaufs testen
    • Überprüfen, ob Familienfreigabe (falls aktiviert) korrekt funktioniert
    • Auf mehreren Geräten testen
  2. Preisbeständigkeit überprüfen

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

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

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

    • Erstellen Sie ein Rezensionskonto, das während der Überprüfung gültig bleibt
    • Dokumentieren Sie die Anmeldeinformationen in der App-Bewertungsinformation
    • Überprüfen Sie, ob der Rezensent den 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 der aktuellen Benutzeroberfläche
    • Support-URL enthält reale Kontaktinformationen
    • URL der Datenschutzrichtlinie ist ausgefüllt
    • Alterseinstufung passt sich dem Inhalt in der Build an
    • App-Vorschau-Video (falls vorhanden) zeigt die aktuelle Version
    • Beschreibung beschreibt genaue Funktionen
    • Datenschutzrichtlinie ist in der App und im Store-Listing zugänglich
  7. Schreibe detaillierte Rezensionsnotizen

    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.

App Store Rezensions-Zeitlinie

Standard-Rezension: 24-48 Stunden Hochsaison: 3-5 Tage (App Store-Holiday-Releases) Wochenenden: Keine Bewertungen verarbeitet Expedierter Review: 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

  • Seitliche Plan-Vergleiche 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 live sein

3. Datenschutz und Qualität der Rezensionsdetails

  • 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 Rezensionszeit gültig bleiben

4. Einreichungsbereitschaft

  • 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

Best Practices für den Native Purchases Plugin

Abschnitt: Best Practices für den Native Purchases Plugin

Proper Error Handling umsetzen

Abschnitt: Proper Error Handling umsetzen
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.');
}
}
}

Laden Sie die Ladezustände an

Abschnitt: Laden Sie die Ladezustände an
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>
);
}

Zeigen Sie die Bedingungen klar an

Abschnitt: Zeigen Sie die Bedingungen klar an
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) beachten
    • Genau verstehen, was Apple beanstandet hat
  2. Den Fehler gründlich beheben

    • Nicht nur ein Pflaster auftragen – den Ursachenanker 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. Sofort wieder einreichen

    • Wiederholte Einreichungen werden in der Regel schneller geprüft
    • In der Regel 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. Bieten Sie klare Beweise an:
    • Bildschirmfotos, die die Einhaltung zeigen
    • Referenzen zu spezifischen Richtlinien
    • Erklärung, wie Sie die Anforderungen erfüllen
  3. Seien Sie professionell und faktenbasiert
  4. Einbeziehen Sie ein Testkonto, wenn die Funktion schwer zu finden ist

Beispiel für Anforderung von Dokumenten

Wenn Sie noch immer Probleme haben:

Kämpfen Sie mit der App-Bewertung oder benötigen Sie persönliche Unterstützung? Buchen Sie eine Beratungsveranstaltung mit unserem Team für umfassenden Support 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 hunderte von Apps erfolgreich durch die Bewertung gebracht!

Wenn Sie iOS App Store Review Guidelines für IAP verwenden für die Genehmigung und Verteilung im App Store zu planen, verbinden Sie es mit Mit @capgo/native-purchases für die native Funktion in Mit @capgo/native-purchases, @capgo/capacitor-in-app-Bewertung für die Implementierungsdetail in @capgo/capacitor-in-app-Bewertung, Mit @capgo/capacitor-in-app-Bewertung für die native Funktion in Mit @capgo/capacitor-in-app-Bewertung, @capgo/capacitor-native-Markt für die Implementierungsdetail in @capgo/capacitor-native-Markt, und Mit @capgo/capacitor-native-Markt für die native Funktion in Mit @capgo/capacitor-native-Markt.