Saltare al contenuto

Crea Gruppo Abbonamento iOS

GitHub

I gruppi di abbonamento sono essenziali per organizzare e gestire più livelli di abbonamento nella tua app iOS. È fondamentale capire come funzionano per implementare la funzionalità di aggiornamento, downgrade e crossgrade.

Un gruppo di abbonamento è una raccolta di abbonamenti correlati che gli utenti possono scegliere tra loro. Gli utenti possono abbonarsi solo a un abbonamento all'interno di un gruppo alla volta. Quando cambiano abbonamento, Apple gestisce automaticamente la transizione.

I gruppi di abbonamento consentono:

  • Pianificazione a più livelli: Offre piani base, premium e ultimate
  • Diversi periodi di durata: Opzioni mensili, annuali e a vita
  • Logica di aggiornamento/abbassamento: Gestione automatica delle modifiche degli abbonamenti
  • Gestione semplificata: Raggruppa insieme le relative abbonamenti

All'interno di un gruppo, ogni abbonamento dovrebbe essere classificato in base al valore più alto (livello 1) e al valore più basso. Questa classificazione determina come le modifiche agli abbonamenti vengono classificate:

Gerarchia dei livelli di abbonamento

Livello 1 (Valore più alto)

  • Premium annuale (99,99€/anno)
  • Ultimo mese (19,99€/mese)

Livello 2 (Valore medio)

  • Standard annuale (49,99€/anno)
  • Premium Mensile ($9.99/mese)

Nivel 3 (Valore più basso)

  • Basic Annuale ($29.99/anno)
  • Standard Mensile ($4.99/mese)

Tipi di Modifica della Sottoscrizione

Sottotitolo “Tipi di Modifica della Sottoscrizione”

Apple gestisce automaticamente tre tipi di modifiche della sottoscrizione in base alla classificazione del livello:

Passare a un livello superiore subscription (ad esempio, livello 2 → livello 1).

Comportamento:

  • Ha effetto immediatamente
  • L'utente riceve rimborso proporzionato per il tempo residuo
  • La nuova sottoscrizione inizia subito

Esempio:

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

Passare a un livello inferiore di sottoscrizione (ad esempio, livello 1 → livello 2). Comportamento:

Ha effetto alla

  • data di rinnovo successiva L'utente mantiene la sottoscrizione corrente fino alla fine del periodo
  • La nuova sottoscrizione inizia automaticamente dopo la scadenza
  • Esempio:

Copia negli appunti

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

Passando a un'altra sottoscrizione allo stesso livello di tariffa.

Il comportamento dipende dalla durata:

Durata diversa → Si comporta come abbassamento di livello

  • Ha effetto alla data di rinnovo successiva
  • Esempio: Premium mensile (Livello 1) → Premium annuale (Livello 1)

Durata identica → Si comporta come elevazione di livello

  • Ha effetto immediatamente
  • Esempio: Premium Mensile (Livello 1) → Ultimate Mensile (Livello 1)
  1. Naviga a Abbonamenti

    In App Store Connect, seleziona il tuo app e vai a Monetizza > Abbonamenti.

  2. Crea Gruppo

    Clicca + prossimo a “Gruppi di Abbonamento” per creare un nuovo gruppo.

  3. Nome del Gruppo

    Scegli un nome descrittivo che rifletta gli abbonamenti che contiene:

    • “Accesso Premium”
    • “Piani di Archiviazione Cloud”
    • “Caratteristiche Pro”
  4. Aggiungi Abbonamenti

    Dopo aver creato il gruppo, aggiungi abbonamenti individuali a esso. Ogni abbonamento avrà un livello di classificazione.

  5. Imposta Livelli di Classificazione

    Ordina gli abbonamenti dalla valutazione più alta (1) a quella più bassa. Considera:

    • I piani annuali solitamente hanno una classificazione più alta rispetto a quelli mensili
    • I livelli più costosi si collocano sopra quelli meno costosi
    • I livelli ultimate/premium hanno la classificazione più alta

Il plugin native-purchases gestisce automaticamente la logica dei gruppi di abbonamento:

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();
}
});

Comunicare sempre il comportamento di modifica in modo chiaro:

Per gli Aggiornamenti:

“Avrai accesso immediato alle funzionalità Premium. Ti prorateremo la tua abbonamento corrente.”

Per le Riduzioni:

“Avrai l'accesso Premium fino alla data di rinnovo [renewal date], poi passerai a Standard.”

Per Crossgrades:

“Il tuo piano cambierà a fatturazione annuale alla prossima rinnovazione il [date].”

Utilizza le notifiche del server di Apple Store Server Notifications v2 o il tuo backend di validazione di ricevuta per riflettere le modifiche di StoreKit nel tuo database. Abbinare le notifiche del server con l'ascoltatore per mantenere sincronizzati sia il client che il backend. transactionUpdated Pratiche raccomandate

Sezione intitolata “Pratiche raccomandate”

Organizzazione dei gruppi

Sezione intitolata “Organizzazione dei gruppi”

Mantieni le sottoscrizioni correlate nello stesso gruppo
  • __CAPGO_KEEP_0__
  • Non mescolare funzionalità non correlate (ad esempio, archiviazione e rimozione degli annunci)
  • Crea gruppi separati per set di funzionalità diversi
  • Piani annuali → Livello più alto rispetto ai mensili (per stesso livello)
  • Livelli più costosi → Livello più alto
  • Considera il valore, non solo il prezzo
  • Mostra la sottoscrizione corrente chiaramente
  • Visualizza tutte le opzioni disponibili nel gruppo
  • Indica quali cambiamenti sono immediati vs. a rinnovo
  • Consenti di passare facilmente tra i piani
  • Testare tutti gli scenari di aggiornamento
  • Testare tutti gli scenari di riduzione
  • Verificare il comportamento di crossgrade
  • Controllare l'invio del webhook
Level 1: Ultimate Monthly ($19.99)
Level 2: Premium Monthly ($9.99)
Level 3: Basic Monthly ($4.99)
  • Basic → Premium: Aggiorna (immediato)
  • Premium → Ultimate: Aggiorna (immediato)
  • Ultimate → Premium: Riduci (alla rinnovazione)
  • Basic → Ultimate: Aggiorna (immediato)
Level 1: Premium Annual ($99.99/year)
Level 2: Premium Monthly ($9.99/month)
  • Monthly → Annual: Migliora (alla rinnovazione)
  • Annual → Monthly: Riduci (alla rinnovazione)
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)

Questa configurazione offre la massima flessibilità mentre mantiene una logica di aggiornamento/abbassamento chiara.

Abbonamento non presente nel gruppo:

  • Verifica che sia assegnato al gruppo corretto
  • Controlla che sia in almeno lo stato “Pronto per la presentazione”
  • Assicurati che l'ID del prodotto sia corretto

Comportamento di aggiornamento/abbassamento sbagliato:

  • Verifica che i livelli di classifica siano corretti (1 = più alto)
  • Verifica che le fasce di abbonamento siano sensate
  • Controlla che i livelli siano impostati correttamente

Prodotti da gruppi diversi:

  • Utenti possono sottoscrivere a più gruppi contemporaneamente
  • Questo è intenzionale - tenere i prodotti correlati nello stesso gruppo

getActiveProducts che mostra più sottoscrizioni:

  • Controlla se le sottoscrizioni sono in gruppi diversi
  • Verifica che l'utente non sia sottoscritto tramite Family Sharing
  • Verifica lo stato della sottoscrizione in App Store Connect

Per ulteriori informazioni, si prega di consultare il documento ufficiale di Apple sulla gestione delle sottoscrizioni.

If sei stai utilizzando Crea un Gruppo di Abbonamento iOS per pianificare l'approvazione e la distribuzione della store, collega Utilizza @capgo/native-purchases per la capacità nativa in Utilizza @capgo/native-purchases, @capgo/capacitor-in-app-review per il dettaglio di implementazione in @capgo/capacitor-in-app-review, Utilizza @capgo/capacitor-in-app-review per la capacità nativa in Utilizza @capgo/capacitor-in-app-review, @capgo/capacitor-native-market per il dettaglio di implementazione in @capgo/capacitor-native-market, e Utilizza @capgo/capacitor-native-market per la capacità nativa in Utilizzare @capgo/capacitor-native-market.