Saltare al contenuto

Piani di fatturazione mensili per iOS

GitHub

Apple supporta le sottoscrizioni che fatturano mensilmente impegnando il cliente a un termine più lungo di 12 mesi. Quando StoreKit e il sistema operativo in esecuzione supportano questo piano di fatturazione, @capgo/native-purchases espongono i termini di prezzo, consentono di selezionare il piano di fatturazione mensile durante l'acquisto e restituiscono i metadati di impegno nelle transazioni e le informazioni di rinnovo.

Utilizza questo per offrire abbonamenti annuali dove gli utenti preferiscono pagamenti mensili, ma desiderano comunque la retenzione e la prevedibilità di un termine annuale impegnativo.

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

Chiamare getProducts() context:HTML testo frammento da una stringa Capgo UI più lunga (chiave genitore `appflow_migration_step2`). Pagina/area: Appflow comparazione / migrazione copia di marketing. Ruolo: Copia di sito di frase. Visibile in: pagina ionic-appflow.astro. Preservare esattamente i termini di prodotto/marca e i termini di sviluppatore Capgo. Chiave di messaggio `appflow_migration_step2` (Appflow Migration Step2). 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',
);

Copiare nel portapenne

Visualizza i valori forniti dalla store al posto dei prezzi hardcoded:Campo
billingDisplayPriceUtilizzalo per
billingPeriodIl costo mensile ricorrente visualizzato all'utente, ad esempio il carico mensile.
commitmentInfo.priceStringIl prezzo totale di impegno formattato per il negozio del cliente.
commitmentInfo.periodIl periodo di impegno completo.
subscriptionOffersOfferte introduttive o promozionali associate 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 standard a fronte. billingPlanTypeSe ometti, StoreKit utilizza il suo comportamento di acquisto predefinito per il prodotto.

Gli acquisti includono il piano di fatturazione e lo stato di avanzamento dell'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);
}

Le informazioni di rinnovo possono includere lo stato dell'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 il livello superiore expirationDate e isActive Campi per le decisioni di abilitazione. Utilizza commitmentInfo.expirationDate per spiegare la timeline di impegno completo al cliente.

  • Mostra sia il prezzo di fatturazione ricorrente che il prezzo di impegno totale prima dell'acquisto.
  • Fai esplicito l'intervallo di impegno vicino al pulsante di acquisto.
  • Utilizza product.title, product.priceString, pricingTerms[].billingDisplayPrice, e pricingTerms[].commitmentInfo.priceString da StoreKit al posto dei prezzi hardcoded.
  • Fornisci azioni di ripristino delle acquisti e gestione della sottoscrizione sul paywall o sulla schermata account.

Continua da qui con i piani di fatturazione mensile di impegno iOS

Sezione intitolata “Continua da qui con i piani di fatturazione mensile di impegno iOS”

Se stai utilizzando I piani di fatturazione mensile di impegno 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 il dettaglio di implementazione in Sistema di pagamento @capgo/acquisti nativi per il dettaglio di implementazione in @capgo/acquisti nativi, e Iniziare per il dettaglio di implementazione in Iniziare.