Zum Inhalt springen

Erstellen von iOS-Abonnementgruppe

GitHub

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

Eine Abonnementgruppe ist eine Sammlung von verwandten Abonnements, aus denen die Benutzer wählen können. Benutzer können nur ein Abonnement innerhalb einer Gruppe gleichzeitig abonnieren. Wenn sie das Abonnement ändern, übernimmt Apple die Übergabe automatisch.

Abonnementgruppen ermöglichen:

  • Stufengerechtes Preisangebot: Grundlegende, Premium- und Ultimate-Pläne anbieten
  • Verschiedene Laufzeiten: Monatliche, jährliche und lebenslange Optionen
  • Upgrade/Downgrade-Logik: 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 Rangfolge bestimmt, wie Abonnementänderungen klassifiziert werden:

Abonnementgruppenhierarchie

Ebene 1 (Höchster Wert)

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

Level 2 (Mittelwert)

  • Standardjährlich (49,99 €/Jahr)
  • Premium monatlich (9,99 €/Monat)

Level 3 (Niedrigster Wert)

  • Basicjährlich (29,99 €/Jahr)
  • Standard monatlich (4,99 €/Monat)

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

Wechsel zu einem höheren Tarifplans (z.B. level 2 → level 1).

Verhalten:

  • Wirkung tritt
  • unmittelbar Benutzer erhält eine anteilige Rückerstattung
  • für die verbleibende Zeit

Neuer Tarifplan beginnt sofort

// 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 (z.B. Level 1 → Level 2). Verhalten:

Wirksamkeit ab

  • nächster Verlängerungsdatum Benutzer behält aktuelle Abonnement bis zum Ende der Laufzeit bei
  • Neues Abonnement startet automatisch nach Ablauf
  • Beispiel:

__CAPGO_KEEP_0__

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

Wechsel zu einer anderen Abonnement auf demselben Ebeneniveau.

Das Verhalten hängt von der Dauer ab:

Verschiedene Dauer → Verhält sich wie heruntergradieren

  • Wirkt ab der nächsten Verlängerungsdatum
  • Beispiel: Monatliches Premium (Ebene 1) → jährliches Premium (Ebene 1)

Gleiche Dauer → Verhält sich wie aktualisieren

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

  2. Erstellen Sie eine Gruppe

    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-Zugriff“
    • „Cloud-Speicherkonzepte“
    • „Pro-Funktionen“
  4. Abonnements hinzufügen

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

  5. Rangfolge einrichten

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

    • Jährliche Pläne rangieren höher als monatliche
    • Höherpreisige Tarife stehen über niedrigerpreisigen
    • Ultimative/Premium-Tarife 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);
});

Abonnementänderungen handhaben

Abschnitt: 'Abonnementänderungen handhaben'
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 das Änderungsverhalten immer klar:

Für Upgrades:

“Sie erhalten sofortigen Zugriff auf Premium-Funktionen. Wir berechnen Ihre aktuelle Abonnementgebühr.”

Für Downgrades:

“Sie behalten bis [Stichtag] Premium-Zugriff, dann wechseln Sie auf Standard.”

Für Crossgrades:

“Ihr Plan wird sich bei der nächsten Erneuerung am [Datum] auf jährliche Abrechnung ändern.”

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

  • Verwaltung verwandter Abonnements in derselben Gruppe
  • Mische nicht unabhängige Funktionen (z.B. Speicherung und Werbungserlösung)
  • Erstelle separate Gruppen für unterschiedliche Funktionssets

Rangabstufungsstrategie

Abschnitt: Rangabstufungsstrategie
  • Jahrespläne → Höherer Rang als monatliche (für gleiche Ebene)
  • Höherpreisige Ebenen → Höherer Rang
  • Berücksichtige Wert, nicht nur Preis
  • Zeige aktuelle Abonnement offensichtlich an
  • Zeige alle verfügbaren Optionen in der Gruppe an
  • Deutlich machen, welche Änderungen sofort vs. bei der Verlängerung wirksam sind
  • Ermögliche einfaches Wechseln zwischen Plänen
  • Teste alle Upgrade-Szenarien
  • Teste alle Downgrade-Szenarien
  • Überprüfe das Verhalten bei der Kreuzgradierung
  • Ü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)
  • Ultimate → Premium: Downgrade (bei Erneuerung)
  • Basic → Ultimate: 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: Downgrade (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 eine klare Upgrade-/Downgrade-Logik aufrechterhalten wird.

Abonnement erscheint nicht in der Gruppe:

  • Überprüfen Sie, ob es der richtigen Gruppe zugewiesen ist
  • Stellen Sie sicher, dass es sich in mindestens dem Status „Bereit zum Einreichen“ befindet
  • Überprüfen Sie die Produkt-ID

Falsches Upgrade-/Downgrade-Verhalten:

  • Überprüfen Sie die Ranglisten (1 = höchste Rangliste)
  • Überprüfen Sie, ob die Abonnementebenen Sinn machen
  • Überprüfen Sie, ob die Ebenen korrekt eingestellt sind

Produkte aus verschiedenen Gruppen:

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

getActiveProducts zeigen mehrere Abonnements:

  • Ü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 wenden Sie sich an offizielle Apple-Dokumentation zu Abonnementgruppen.

Wenn Sie Erstellen Sie einen iOS-Abonnementgruppe zur Planung der Genehmigung im App Store und der Verteilung, verbinden Sie es mit Mit @capgo/native-purchases für die native Fähigkeit in Mit @capgo/native-purchases, @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, @capgo/capacitor-native-Markt für die Implementierungsdetails in @capgo/capacitor-native-Markt, und Mit @capgo/capacitor-native-Markt für die native Fähigkeit in Mit @capgo/capacitor-native-Markt.