Zum Inhalt springen

Erstellen Sie eine iOS-Abonnementgruppe

GitHub

Subscription-Gruppen sind für die Organisation und Verwaltung mehrerer Abonnementebenen in Ihrer iOS-Anwendung unerlässlich. Ein Verständnis ihrer Funktionsweise ist für die Implementierung von Upgrade-, Downgrade- und Crossgrade-Funktionen entscheidend.

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 ändern, übernimmt Apple die automatische Übergabe.

Abonnementgruppen ermöglichen:

  • Stufenbezogene Preise: Grundlegende, Premium- und Ultimate-Pläne anbieten
  • Verschiedene Laufzeiten: Monatlich, jährlich und lebenslang
  • Upgrade/Downgradelogik: Automatische Verwaltung von Abonnementänderungen
  • Einfache Verwaltung: Gruppieren Sie verwandte Abonnements zusammen

Innerhalb einer Gruppe sollten jedes Abonnement nach Wertigkeit von höchster (Ebene 1) bis niedrigster Wertigkeit rangiert werden. Diese Rangordnung bestimmt, wie Abonnementänderungen klassifiziert werden:

Abonnementgruppenhierarchie

Ebene 1 Höchster Wert

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

Niveau 2 (Mittlerer Wert)

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

Niveau 3 (Niedrigster Wert)

  • Basic-Jahresabonnement (29,99 €/Jahr)
  • Standard-Monatsabonnement (4,99 €/Monat)

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

Zum höheren Tarifstufe wechseln (z. B. Level 2 → Level 1).

Verhalten:

  • Wirkt sofort Benutzer erhält
  • anteiligen Rückerstattung __CAPGO_KEEP_0__ 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 einem unteren Tarif Abonnement (z.B. Level 1 → Level 2).

Verhalten:

  • Wirkt ab dem nächsten Erneuerungsdatum
  • Der Benutzer hält die aktuelle Abonnement bis zum Ende der Laufzeit aufrecht
  • Das neue Abonnement beginnt 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

Wechseln Sie zu einem anderen Abonnement auf demselben Ebeneniveau.

Das Verhalten hängt von der Laufzeit ab:

Andere Laufzeit → Verhält sich wie eine Downgrade

  • Wirksam bei der nächsten Erneuerungsdatum
  • Beispiel: Monatlich Premium (Level 1) → Jahres Premium (Level 1)

Selbe Laufzeit → Verhält sich wie upgrade

  • Wirksam sofort
  • 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 "Monetize > Abonnements" Wirklich sofort.

  2. Gruppe erstellen

    Klicken + Klicken Sie auf "Abonnementgruppen" , um eine neue Gruppe zu erstellen.

  3. Gruppe benennen

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

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

    Nach der Erstellung der Gruppe fügen Sie einzelne Abonnements hinzu. Jedes Abonnement erhält eine Rangstufe.

  5. Rangstufen festlegen

    Ordnen Sie die Abonnements von höchster Wertigkeit (1) bis zur niedrigsten Wertigkeit an. Überlegen Sie sich:

    • Jährliche Pläne rangieren typischerweise höher als monatliche
    • Höherpreisige Ebenen rangieren über niedrigerpreisige
    • Ultimate/ Premium-Ebenen rangieren höchst

Der native-purchases-Plugin verwaltet die Abonnement-Gruppen-Logik 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();
}
});

Benutzerkommunikation

Sektion: Benutzerkommunikation

Kommunizieren Sie das Änderungsverhalten immer klar:

Für Upgrades:

"Sie erhalten sofort Zugriff auf Premium-Funktionen. Wir berechnen Ihre aktuelle Abonnementgebühr."

Für Downgrades:

"Sie behalten bis [Renewal-Datum] Premium-Zugriff, dann wechseln Sie auf Standard."

Für Crossgrades:

"Ihr Plan wird auf jährliche Abrechnung umgestellt, sobald Sie das nächste Mal [Datum] erneuern."

Serverüberwachung

Sektion: Serverüberwachung

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 den transactionUpdated Hörer, damit sowohl Client als auch Backend synchron bleiben.

  • Halten Sie verwandte Abonnements in derselben Gruppe
  • Mischen Sie keine unabhängigen Funktionen (z. B. Speicherung und Werbungserfassung)
  • Erstellen Sie separate Gruppen für verschiedene Funktionssets
  • Jahrespläne → Höherer Level als monatliche (für gleiche Ebene)
  • Höherpreisige Ebenen → Höherer Level
  • Betrachten Sie den Wert, nicht nur den Preis
  • Zeigen Sie die aktuelle Abonnement klar an
  • Zeigen Sie alle verfügbaren Optionen in der Gruppe an
  • Deuten Sie an, welche Änderungen sofortig sind vs. bei der Verlängerung
  • Ermöglichen Sie ein einfaches Wechseln zwischen Plänen
  • Testen Sie alle Upgrade-Szenarien
  • Testen Sie alle Downgrade-Szenarien
  • Überprüfen Sie das Verhalten bei der Kreuzgradierung
  • Überprüfen Sie, ob Webhooks abgefeuert werden

Übliche Szenarien

Übliche Szenarien

Szenario 1: Dreistufige monatliche Pläne

Szenario 1: Dreistufige monatliche Pläne
Level 1: Ultimate Monthly ($19.99)
Level 2: Premium Monthly ($9.99)
Level 3: Basic Monthly ($4.99)
  • Basic → Premium: Upgrade (unmittelbar)
  • Premium → Ultimate: Upgrade (unmittelbar)
  • Ultimate → Premium: Downgrade (bei Erneuerung)
  • Basic → Ultimate: Upgrade (unmittelbar)

Szenario 2: Gemischte Dauerpläne

Szenario 2: Gemischte Dauerpläne
Level 1: Premium Annual ($99.99/year)
Level 2: Premium Monthly ($9.99/month)
  • Monatlich → Jahres: Crossgrade (bei Erneuerung)
  • Jährlich → Monatlich: Downgrade (bei Erneuerung)

Szenario 3: Multi-Tier Multi-Dauer

Szenario 3: Multi-Tier Multi-Dauer
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-/Downgrade-Logik klar bleibt.

Abonnement nicht in der Gruppe erscheint:

  • Überprüfen Sie, ob es der richtigen Gruppe zugewiesen ist
  • Stellen Sie sicher, dass es sich in mindestens dem Status „Ready to Submit“ befindet
  • Stellen Sie sicher, dass das Produkt-ID korrekt ist

Falsches Upgrade/Downgrade-Verhalten:

  • Überprüfen Sie die Rangliste der Ebenen (1 = höchste)
  • Stellen Sie sicher, dass die Abonnementebenen Sinn ergeben
  • Überprüfen Sie, ob die Ebenen korrekt eingestellt sind

Produkte aus verschiedenen Gruppen:

  • Benutzer können gleichzeitig an mehreren Gruppen abonnieren
  • Dies ist bewusst - Halten Sie verwandte Produkte in derselben Gruppe

getActiveProducts zeigt mehrere Abonnements an:

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

Weitere Informationen finden Sie in der offiziellen Apple-Dokumentation zu Abonnementgruppen.

Wenn Sie Create iOS Abonnementgruppe zum Planen der Genehmigung im App Store und der Verteilung verwenden, verbinden Sie es mit Mit @capgo/native-purchases für die native Fähigkeit in Mit @capgo/native-purchases, @capgo/capacitor-In-App-Bewertung zur Implementierungsdetail in @capgo/capacitor-in-app-Bewertung, Mit @capgo/capacitor-in-app-Bewertung zur nativen Fähigkeit in Mit @capgo/capacitor-in-app-Bewertung @capgo/capacitor-native-Markt zur Implementierungsdetail in @capgo/capacitor-native-Markt und Mit @capgo/capacitor-native-Markt zur nativen Fähigkeit in Mit @capgo/capacitor-native-Markt