Saltare al contenuto

Piani di fatturazione mensile per iOS

GitHub

Apple supporta le sottoscrizioni che fatturano mensilmente mentre impegnano il cliente a un termine più lungo di 12 mesi. Quando StoreKit e l'OS in esecuzione supportano questo piano di fatturazione, @capgo/native-purchases esporge i termini di prezzo, consente di selezionare il piano di fatturazione mensile durante l'acquisto e restituisce i metadati di impegno sui trasazioni e le informazioni di rinnovo.

Usa questo per offrire abbonamenti annuali dove gli utenti preferiscono pagamenti mensili, ma tu vuoi comunque la retention e la prevedibilità di un termine annuale impegno.

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

Chiamata getProducts() Come di consueto. Per i prodotti di 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',
);

Rendere i valori forniti dalla store al posto di prezzi hardcoded:

FieldCampo
billingDisplayPriceIl importo di fatturazione ricorrente visualizzato all'utente, ad esempio il carico mensile.
billingPeriodIl calendario di fatturazione per il prezzo di fatturazione visualizzato.
commitmentInfo.priceStringIl calendario di fatturazione per il prezzo di fatturazione visualizzato.
commitmentInfo.periodLa durata della committenza completa.
subscriptionOffersOfferte introduttive o promozionali legate al termine di prezzo.

Esempio di copia del 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 di impegno mensile, 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' Usa solo quando hai bisogno di selezionare esplicitamente il piano di fatturazione a fronte standard. Se ometti billingPlanType, StoreKit utilizza il comportamento di acquisto predefinito per il prodotto.

Le transazioni includono il piano di fatturazione e lo stato di impegno quando StoreKit lo 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);
}

Informazioni di rinnovo possono includere lo stato di impegno successivo:

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

Utilizza i campi di livello superiore expirationDate e isActive Usa i campi per le decisioni di abilitazione. commitmentInfo.expirationDate per spiegare la timeline di impegno completo al cliente.

  • Mostrare sia il prezzo di fatturazione ricorrente che il prezzo di impegno totale prima dell'acquisto.
  • Fare esplicito l'impegno di durata vicino al pulsante di acquisto.
  • Usare product.title, product.priceString, pricingTerms[].billingDisplayPrice, e pricingTerms[].commitmentInfo.priceString da StoreKit al posto dei prezzi hardcoded.
  • Fornire azioni di ripristino acquisti e gestione sottoscrizione sulla schermata di pagamento o sulla schermata account.

Prosegui con i piani di fatturazione mensile di iOS

Sezione intitolata “Prosegui con i piani di fatturazione mensile di iOS”

Se stai utilizzando Piani di fatturazione mensile di iOS per pianificare pagamenti e acquisti, connettilo con Utilizzando @capgo/native-purchases per la capacità nativa in Utilizzando @capgo/native-purchases Capgo Pricing per il workflow del prodotto in Capgo Pricing Sistema di pagamento per i dettagli di implementazione nel sistema di pagamento, @capgo/acquisti nativi per i dettagli di implementazione in @capgo/acquisti nativi, e Getting Started per i dettagli di implementazione in Iniziare.