BlogRight arrowTutorialRight ArrowLas compras dentro de la aplicación de iOS, parte 5: lista de códigos SKError y cómo manejarlos
BlogRight arrowTutorialRight ArrowLas compras dentro de la aplicación de iOS, parte 5: lista de códigos SKError y cómo manejarlos

Las compras dentro de la aplicación de iOS, parte 5: lista de códigos SKError y cómo manejarlos

Las compras dentro de la aplicación de iOS, parte 5: lista de códigos SKError y cómo manejarlos
Listen to the episode
Las compras dentro de la aplicación de iOS, parte 5: lista de códigos SKError y cómo manejarlos

En este post, abordaré los SKErrors: qué problemas implican y qué hacer con ellos. Para cada error, trabajaremos tres aspectos: por qué se produce, cómo manejarlo y qué mensaje mostrar en la notificación de error.

⭐️ Download our guide on in-app techniques which will make in-app purchases in your app perfect

SKError.Code.unknown, código 0

Qué significa. Se ha producido un error por un motivo desconocido.

Cómo solucionarlo. No es necesaria ninguna acción por parte de los desarrolladores. Este error también se produce en una solicitud al intentar obtener productos cuando se utiliza el simulador de iOS 14 y superior. En este caso, para obtener un producto, utiliza la prueba local StoreKit o un dispositivo/emulador real con la versión de iOS inferior a iOS 14.

Qué mensaje mostrar. Lo sentimos, la compra no está disponible por una razón desconocida. Inténtalo de nuevo más tarde

SKError.Code.clientInvalid, código 1

Qué significa. El usuario no puede realizar una compra. Por ejemplo, un niño intenta comprar algo cuando la función de control parental del dispositivo está activada.

Cómo solucionarlo. No es necesaria ninguna acción por parte de los desarrolladores.

Qué mensaje mostrar. No se puede completar la compra. Por favor, cambia tu cuenta o dispositivo.

SKError.Code.paymentCancelled, código 2

Qué significa. El usuario llegó a la pantalla de pago, pero cambió de opinión sobre la compra y pulsó "cancelar".

Cómo solucionarlo. Desde un punto de vista técnico, no se ha producido ningún error y, en este caso, no hay que hacer nada. Desde el punto de vista del marketing, puedes seguir trabajando con ese usuario, por ejemplo, ofreciéndole un descuento.

Qué mensaje mostrar. Aquí tienes dos opciones. La más fácil es no mostrar nada. Sin embargo, también puedes intentar recuperar al usuario con un mensaje como este "Has cancelado tu compra. ¿Estás interesado en probar una suscripción con descuento?"

SKError.Code.paymentInvalid, código 3

Qué significa. Por alguna razón, el pago ha fallado: la tarjeta había caducado o no había fondos suficientes para esta compra.

Cómo solucionarlo. No es necesaria ninguna acción por parte de los desarrolladores.

Qué mensaje mostrar. Tu compra ha sido rechazada. Por favor, comprueba los detalles del pago y asegúrate de que hay fondos suficientes en tu cuenta.

SKError.Code.paymentNotAllowed, código 4

Qué significa. Probablemente, esta tarjeta tiene algunas restricciones de compra disponibles: se establecen límites o la función de compra online no está disponible.

Cómo solucionarlo. No es necesaria ninguna acción por parte de los desarrolladores.

Qué mensaje mostrar. La compra no está disponible con el método de pago seleccionado. Por favor, asegúrate de que tu método de pago te permite realizar compras online.

SKError.Code.storeProductNotAvailable, código 5

Qué significa. El usuario está intentando comprar un producto que no está disponible para la región en la que se utiliza esta tienda.

Cómo solucionarlo. El desarrollador debe comprobar la disponibilidad de los productos en la tienda y la región del usuario. Para ello, puedes utilizar SKStorefront.

Qué mensaje mostrar. Este producto no está disponible en tu región. Por favor, cambia la tienda y vuelve a intentarlo.

SKError.Code.cloudServicePermissionDenied, código 6

Qué significa. El usuario no dio acceso a la información de su servicio en la nube.

Cómo solucionarlo. No es necesaria ninguna acción por parte de los desarrolladores.

Qué mensaje mostrar. Para ser sincero, nunca me he encontrado con un error semejante. En realidad, puedes escribir simplemente que la compra fue rechazada.

SKError.Code.cloudServiceNetworkConnectionFailed, código 7

Qué significa. El dispositivo no estaba conectado a Internet al realizar la compra.

Cómo solucionarlo. No es necesaria ninguna acción por parte de los desarrolladores.

Qué mensaje mostrar. La compra no puede completarse porque tu dispositivo no está conectado a Internet. Por favor, inténtalo de nuevo más tarde con una conexión a Internet estable.

Start for free

Adapty handles all SKErrors automatically,

as well as provides the server-side validation and covers all side cases

Start for free

SKError.Code.cloudServiceRevoked, código 8

Qué significa. Este dispositivo no tiene acceso al servicio de pago de StoreKit. Este error suele producirse en Sandbox.

Cómo solucionarlo. Crea un nuevo usuario de Sandbox o simplemente intenta repetir la operación.

Qué mensaje mostrar. Lo sentimos, se ha producido un error.

SKError.Code.privacyAcknowledgementRequired, código 9

Qué significa. El usuario no aceptó las condiciones de uso en la AppStore. Como se indica en la documentación, "el usuario aún no ha aceptado la política de privacidad de Apple para Apple Music". Sin embargo, parece un error, porque no hay ninguna razón para mencionar Apple Music aquí.

Cómo solucionarlo. No es necesaria ninguna acción por parte de los desarrolladores.

Qué mensaje mostrar. La compra no puede completarse porque no has aceptado las condiciones de uso de AppStore. Por favor, confirma tu consentimiento en los ajustes y a continuación regresa a la compra.

SKError.Code.unauthorizedRequestData, código 10

Qué significa. El ID de tu aplicación no contiene el derecho requerido para usar StoreKit.

Cómo solucionarlo. Debes finalizar el proceso de configuración de las compras dentro de la aplicación.

Qué mensaje mostrar. Se ha producido un error. Inténtalo de nuevo más tarde.

SKError.Code.invalidOfferIdentifier, código 11

Qué significa. El usuario está intentando comprar un producto con una oferta promocional (promo offer) incorrecta.

Cómo solucionarlo. No es necesaria ninguna acción por parte de los desarrolladores.

Qué mensaje mostrar. La oferta promocional no es válida o ha caducado.

SKError.Code.invalidSignature, código 12

Qué significa. La firma de la oferta promocional para la solicitud de StoreKit se ha generado incorrectamente.

Cómo solucionarlo. Comprueba cómo se genera la firma y corrige los errores. Si utilizas Adapty, descarga la clave de suscripción.

Qué mensaje mostrar. Lo sentimos, se ha producido un error al aplicar el código promocional. Inténtalo de nuevo más tarde.

SKError.Code.missingOfferParams, código 13

Qué significa. Los parámetros de la oferta promocional se han formado incorrectamente.

Cómo solucionarlo. Comprueba y corrige los parámetros de tu oferta promocional.

Qué mensaje mostrar. Lo sentimos, se ha producido un error al aplicar la oferta promocional. Inténtalo de nuevo más tarde.

SKError.Code.invalidOfferPrice, código 14

Qué significa. El usuario está intentando comprar un producto con un precio irrelevante. Probablemente, el precio mostrado en AppStore ya no es válido.

Cómo solucionarlo. Establece el precio actualizado de esta oferta en AppStore.

Qué mensaje mostrar. Lo sentimos, tu compra no se puede completar. Inténtalo de nuevo más tarde.

Conclusión

Un manejo de errores correcto mejora la experiencia del usuario y puede devolver al menos a algunos de los usuarios que no pudieron pagar la suscripción inmediatamente por alguna razón. Estos son los errores más comunes al implementar las compras en una aplicación de iOS:

  • SKError.Code.unknown, un error desconocido; 
  • SKError.Code.paymentCancelled, cuando el usuario cancela la compra; 
  • SKError.Code.paymentInvalid, cuando el pago no puede ser procesado.

En realidad, el manejo de errores y la implementación de compras son procesos engorrosos. Así que te recomiendo que pruebes Adapty SDK para iOS, que facilita la implementación de las compras dentro de la aplicación y proporciona otras ventajas, como el análisis de suscripciones, el análisis de cohortes (cohort analysis), las pruebas a/b (a/b testing) para los muros de pago y la verificación del recibo en el lado del servidor (server side).

Further reading

Is the App Store revenue cut too high?
Is the App Store revenue cut too high?
June 25, 2020
5 min read
Can you monetize stickers?
Can you monetize stickers?
September 21, 2021
8 min read, 1 hour listen
Adapty October updates: comparison in charts, remote config table, and more
Adapty October updates: comparison in charts, remote config table, and more
November 10, 2022
5 min read