Saltare al contenuto

Piani di fatturazione mensili di impegno 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 esporre i termini di prezzo, consentire di selezionare il piano di fatturazione mensile durante l'acquisto e restituire i metadati di impegno sulle transazioni e le informazioni di rinnovo.

Usa questo per offrire sottoscrizioni annuali dove gli utenti preferiscono i pagamenti mensili ma desideri comunque la retention 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 una versione iOS che supporta i piani di fatturazione a impegno per StoreKit.
  • Mantieni un'opzione di fatturazione standard disponibile per dispositivi o negozi che non restituiscono termini di prezzi di impegno.

Chiamalo getProducts() come di consueto. Per i prodotti di sottoscrizione 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 anziché prezzi hardcoded:

CampoUsalo per
billingDisplayPriceL'importo di fatturazione ricorrente mostrato all'utente, ad esempio il carico mensile.
billingPeriodIl calendario di fatturazione per il prezzo di fatturazione visualizzato.
commitmentInfo.priceStringIl prezzo di impegno totale formattato per la vetrina dell'utente.
commitmentInfo.periodIl periodo di impegno completo.
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' solo quando hai bisogno di selezionare esplicitamente il piano di fatturazione a fronte standard. Se ometti billingPlanType, StoreKit utilizza il suo comportamento di acquisto predefinito per il prodotto.

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

L'informazione di rinnovo può 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 livello superiore expirationDate e isActive campi per le decisioni di entitatività. Usa commitmentInfo.expirationDate per spiegare la timeline completa dell'impegno al cliente.

  • Mostra sia il prezzo di fatturazione ricorrente che il prezzo totale dell'impegno prima dell'acquisto.
  • Fai esplicito lo stato di impegno vicino al pulsante di acquisto.
  • Usa product.title, product.priceString, pricingTerms[].billingDisplayPrice, e pricingTerms[].commitmentInfo.priceString dai priorità a StoreKit al posto dei prezzi hardcoded.
  • Fornisci azioni di ripristino acquisti e gestione abbonamenti sul paywall o schermo account.

Continua con i piani di fatturazione mensile di impegno iOS

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

Se stai utilizzando Piani di fatturazione mensili per iOS per pianificare i pagamenti e le spese, connettilo con Utilizzare @capgo/native-purchases per la capacità nativa in Utilizzare @capgo/native-purchases, Capgo Pricing per il workflow del prodotto in Capgo Pricing, Sistema di pagamento per la dettaglio di implementazione in Sistema di pagamento, @capgo/native-purchases per la dettaglio di implementazione in @capgo/native-purchases, e Avvio rapido per la dettaglio di implementazione in Avvio rapido.