Gestión de errores en Unity SDK
Todos los errores que devuelve el SDK son de tipo AdaptyErrorCode. Aquí tienes un ejemplo:
Activa los logs detallados antes de depurar. La mayoría de los AdaptyErrors envuelven un error subyacente de StoreKit, Play Billing, de red o de backend. Con los logs detallados activados (Adapty.SetLogLevel(AdaptyLogLevel.Verbose, ...) — ver Logging), ese error subyacente se imprime en la consola, lo que normalmente te indica la causa real.
Si estas soluciones no resuelven tu problema, consulta Otros problemas para ver los pasos que debes seguir antes de contactar con soporte y ayudarnos a asistirte de forma más eficiente.
using AdaptySDK;
Adapty.MakePurchase(product, (result, error) => {
if (error != null && error.Code == AdaptyErrorCode.CantMakePayments) {
// In-app purchases are not allowed on this device
}
});
Una compra cancelada por el usuario no es un error. MakePurchase lo indica a través del resultado: result.Type es AdaptyPurchaseResultType.UserCancelled — consulta Realizar compras.
Códigos de sistema StoreKit
| Error | Código | Solución |
|---|---|---|
| unknown | 0 | Código de error que indica que ocurrió un error desconocido o inesperado. Vuelve a intentarlo o consulta la sección Otros problemas. |
| clientInvalid | 1 | Este código de error indica que el cliente no tiene permiso para realizar la acción solicitada. |
| paymentCancelled | 2 | Este código de error indica que el usuario canceló una solicitud de pago. No se requiere ninguna acción, aunque a nivel de lógica de negocio puedes ofrecer un descuento al usuario o recordárselo más adelante. |
| paymentInvalid | 3 | Este error indica que el App Store no reconoció uno de los parámetros del pago. |
| paymentNotAllowed | 4 | Este código de error indica que el usuario no tiene permiso para autorizar pagos. |
| storeProductNotAvailable | 5 | Este código de error indica que el producto solicitado no está disponible en el store. Prueba a reinstalar la app. |
| cloudServicePermissionDenied | 6 | Este código de error indica que el usuario no ha permitido el acceso a la información del servicio en la nube. |
| cloudServiceNetworkConnectionFailed | 7 | Este código de error indica que el dispositivo no pudo conectarse a la red. |
| cloudServiceRevoked | 8 | Este código de error indica que el usuario ha revocado el permiso para usar este servicio en la nube. |
| privacyAcknowledgementRequired | 9 | Este código de error indica que el usuario aún no ha aceptado la política de privacidad de Apple. |
| unauthorizedRequestData | 10 | Este código de error indica que la app intenta usar una propiedad para la que no tiene el entitlement requerido. |
| invalidOfferIdentifier | 11 | El Asegúrate de configurar las ofertas deseadas en App Store Connect y de pasar un identificador de oferta válido. |
| invalidSignature | 12 | Este código de error indica que la firma en un descuento de pago no es válida. |
| missingOfferParams | 13 | Este código de error indica que faltan parámetros en un descuento de pago. |
| invalidOfferPrice | 14 | Este código de error indica que el precio especificado en App Store Connect ya no es válido. Las ofertas deben representar siempre un precio con descuento. |
Códigos personalizados de Android
| Error | Code | Solution |
|---|---|---|
| adaptyNotInitialized | 20 | Debes configurar correctamente el SDK de Adapty mediante el método Adapty.activate. Aprende cómo hacerlo para Unity. |
| productNotFound | 22 | Este error indica que el producto solicitado para la compra no está disponible en el store. |
| invalidJson | 23 | El JSON del paywall no es válido. Corrígelo en el Adapty Dashboard. Consulta el tema Personalizar el paywall con Remote Config para más detalles sobre cómo solucionarlo. |
| currentSubscriptionToUpdateNotFoundInHistory | 24 | No se encuentra la suscripción original que debe renovarse. |
| pendingPurchase | 25 | Este error indica que el estado de la compra está pendiente en lugar de completado. Consulta la página Handling pending transactions en la documentación de Android Developer para más detalles. |
| billingServiceTimeout | 97 | Este error indica que la solicitud alcanzó el tiempo de espera máximo antes de que Google Play pudiera responder. Esto puede deberse, por ejemplo, a un retraso en la ejecución de la acción solicitada por la llamada a la Play Billing Library. |
| featureNotSupported | 98 | La función solicitada no es compatible con Play Store en el dispositivo actual. |
| billingServiceDisconnected | 99 | Este error fatal indica que la conexión de la app cliente al servicio de Google Play Store a través del BillingClient ha sido interrumpida. |
| billingServiceUnavailable | 102 | Este error transitorio indica que el servicio de facturación de Google Play no está disponible actualmente. En la mayoría de los casos, significa que hay un problema de conexión de red en algún punto entre el dispositivo cliente y los servicios de Google Play Billing. |
| billingUnavailable | 103 | Este error indica que se produjo un error de facturación del usuario durante el proceso de compra. Algunos ejemplos de cuándo puede ocurrir: 1. La app de Play Store en el dispositivo del usuario está desactualizada. 2. El usuario se encuentra en un país no compatible. 3. El usuario es un empleado de empresa y su administrador ha deshabilitado las compras para los usuarios. 4. Google Play no puede cargar el método de pago del usuario. Por ejemplo, es posible que la tarjeta de crédito del usuario haya vencido. 5. El usuario no ha iniciado sesión en la app de Play Store. |
| developerError | 105 | Este es un error fatal que indica que estás usando una API de forma incorrecta. |
| billingError | 106 | Este es un error fatal que indica un problema interno con el propio Google Play. |
| itemAlreadyOwned | 107 | El producto consumible ya ha sido comprado. |
| itemNotOwned | 108 | Este error indica que la acción solicitada sobre el artículo falló sin |
Códigos personalizados de StoreKit
| Error | Código | Solución |
|---|---|---|
| noProductIDsFound | 1000 | Este error indica que ninguno de los productos que solicitaste en el paywall está disponible para su compra en el App Store, aunque estén listados allí. A veces puede ir acompañado de una advertencia Si encuentras este error, sigue los pasos de la sección Solución para el error Code-1000 |
| productRequestFailed | 1002 | No se pueden obtener los productos disponibles en este momento. Posible motivo: - Todavía no se ha creado caché y tampoco hay conexión a internet. |
| cantMakePayments | 1003 | Las compras in-app no están permitidas en este dispositivo. Consulta la guía de solución de problemas. |
| cantReadReceipt | 1005 | No hay ningún recibo válido disponible en el dispositivo. Esto puede ocurrir durante las pruebas en sandbox. No es necesario hacer nada, pero en términos de lógica de negocio, puedes ofrecer un descuento al usuario o recordárselo más adelante. |
| productPurchaseFailed | 1006 | La compra del producto falló. Este error envuelve un error subyacente de StoreKit — lee el error anidado (o activa los logs detallados para verlo en la consola) para conocer el motivo real. El error anidado suele ser uno de los códigos StoreKit del 0 al 14 de la tabla anterior — los más comunes son paymentCancelled, paymentInvalid, paymentNotAllowed o invalidOfferPrice. Si no puedes identificar un motivo concreto, prueba con un nuevo perfil de sandbox; si sigue fallando, contacta con el soporte de Apple. |
| refreshReceiptFailed | 1010 | Este error indica que no se recibió el recibo. Solo aplica a StoreKit 1. |
| fetchSubscriptionStatusFailed | 1020 | El SDK no pudo leer el estado de la suscripción desde el store. Reintenta la llamada y consulta la sección Otros problemas. |
Códigos de red personalizados
| Error | Código | Solución |
|---|---|---|
| notActivated | 2002 | El SDK de Adapty no está activado. Suele ocurrir cuando una pantalla de inicio o un hook de script temprano llama a métodos de Adapty antes de que Adapty.Activate finalice. El síntoma es intermitente y puede no reproducirse en el editor porque el timing en dispositivo real es diferente. Espera al callback de finalización de Activate antes de programar cualquier otra llamada al SDK. Consulta Orden de llamadas en el SDK de Unity para ver la secuencia completa. |
| badRequest | 2003 | Solicitud incorrecta. Asegúrate de haber completado todos los pasos necesarios para integrarte con el App Store. |
| serverError | 2004 | Error del servidor. Inténtalo de nuevo pasado un tiempo. Si el problema persiste, contacta con el equipo de soporte de Adapty. |
| networkFailed | 2005 | Este error indica problemas con la conexión de red en el dispositivo del usuario. Prueba a desactivar la VPN o a cambiar de red móvil a WiFi o viceversa. |
| decodingFailed | 2006 | Este error indica que la decodificación de la respuesta ha fallado. Revisa tu código y asegúrate de que los parámetros que envías son válidos. Por ejemplo, este error puede indicar que estás usando una clave de API no válida. |
| encodingFailed | 2009 | Este error indica que la codificación de la solicitud ha fallado. |
| analyticsDisabled | 3000 | No podemos gestionar eventos de analítica porque has desactivado esta opción. |
| wrongParam | 3001 | Este error indica que algunos de tus parámetros no son correctos. Si estás usando el Paywall Builder de Adapty y no puedes mostrar un paywall por este error, activa Show on device en el Paywall Builder. Otro motivo posible es que la versión del archivo fallback local no coincida con la versión del SDK. Descarga un nuevo archivo desde el dashboard. |
| activateOnceError | 3005 | No es posible llamar al método .activate más de una vez. |
| profileWasChanged | 3006 | El perfil de usuario cambió durante la operación. Ocurre cuando se llama a un método mientras Adapty.Identify aún está en curso: la llamada en vuelo aterriza sobre un perfil que está a punto de reemplazarse y el SDK la rechaza. Espera al callback de finalización de Identify antes de cualquier llamada relacionada con acciones del usuario. Consulta Orden de llamadas en el SDK de Unity. |
| unsupportedData | 3007 | Este error indica que el formato de datos no es compatible con el SDK. |
| fetchTimeoutError | 3101 | Este error indica que la operación de obtención de datos ha superado el tiempo de espera. |
| operationInterrupted | 9000 | Esta operación fue interrumpida por el sistema. Vuelve a intentar la llamada. |
Otros problemas
Si todavía no has encontrado una solución, los siguientes pasos pueden ser:
- Actualizar el SDK a la última versión: Siempre recomendamos actualizar a las últimas versiones del SDK, ya que son más estables e incluyen correcciones de problemas conocidos.
- Contacta con el equipo de soporte u obtén ayuda de otros desarrolladores en el foro de soporte.
- Contacta con el equipo de soporte en support@adapty.io o por el chat: Si no puedes actualizar el SDK o la actualización no ha resuelto el problema, contacta con nuestro equipo de soporte. Ten en cuenta que tu problema se resolverá más rápido si activas el registro detallado y compartes los registros con el equipo. También puedes adjuntar fragmentos de código relevantes.