Planes de Facturación Mensuales de Compromiso de iOS
Copie un prompt de configuración con los pasos de instalación y la guía de markdown completa para este plugin.
Apple admite suscripciones que facturan mensualmente mientras que comprometen al cliente con un plazo más largo de 12 meses. Cuando StoreKit y el sistema operativo en ejecución apoyan este plan de facturación, @capgo/native-purchases exposa los términos de precios, permite seleccionar el plan de facturación mensual durante la compra, y devuelve metadatos de compromiso en transacciones y información de renovación.
Utilice esto para ofertas de suscripción anuales donde los usuarios prefieren pagos mensuales pero aún quiere la retención y la previsibilidad de un plazo anual comprometido.
Requisitos
Sección titulada “Requisitos”- 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 iOS con un Xcode SDK que contenga StoreKit
pricingTermsybillingPlanType. - Ejecuta en una versión de iOS que apoye los 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.
Cargar y mostrar términos de precios
Sección titulada “Cargar y mostrar términos de precios”Llamar getProducts() de manera habitual. Para productos de suscripción iOS soportados, 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',);Vuelva a renderizar los valores proporcionados por la tienda en lugar de precios hardcodeados:
| Campo | Utilízalo para |
|---|---|
billingDisplayPrice | El monto de facturación recurrente que se muestra al usuario, por ejemplo, el cargo mensual. |
billingPeriod | La cadencia de facturación para el precio de facturación mostrado. |
commitmentInfo.priceString | El precio de compromiso total formateado para la tienda del usuario. |
commitmentInfo.period | El período de compromiso completo. |
subscriptionOffers | Ofertas iniciales o promocionales adjuntas al término de precios. |
Ejemplo de copia de paywall:
function commitmentLabel(term: NonNullable<typeof monthlyCommitment>) { const total = term.commitmentInfo?.priceString; return total ? `${term.billingDisplayPrice} billed monthly, ${total} total commitment` : term.billingDisplayPrice;}Compre el Plan de Compromiso Mensual
Sección titulada “Compre el Plan de Compromiso Mensual”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,});Utiliza solo cuando necesites seleccionar explícitamente el plan de facturación al principio. billingPlanType: 'upFront' Si omites __CAPGO_KEEP_0__, StoreKit utiliza su comportamiento de compra predeterminado para el producto. billingPlanTypeConsejo
Las transacciones incluyen el plan de facturación y el progreso del compromiso cuando StoreKit lo proporciona:
Copiar a portapapelesLa información de renovación puede incluir el siguiente estado de compromiso:
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);}Información de renovación
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);}Utilice el nivel superior expirationDate y isActive los campos para decisiones de acceso condicional. Utilice commitmentInfo.expirationDate para explicar el plazo de compromiso completo al cliente.
Notas de revisión de la Tienda de Aplicaciones
Sección titulada “Notas de revisión de la Tienda de Aplicaciones”- Muestre tanto el precio de facturación recurrente como el precio total de compromiso antes de la compra.
- Haga explícito la longitud del compromiso cerca del botón de compra.
- Utilice
product.title,product.priceString,pricingTerms[].billingDisplayPrice, ypricingTerms[].commitmentInfo.priceStringdesde StoreKit en lugar de precios codificados - Proporcionar acciones de restaurar compras y gestionar suscripciones en la pantalla de pago o pantalla de cuenta.