Saltare al contenuto

Piani di fatturazione mensili per iOS

GitHub

L'Apple supporta le sottoscrizioni che fatturano mensilmente impegnando 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 sottoscrizioni annuali dove gli utenti preferiscono pagamenti mensili, ma desiderano comunque la retention e la prevedibilità di un termine annuale impegnativo.

  • 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.
  • Conserva un'opzione di fatturazione standard disponibile per dispositivi o negozi che non restituiscono termini di fatturazione di impegno.

Carica e visualizza i termini di fatturazione

Carattere "Carica e visualizza i termini di prezzo"

Chiamare 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 dei prezzi hardcoded:

CampoUtilizzalo per
billingDisplayPriceIl prezzo mensile della fattura ricorrente visualizzato all'utente, ad esempio il carico mensile.
billingPeriodIl calendario di fatturazione per il prezzo di fatturazione visualizzato.
commitmentInfo.priceStringIl prezzo totale di impegno formattato per la vetrina dell'utente.
commitmentInfo.periodLa durata dell'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' utilizza 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.

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

L'informazione di rinnovo può 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 il livello superiore expirationDate e isActive Utilizza i campi di alto livello commitmentInfo.expirationDate Spiegare il calendario di impegno completo al cliente.

Nota di Valutazione App Store

Note di valutazione dell'App Store
  • Mostra sia il prezzo di fatturazione ricorrente che il prezzo totale di impegno prima dell'acquisto.
  • Fai esplicito la lunghezza del impegno vicino al pulsante di acquisto.
  • Usa product.title, product.priceString, pricingTerms[].billingDisplayPrice, e pricingTerms[].commitmentInfo.priceString dal StoreKit invece dei prezzi hardcoded.
  • Fornisci azioni di ripristino acquisti e gestione abbonamenti sulla schermata di pagamento o sulla schermata 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 di impegno per iOS per pianificare i pagamenti e le vendite, connettilo con Utilizzare @capgo/acquisti nativi per la capacità nativa in Utilizzare @capgo/acquisti nativi Capgo Prezzi per il flusso di lavoro del prodotto in Capgo Prezzi Sistema di pagamento per la dettaglio di implementazione in Sistema di pagamento @capgo/acquisti nativi per il dettaglio di implementazione in @capgo/acquisti nativi, e Avvio rapido per il dettaglio di implementazione in Avvio rapido.