Saltar al contenido

Plan de Facturación Mensual de Compromiso de iOS

Apple admite suscripciones que facturan mensualmente mientras que el cliente se compromete con un plazo más largo de 12 meses. Cuando StoreKit y el sistema operativo en ejecución apoyen este plan de facturación, @capgo/native-purchases exponga los términos de precios, permita seleccionar el plan de facturación mensual durante la compra y devuelva metadatos de compromiso en transacciones y información de renovación.

Use esto para ofertas de suscripciones anuales donde los usuarios prefieren pagos mensuales pero aún quieres la retención y la previsibilidad de un plazo anual comprometido.

  • Configure el plan de facturación mensual con un compromiso de 12 meses en App Store Connect o en StoreKit Testing en Xcode.
  • Construya la aplicación de iOS con un Xcode SDK que contiene StoreKit pricingTerms y billingPlanType.
  • Ejecuta en una versión de iOS que admita planes de facturación de compromiso de StoreKit.
  • Mantenga una opción de facturación estándar disponible para dispositivos o tiendas que no devuelvan términos de precios de compromiso.

y Android ignora esto, y cargar y mostrar términos de precios

Sección titulada “Cargar y mostrar términos de precios”

Llamar getProducts() como de costumbre. Para los productos de suscripción iOS admitidos, cada producto puede incluir 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',
);

Vincular los valores proporcionados por la tienda en lugar de precios hardcodeados:

CampoUtilízalo para
billingDisplayPriceEl monto de facturación recurrente mostrado al usuario, por ejemplo, el cargo mensual.
billingPeriodEl ritmo de facturación para el precio de facturación mostrado.
commitmentInfo.priceStringEl precio de compromiso total formateado para el escaparate del usuario.
commitmentInfo.periodEl período de compromiso completo.
subscriptionOffersOfertas introductorias o promocionales unidas a los términos de precios.

Ejemplo de copia de pago:

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

Cuando el usuario selecciona el plan de compromiso mensual, envíe billingPlanType: 'monthly'.

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

Usar billingPlanType: 'upFront' solo cuando necesite seleccionar explícitamente el plan de facturación anticipada estándar. Si omite billingPlanTypeStoreKit utiliza su comportamiento de compra predeterminado para el producto.

Las transacciones incluyen el plan de facturación y el progreso del compromiso cuando StoreKit lo proporciona:

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

La información de renovación puede incluir el próximo estado de compromiso:

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

Utiliza los campos de nivel superior expirationDate y isActive para tomar decisiones de acceso. Utiliza commitmentInfo.expirationDate para explicar al cliente el plazo completo del compromiso.

  • Muestre tanto el precio de facturación recurrente como el precio total de compromiso antes de la compra.
  • Haga explícita la longitud del compromiso cerca del botón de compra.
  • Utilice product.title, product.priceString, pricingTerms[].billingDisplayPrice, y pricingTerms[].commitmentInfo.priceString de StoreKit en lugar de precios hardcoded.
  • Proporcione acciones de restauración de compras y gestión de suscripciones en la pantalla de pago o pantalla de cuenta.

Sigue adelante desde los planes de facturación mensual de iOS

Sección titulada “Sigue adelante desde los planes de facturación mensual de iOS”

Si estás utilizando Planes de facturación mensual de iOS para planificar pagos y compras, conecta Usando @capgo/native-purchases para la capacidad nativa en Usando @capgo/native-purchases, Capgo Precios para el flujo de trabajo del producto en Capgo Precios, Sistema de pago para el detalle de implementación en Sistema de pago, @capgo/native-purchases para el detalle de implementación en @capgo/compras nativas, y Inicio para el detalle de implementación en Inicio.