Zum Inhalt springen

Erstellen Sie eine iOS-Abonnementgruppe

GitHub

Abonnementgruppen sind für die Organisation und Verwaltung mehrerer Abonnementebenen in Ihrer iOS-Anwendung unerlässlich. Um die Funktionalität zur Implementierung von Upgrade, Downgrade und Crossgrade zu verstehen, ist es entscheidend, wie sie funktionieren.

Ein Abonnementgruppe ist eine Sammlung verwandter Abonnements, zwischen denen sich die Benutzer wählen können. Die Benutzer können nur ein Abonnement innerhalb einer Gruppe gleichzeitig abonnieren. Wenn sie das Abonnement wechseln, übernimmt Apple die Übergabe automatisch.

Abonnement-Gruppen ermöglichen:

  • Stufengerechte Preise: Grundlegende, Premium- und Ultimate-Pläne anbieten
  • Differente Laufzeiten: Monatliche, jährliche und lebenslange Optionen
  • Upgrade-/Downgrade-Logik: Automatisches Handling von Abonnement-Änderungen
  • Einfache Verwaltung: Gruppieren Sie verwandte Abonnements

Innerhalb einer Gruppe sollte jeder Abonnementrang von höchster Wert (Ebene 1) bis niedrigster Wert gerankt werden. Diese Rangfolge bestimmt, wie Abonnement-Änderungen klassifiziert werden:

Abonnement-Gruppen-Hierarchie

Level 1 (Höchster Wert)

  • Premium-Jahresabonnement (99,99 €/Jahr)
  • Ultimatives Monatsabonnement (19,99 €/Monat)

Level 2 (Mittlerer Wert)

  • Standard-Jahresabonnement (49,99 €/Jahr)
  • Premium-Monatsabonnement (9,99 €/Monat)

Level 3 (Niedrigster Wert)

  • Grundlegende jährliche Abonnement (29,99 €/Jahr)
  • Standardmonatliches Abonnement (4,99 €/Monat)

Apple handhabt drei Arten von Abonnementänderungen automatisch, basierend auf der Rangfolge der Abonnementebenen:

Auf ein höheres Abonnement (z.B. Ebene 2 → Ebene 1).

Verhalten:

  • Wird wirksam sogleich
  • Der Benutzer erhält eine anteilige Rückerstattung für die verbleibende Zeit
  • Die neue Abonnement beginnt sofort

Beispiel:

// User currently has: Standard Monthly (Level 2)
// User upgrades to: Premium Annual (Level 1)
// Result: Immediate access to Premium, refund for unused Standard time

Wechsel zu einer unteren Ebene Abonnement (z.B. Level 1 → Level 2).

Verhalten:

  • Wirksamkeit ab nächster Rennovierungsdatum
  • Benutzer behält aktuelles Abonnement bis zum Ende der Laufzeit bei
  • Neues Abonnement startet automatisch nach Ablauf

Beispiel:

// User currently has: Premium Annual (Level 1)
// User downgrades to: Standard Monthly (Level 2)
// Result: Premium access continues until annual renewal date, then switches

Umschalten auf ein anderes Abonnement auf derselben Ebene.

Verhalten hängt von der Dauer ab:

Verschiedene Dauer → Verhält sich wie heruntergradieren

  • Wirkt sich am nächsten Erneuerungsdatum aus
  • Beispiel: Monatliches Premium (Level 1) → Jährliches Premium (Level 1)

Selbe Dauer → Verhält sich wie aufbauen

  • Wirkt sich sofort aus
  • Beispiel: Premium Monatlich (Level 1) → Ultimate Monatlich (Level 1)
  1. Navigieren Sie zu Abonnements

    In App Store Connect wählen Sie Ihr App und gehen Sie zu Monetarisieren > Abonnements.

  2. Gruppe erstellen

    Klicken Sie + nächstes zu “Abonnementgruppen” um eine neue Gruppe zu erstellen.

  3. Gruppenname

    Wählen Sie einen beschreibenden Namen, der die darin enthaltenen Abonnements widerspiegelt:

    • “Premium-Zugang”
    • “Cloud-Speicherkonzepte”
    • “Pro-Funktionen”
  4. Zusätzliche Abonnements hinzufügen

    Nachdem Sie die Gruppe erstellt haben, fügen Sie individuelle Abonnements hinzu. Jedes Abonnement wird eine Rangfolge haben.

  5. Rangfolgen für Abonnements einstellen

    Ordne Abonnements von höchster (1) bis niedrigster Wert an. Beachte:

    • Jährliche Pläne rangieren höher als monatliche
    • Höherpreisige Ebenen stehen über niedrigerpreisigen
    • Ultimative/Premium-Ebenen rangieren am höchsten

Der native-purchases-Plugin verwaltet die Abonnementgruppenlogik automatisch:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Fetch all subscriptions in a group
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['premium_monthly', 'premium_annual', 'ultimate_monthly'],
productType: PURCHASE_TYPE.SUBS,
});
// Display current subscription using StoreKit transactions
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const activeSubs = purchases.filter((purchase) => purchase.isActive);
// Detect pending downgrade/cancellation (StoreKit sets willCancel === true)
const pendingChange = purchases.find((purchase) => purchase.willCancel === true);
if (pendingChange) {
console.log('Subscription will stop auto-renewing on', pendingChange.expirationDate);
}
// Purchase (StoreKit handles upgrades/downgrades automatically)
await NativePurchases.purchaseProduct({
productIdentifier: 'premium_annual',
productType: PURCHASE_TYPE.SUBS,
});
// Listen for StoreKit updates (fires on upgrades/downgrades/refunds)
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription updated:', transaction);
});
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
// Get current subscription info
const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
const currentSubscription = purchases.find(
(purchase) => purchase.subscriptionState === 'subscribed',
);
if (currentSubscription) {
// StoreKit reports if user cancelled auto-renew
if (currentSubscription.willCancel) {
console.log(
`User cancelled. Access remains until ${currentSubscription.expirationDate}`,
);
}
if (currentSubscription.isUpgraded) {
console.log('User recently upgraded to this plan.');
}
}
// Listen for automatic upgrades/downgrades
NativePurchases.addListener('transactionUpdated', (transaction) => {
console.log('Subscription changed!', transaction);
if (transaction.subscriptionState === 'revoked') {
revokeAccess();
} else if (transaction.isActive) {
unlockPremiumFeatures();
}
});

Kommunizieren Sie die Änderung des Verhaltens immer klar:

Bei Upgrade:

„Sie erhalten sofortigen Zugriff auf Premium-Funktionen. Wir berechnen Ihre aktuelle Abonnementraten.“

Bei Downgrade:

„Sie behalten den Zugriff auf Premium-Funktionen bis [Renewal-Datum], dann wechseln Sie auf Standard.“

Bei Crossgrade:

“Ihre Abonnementpläne werden bei der nächsten Verlängerung auf jährliche Abrechnung umgestellt.”

Verwenden Sie Apples App Store Server Notifications v2 oder Ihren eigenen Receipt-Validierungsserver, um Änderungen in StoreKit in Ihrer Datenbank zu spiegeln. Paaren Sie Serverbenachrichtigungen mit dem transactionUpdated Hören Sie so, dass sowohl Client als auch Backend synchron bleiben.

  • Halten Sie verwandte Abonnements in derselben Gruppe
  • Mischen Sie keine unabhängigen Funktionen (z.B. Speicher und Werbungserlösung)
  • Erstellen Sie separate Gruppen für verschiedene Funktionssets
  • Jahrespläne → Höherer Stufe als monatlich (für gleiche Ebene)
  • Höherpreisige Ebenen → Höherer Stufe
  • Betrachten Sie den Wert, nicht nur den Preis
  • Zeige aktuelle Abonnement klar an
  • Zeigen Sie alle verfügbaren Optionen in der Gruppe an
  • Zeigen Sie an, welche Änderungen sofort vs. bei der Verlängerung erfolgen.
  • Einfache Wechsel zwischen Tarifen ermöglichen
  • Alle Upgrade-Szenarien testen
  • Alle Downgrade-Szenarien testen
  • Verifiziere das Verhalten bei Crossgrade
  • Überprüfe das Auslösen von Webhooks
Level 1: Ultimate Monthly ($19.99)
Level 2: Premium Monthly ($9.99)
Level 3: Basic Monthly ($4.99)
  • Basic → Premium: Upgrade (unverzüglich)
  • Premium → Ultimate: Upgrade (unverzüglich)
  • Ultimativ → Premium: Downgraden (bei Erneuerung)
  • Basic → Ultimativ: Upgrade (unverzüglich)
Level 1: Premium Annual ($99.99/year)
Level 2: Premium Monthly ($9.99/month)
  • Monatlich → Jahres: Crossgrade (bei Erneuerung)
  • Jährlich → Monatlich: Downgraden (bei Erneuerung)
Level 1: Ultimate Annual ($199/year)
Level 2: Ultimate Monthly ($19.99/month)
Level 3: Premium Annual ($99/year)
Level 4: Premium Monthly ($9.99/month)
Level 5: Basic Annual ($49/year)
Level 6: Basic Monthly ($4.99/month)

Diese Konfiguration bietet maximale Flexibilität, während die Upgrade- und Downgradelogik klar bleibt.

Abonnement erscheint nicht in der Gruppe:

  • Überprüfen Sie, ob es der richtigen Gruppe zugewiesen ist
  • Check that it’s in at least “Ready to Submit” status
  • Stellen Sie sicher, dass die Produkt-ID korrekt ist

Falsches Upgrade-/Downgrade-Verhalten:

  • Bewertungsstufen (1 = höchste)
  • Überprüfen Sie, ob die Abonnementebenen Sinn ergeben
  • Check that levels are set correctly

Produkte aus verschiedenen Gruppen:

  • Benutzer können gleichzeitig mehrere Gruppen abonnieren
  • Dies ist beabsichtigt – Halten Sie verwandte Produkte in derselben Gruppe

getActiveProducts zeigt mehrere Abonnements an:

  • Überprüfen Sie, ob die Abonnements in verschiedenen Gruppen sind
  • Überprüfen Sie, ob der Benutzer über Family Sharing abonniert ist
  • Überprüfen Sie den Abonnementstatus in App Store Connect

Zur weiteren Information beziehen Sie sich auf die offizielle Apple-Dokumentation zu Abonnementgruppen.

Fahren Sie mit der Erstellung einer iOS-Abonnementgruppe fort

Abschnitt mit dem Titel „Fahren Sie mit der Erstellung einer iOS-Abonnementgruppe fort“

Wenn Sie die Erstellung einer iOS-Abonnementgruppe verwenden um die Lagergenehmigung und -verteilung zu planen, verbinden Sie es mit Mit @capgo/native-purchases für die native Fähigkeit in Mit @capgo/native-purchases @capgo/capacitor-In-App-Bewertung für die Implementierungsdetails in @capgo/capacitor-In-App-Bewertung, Verwendung von @capgo/capacitor-In-App-Bewertung für die Implementierungsdetail in @capgo/capacitor-native-market, und Mit @capgo/capacitor-native-market für die native Fähigkeit in Mit @capgo/capacitor-native-market Verwendung von @capgo/capacitor-native-market für die native Fähigkeit in Verwendung von @capgo/capacitor-native-market.