Compra de productos no consumibles en Xamarin.iOS

Los productos no consumibles son ‘propiedad’ del cliente. La expectativa es que siempre tendrán acceso a ellos, incluso si su dispositivo se pierde o roba o compra uno nuevo. Son útiles para libros, revistas, niveles de juego, filtros de fotos, ‘características’ profesionales, etc. Una vez que un usuario ha comprado un producto no consumible, no tiene que volver a pagar por él. Si el código los permite probar accidentalmente, StoreKit mostrará un mensaje que ya se ha comprado.

Ejemplo de productos no consumibles

El ejemplo contiene un proyecto denominado NonConsumables. En el ejemplo de código se muestra cómo implementar productos no consumibles mediante filtros fotográficos como ejemplo. Una vez que haya comprado un filtro, puede aplicarlo a la foto una y otra vez. Nunca tiene que volver a comprarlo.

El proceso de compra se muestra en esta serie de capturas de pantalla: el botón Comprar se convierte en el botón de activación de funciones:

El proceso de compra se muestra en esta serie de capturas de pantalla

El proceso de compra es el mismo que un producto consumible; la diferencia clave es la forma en que se realiza el seguimiento de la compra en el código de la aplicación. En este ejemplo, el botón Comprar solo está disponible si el producto aún no se ha comprado; de lo contrario, el botón activa la propia característica.

En el siguiente diagrama se muestran las interacciones entre las clases y el servidor de App Store para realizar una compra de productos no consumibles:

Interacciones entre las clases y el servidor de App Store para realizar una compra de productos no consumibles

La diferencia clave del ejemplo consumible es que una vez completada la compra, la interfaz de usuario se actualiza para evitar la readquisición. En este ejemplo, la notificación de una transacción correcta actualiza la interfaz de usuario para que el botón Comprar se convierta en un botón que active la propia característica.

Volver a comprar productos no consumibles

El código normalmente debe ocultar o reutilizar un botón de compra una vez que el producto se haya comprado correctamente, para evitar que el usuario intente volver a comprar el producto. La aplicación de ejemplo lo hace cambiando el botón Comprar en el botón que hace que el filtro de fotos de ejemplo funcione.

Hay situaciones en las que una aplicación no puede saber si ya se ha adquirido un producto no consumible:

  • Si se elimina una aplicación y se vuelve a instalar en un dispositivo, todos los registros de compra se eliminarán (a menos que el usuario realice una restauración de copia de seguridad).
  • Si el usuario tiene instalada la aplicación en dos (o más) dispositivos y realiza una compra en uno de los dispositivos. Los otros dispositivos seguirán mostrando el producto disponible para su compra.
  • Si un cliente intenta volver a comprar un producto no consumible en estas situaciones, app Store volverá a cumplir el producto sin cargo alguno. La interfaz de usuario aparecerá inicialmente para realizar una compra (por ejemplo, se muestra una alerta de confirmación y se requerirá el identificador de Apple), pero el usuario verá un mensaje que le indicará que el producto ya se ha comprado.

La ruta de acceso del código en este escenario es exactamente la misma que una compra normal, las únicas diferencias son:

  • El usuario no se vuelve a cobrar por el producto.
  • El objeto SKPaymentTransaction pasado a la aplicación tendrá una propiedad OriginalTransaction que hace referencia a la transacción que se generó cuando el producto se compró inicialmente.
  • Las aplicaciones que venden productos no consumibles también deben implementar la característica Restaurar de StoreKit para ayudar a los usuarios a recuperar las compras existentes.