Vai al contenuto

Piani di fatturazione iOS con impegno mensile

GitHub

Apple supporta gli abbonamenti con fatturazione mensile che impegnano il cliente per un periodo più lungo di 12 mesi. Quando StoreKit e il sistema operativo supportano questo piano di fatturazione, @capgo/native-purchases espone le condizioni di prezzo, consente di selezionare il piano di fatturazione mensile durante l'acquisto e restituisce metadati sull'impegno per transazioni e informazioni di rinnovo.

Usalo per le offerte con abbonamento annuale in cui gli utenti preferiscono i pagamenti mensili ma vuoi comunque la retention e la prevedibilità di un impegno annuale.

  • Configura il piano di fatturazione mensile con impegno di 12 mesi in App Store Connect o in StoreKit Testing in Xcode.
  • Esegui il build dell'app iOS con un SDK di Xcode che contiene StoreKit pricingTerms e billingPlanType.
  • Esegui su una versione di iOS che supporti i piani di fatturazione StoreKit commitment.
  • Mantieni disponibile un'opzione di fatturazione standard per i dispositivi o gli storefront che non restituiscono i termini di prezzo dell'impegno.

Chiama getProducts() come al solito. Per i prodotti in abbonamento iOS supportati, ogni prodotto può includere pricingTerms.

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
const { products } = await NativePurchases.getProducts({
productIdentifiers: ['com.example.app.premium.yearly'],
productType: PURCHASE_TYPE.SUBS,
});
const premiumYearly = products.find(
(product) => product.identifier === 'com.example.app.premium.yearly',
);
const monthlyCommitment = premiumYearly?.pricingTerms?.find(
(term) => term.billingPlanType === 'monthly',
);

Renderizza i valori forniti dallo store invece di prezzi hardcoded:

CampoUsalo per
billingDisplayPriceL'importo di fatturazione ricorrente mostrato all'utente, ad esempio l'addebito mensile.
billingPeriodLa cadenza di fatturazione per il prezzo di fatturazione visualizzato.
commitmentInfo.priceStringIl prezzo totale dell'impegno formattato per lo storefront dell'utente.
commitmentInfo.periodL'intero periodo di impegno.
subscriptionOffersOfferte introduttive o promozionali associate al periodo di fatturazione.

Esempio di testo per il paywall:

function commitmentLabel(term: NonNullable<typeof monthlyCommitment>) {
const total = term.commitmentInfo?.priceString;
return total
? `${term.billingDisplayPrice} billed monthly, ${total} total commitment`
: term.billingDisplayPrice;
}

Quando l'utente seleziona il piano Monthly Commitment, passa billingPlanType: 'monthly'.

const transaction = await NativePurchases.purchaseProduct({
productIdentifier: 'com.example.app.premium.yearly',
productType: PURCHASE_TYPE.SUBS,
billingPlanType: 'monthly',
appAccountToken: userStoreUuid,
});

Usa billingPlanType: 'upFront' solo quando devi selezionare esplicitamente il piano di fatturazione anticipata standard. Se ometti billingPlanType, StoreKit utilizza il comportamento di acquisto predefinito per il prodotto.

Le transazioni includono il piano di fatturazione e l'avanzamento del commitment quando StoreKit li fornisce:

if (transaction.billingPlanType === 'monthly') {
console.log('Current billing period:', transaction.commitmentInfo?.billingPeriodNumber);
console.log('Total billing periods:', transaction.commitmentInfo?.totalBillingPeriods);
console.log('Commitment ends:', transaction.commitmentInfo?.expirationDate);
console.log('Commitment total:', transaction.commitmentInfo?.price);
}

Le informazioni sul rinnovo possono includere lo stato del prossimo impegno:

const { purchases } = await NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
onlyCurrentEntitlements: true,
});
for (const purchase of purchases) {
const commitment = purchase.renewalInfo?.commitmentInfo;
if (!commitment) continue;
console.log('Renews into another commitment:', commitment.willAutoRenew);
console.log('Next billing plan:', commitment.renewalBillingPlanType);
console.log('Next renewal date:', commitment.renewalDate);
}

Usa il top-level expirationDate e isActive campi per le decisioni sui diritti. Usa commitmentInfo.expirationDate per spiegare al cliente la timeline completa dell'impegno.

  • Mostra sia il prezzo di fatturazione ricorrente sia il prezzo totale dell'impegno prima dell'acquisto.
  • Rendi esplicita la durata dell'impegno vicino al pulsante di acquisto.
  • Usa product.title, product.priceString, pricingTerms[].billingDisplayPrice, e pricingTerms[].commitmentInfo.priceString da StoreKit invece di prezzi hardcoded.
  • Fornisci le azioni per ripristinare gli acquisti e gestire l'abbonamento nella paywall o nella schermata account.

Continua dai piani di fatturazione iOS Monthly Commitment

Sezione intitolata “Continua dai piani di fatturazione iOS Monthly Commitment”

Se stai usando Piani di fatturazione iOS con impegno mensile per pianificare pagamenti e acquisti, collegalo a Utilizzo di @capgo/native-purchases per la funzionalità nativa in Utilizzo di @capgo/native-purchases, Prezzi Capgo per il workflow del prodotto nella pagina Prezzi di Capgo, Sistema di pagamento per i dettagli di implementazione nel sistema di pagamento, @capgo/native-purchases per i dettagli di implementazione in @capgo/native-purchases, e Per iniziare per i dettagli sull'implementazione in Getting Started.