Empezando
isBillingSupported()– check for StoreKit / Google Play availability.getProduct()/getProducts(): precio de obtención, título localizado, descripción, ofertas de introducción.purchaseProduct()– initiate StoreKit 2 or Billing client purchase flow.restorePurchases(): reproduce compras históricas y sincroniza con el dispositivo actual.getPurchases()– list all iOS transactions or Play Billing purchases.manageSubscriptions(): abre la interfaz de usuario de administración de suscripciones nativa.addListener('transactionUpdated'): maneja las transacciones pendientes de StoreKit 2 cuando se inicia su aplicación (solo iOS).
Mejores prácticas
Section titled “Mejores prácticas”- Mostrar precios de tienda: Apple requiere mostrar
product.titleyproduct.priceString; nunca codificar. - Use
appAccountToken– deterministically generate a UUID (v5) from your user ID to link purchases to accounts. - Validar del lado del servidor: envíe
receipt(iOS) /purchaseToken(Android) a su backend para su verificación. - Handle errors gracefully – check for user cancellations, network failures, and unsupported billing environments.
- Pruébelo minuciosamente: siga la iOS guía de entorno sandbox y la Android guía de entorno sandbox.
- Offer restore & management – add UI buttons wired to
restorePurchases()andmanageSubscriptions().
Solución de problemas
Section titled “Solución de problemas”Productos no cargando
- Asegúrese de que el ID del paquete/ID de la aplicación coincida con la configuración de la tienda.
- Confirm the product IDs are active and approved (App Store) or activated (Google Play).
- Espere varias horas después de crear productos; La propagación en la tienda no es instantánea.
Compra cancelada o atascada
- Los usuarios pueden cancelar el flujo medio; envuelva llamadas en
try/catchy muestre mensajes de error amigables. - For Android, ensure test accounts install the app from Play Store (internal track) so Billing works.
- Verifique logcat/Xcode para ver si hay errores de facturación cuando se ejecuta en el dispositivo.
Estado de suscripción incorrecto
- Use
getPurchases()to compare store data with your local entitlement cache. - On Android, always query the Google Play Developer API with the
purchaseTokento obtain expiration dates or refund status. - El iOS, consultar
isActive/expirationDatey validar recibos para detectar reembolsos o revocaciones.