Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK
Code

Compras Desde Aplicación en iOS Con Swift 3

by
Difficulty:BeginnerLength:LongLanguages:

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Final product image
What You'll Be Creating

Introducción

Las compras desde aplicación son una gran característica para todos aquellos desarrolladores que quieren obtener más ingresos y ofrecer contenido extra y características a través de sus aplicaciones. Por ejemplo, para juegos puedes comprar gemas o monedas y para aplicaciones de fotografía podrías desbloquear nuevos efectos o herramientas. Y puedes hacer todo esto usando una tarjeta de crédito y otro método de pago, sin salir de la aplicación.

En este tutorial cubriré todos los pasos necesarios para crear un producto IAP Consumible y No Consumible en iTunes Connect, y te mostraré el código que necesitarás para comprar ambos elementos. He hecho un proyecto de muestra de Xcode con una etiqueta y dos botones, así que descárgalo y sigue con este tutorial para aprender como funciona.

Crea un Probador Caja de Arena en iTunes Connect

Asumo que ya has creado una aplicación iOS en la sección Mis Aplicaciones en iTunes Connect. La primer cosa que deberías hacer es crear un Probador Caja de Arena para probar IAP en tu dispositivo real (no Simulador--no soporta las compras desde aplicación).

Ingresa a Usuarios y Roles, ve a la pestaña Probador Caja de Arena y da clic en el símbolo (+) después de Probador.

Users and roles in iTunes Connect

Rellena el formulario para agregar un nuevo probador caja de arena. Una vez que has guardado tu información, regresa a la sección Mi Aplicación y da clic en el icono de tu aplicación para ingresar sus detalles y crear productos IAP.

Crea Productos IAP en iTunes Connect

Productos Consumibles

Da clic en la pestaña Características y después en el símbolo (+) después de Compras Desde Aplicación. Puedes crear un producto a la vez, así que comencemos con uno Consumible.

Select Consumable In-App Purchase

Un IAP Consumible, como su nombre sugiere, es un producto que puedes comprar varias veces. Lo usaremos para recolectar "monedas" adicionales en nuestra aplicación demostrativa.

Da clic en Crear para inicializar tu elemento IAP. En la siguiente pantalla, puedes configurar toda la información acerca de tu producto:

  • Nombre de Referencia: este nombre será usado en iTunes Connect y reportes de Ventas y Tendencias. No se mostrará en la App Store y puedes teclear cualquier nombre que quieres, pero no puede ser más largo que 64 caracteres.
  • ID de Producto: un identificador alfanumérico único que será recogido por la aplicación para reconocer tu producto. Usualmente los desarrolladores usan una sintaxis web a la inversa para ids de producto. En este ejemplo elegimos com.iaptutorial.coins. Después pegaremos este ID como cadena en nuestro código.
  • Precio: Elige el nivel de precio desde el menú desplegable. Recuerda que para que vender tu producto desde la aplicación en la App Store, debes haber aplicado para un Acuerdo de Aplicación Pagada en la sección Acuerdos, Impuestos y Banca.
  • Localizaciones: Por el bien de este tutorial solo hemos elegido Inglés, pero puedes agregar más lenguajes dando clic en el botón (+). Después teclea un Nombre para Mostrar y una Descripción. Ambos serán visibles en la App Store.
  • Captura de pantalla: Sube una captura de pantalla para revisión. No será mostrada en la App Store y debe tener un tamaño válido para tu plataforma de aplicación, así que si tu app es Universal, deberías subir una captura de pantalla de iPad.
  • Notas de Revisión: Cualquier información adicional acerca de tu IAP que pudiera ser útil para el revisador.
Create a new IAP product

Una vez que has terminado, da clic en Guardar y verás esta alerta:

Tu primera Compra desde aplicación deberá ser enviada con una nueva versión de aplicación. Seleccionala desde la sección de Compras desde Aplicación y da clic en Enviar.

Productos No Consumibles

Ahora da clic al botón Compras desde Aplicación en la lista de la izquierda, justo encima del botón Centro de Juegos, y agrega un nuevo producto IAP. Esta vez, selecciona la opción No Consumible:

Create a Non-Consumable product

Da clic en Crear y repite los pasos que mencionamos arriba. Ya que será un producto No Consumible, los usuarios podrán comprarlo solo una vez, y Apple requiere la habilidad de restaurar dichas compras. Eso sucede en el caso de que desinstales la aplicación y la vuelvas a instalar otra vez, o la descargues desde otro dispositivo con tu mismo ID Apple y necesites tener tus compras de vuelta sin pagar dos veces por ella. Así que después agregaremos una función Restaurar Compra en nuestro código.

El ID de Producto que creamos ahora es com.iaptutorial.premium, con un nivel de precio de $2.99 USD. Lo hemos llamado Unlock Premium Version.

Una vez que ha terminado de rellenar todos los campos, guarda tu producto y regresa a la página de Compras desde Aplicación. Ahora deberías tener un alista de tus dos productos, con su Nombre, Tipo, ID y Estado establecido como Listo para Enviar.

In-app Purchases list

Regresa a la página de tu aplicación dando clic en los botones de App Store y Preparar par Envío. Desplázate hacia abajo a la sección Compras desde Aplicación, justo debajo de Información General de Aplicación, y después da clic al botón (+) para agregar tus productos IAP.

Add In-App Purchases to your apps info page

Selecciónalos todos y da clic en Hecho.

Select your IAP products

Finalmente, da clic en Guardar en la esquina superior derecha de la pantalla y terminarás de configurar productos de Compras desde Aplicación en iTunes Connect.

Inicia sesión en Probador Caja de Arena en un dispositivo iOS

Antes de ir al código, hay una cosa más por hacer. Ve a  Ajustes > iTunes & App Store en tu dispositivo iOS. Si ya iniciaste sesión con tu Apple ID original, tócalo y elige Cerrar Sesión. Después simplemente ingresa con las credenciales para el probador caja de arena que creaste. Después de iniciar sesión, deberías tener una alerta como esta:

Alert from the device

Solo ignora su mensaje y después toca Cancelar. Tu dispositivo te pedirá tus credenciales de inicio de sesión otra vez mientras tratas de realizar una compra y reconocerá tu cuenta de prueba así que no se te cobrará ni un centavo a tu tarjeta de crédito por cualquier compra que realices.

Sal de Ajustes, conecta tu dispositivo a tu Mac vía el cable USB, ¡y vayamos finalmente a codificar!

El Código

Si has descargado nuestro proyecto demostrativo, verás que todo el código necesario para la Compra desde Aplicación ha sido escrito, así que si lo ejecutas obtendrás algo como esto:

Demo IAP app

Si quieres probar la aplicación, deberías cambiar el Paquete Identificador por tu propio id. De otro modo, Xcode no te permitirá ejecutar la aplicación en un dispositivo real y la app no reconocerá los dos productos IAP que has creado.

Chage Bundle ID in the General tab in XCode

Ingresa a ViewController.swift y revisa el código. Primero que nada hemos agregado una declaración importante para StoreKit y los delegados que necesitamos para dar seguimiento a los pagos de transacciones y peticiones de productos.

Después declaramos unas cuantas vistas que serán útiles.

coinsLabel y premiumLabel serán usados para mostrar los resultados de compras para ambos productos. consumaableLabel y nonConsumableLabel mostrarán la descripción y precio de cada producto IAP, los que previamente hemos creado en iTunes Connect.

Ahora es tiempo de agregar algunas variables:

Las dos primeras líneas son para llamar a nuestros IDs de producto. Es importante que esas cadenas correspondan exactamente a las que registramos en la sección de Compras desde Aplicación de iTunes Connect.

  • productID es una cadena que estaremos usando después para detectar que producto elegiremos comprar.
  • productsRequest es una instancia de SKProductsRequest, necesaria para buscar productos IAP desde tu aplicación en iTC.
  • iapProducts  es un simple arreglo de SKProducts. Por favor nota que el prefijo SK significa StoreKit, el framework iOS que estaremos usando para manejar compras.

Las dos últimas líneas cargan dos variables de tipo Boolean e Integer necesarias para dar seguimiento a compras de monedas y la versión premium, productos consumibles y no consumibles respectivamente.

El siguiente código en viewDidLoad() ejecuta unas cuantas cosas tan pronto inicia la aplicación:

Primero registramos cada compra a la consola Xcode. Después mostramos la cantidad total de monedas que compramos con el coinsLabel. Ya que estamos ejecutando la aplicación demostrativa por primera vez, mostrará COINS: 0.

La declaración if establece el texto de premiumLabel de acuerdo a si el producto no consumible fue comprado. Para empezar, mostrará Premium version LOCKED! ya que no hemos hecho la compra premium aún.

La última línea de código llama a un método que veremos después, que simplemente recoge productos que hemos almacenado previamente en iTC.

Ahora veremos lo que hacen los dos botones de compra que establecimos en nuestra aplicación demostrativa:

Ambos métodos llamarán a una función que revisará si el dispositivo puede hacer compras, y si puede, la aplicación llamará a los métodos delegados de StoreKit para procesar la compra.

Como se mencionó antes, necesitamos un tercer botón para restaurar nuestra compra no consumible. Aquí está su código:

La función IBAction está adjunta al botón Restaurar Compra en el Storyboard y comienza conectando al sistema de Compras desde Aplicación de Apple para restaurar la compra si ya se ha hecho.

paymentQueueRestoreCompletedTransactionsFinished() es el método delegado del framework StorKit que guardará nuestra variable nonConsumablePurchaseMade a verdadero después de que la compra se ha restaurado satisfactoriamente.

Terminamos con los botones, así que veamos lo que hace la función fetchAvailableProducts():

Primero creamos una instancia de NSSet, la cuál es básicamente un arreglo de cadenas de texto. Almacenaremos los dos IDs de producto que previamente declaramos ahí.

Después comenzamos un SKProductsRequest basado en esos identificadores, para que la aplicación muestre la información acerca de los productos IAP (descripción y precio), que serán procesados por este método delegado:

En la función de arriba primero tenemos que revisar si hay algún producto registrado en iTunes Connect y establecer nuestro arreglo iapProducts adecuadamente. Después podemos inicializar los dos productos SKProducts e imprimir su descripción y precio en las etiquetas.

Antes de ir al núcleo del código de Compras desde Aplicación, necesitamos un par más de funciones:

El primero revisa si nuestro dispositivo es capaz de realizar compras. La segunda función es la que llamamos desde los dos botones. Comienza con la consulta de pago y cambia nuestra variable productID en el productIdentifier seleccionado.

Ahora finalmente hemos llegado al último método delegado, el que maneja los resultados de la compra:

Esta función tiene una declaración switch que revisa cada estado del pago. El primer case es llamado si la compra ha sido realizada satisfactoriamente y completa su transacción.

Dentro de este bloque tenemos que revisar que ID de producto hemos seleccionado y realizar las acciones necesarias para actualizar nuestra aplicación--así que si nosotros el usuario compramos 10 monedas extra, agregaremos 10 a nuestra variable coins, guardamos su valor con UserDefaults, mostramos la nueva cantidad de monedas que hemos ganado  y disparamos una alerta relacionada. 

Por favor nota que puedes hacer esta compra muchas veces sin límites ya que es un IAP consumible, y no hay necesidad de una función de restauración de compra.

Similarmente, si compramos el producto no consumible premium, la aplicación establece una variable nonConsumablePurchaseMade a true, la guarda, cambia el texto de premiumLabel y dispara una alerta para notificarte que  la compra ha sido exitosa.

Los otros dos cases manejan los resultados de pago para falla y restauración. La aplicación disparará alertas por sí misma si la transacción falla por alguna razón o si has restaurado una compra no consumible.

¡Eso es! Ahora solo asegúrate de que has iniciado sesión con tus credenciales de Probador Caja de Arena y ejecuta la aplicación para probarlo. La primera vez, obtendrás una alerta como esta:

App Store Sign In alert

Elige Usar ID de Apple Existente e ingresa tu nombre de usuario y contraseña de probador de caja de arena para iniciar sesión de nuevo. Esto ocurre porque la aplicación puede reconocer solamente a un usuario real de los ajustes de iTunes & App Store, no uno de la Caja de Arena.

Una vez que has iniciado sesión, podrás realizar compras de ambos productos.

10 Coins purchase made
Non-Consumable Premium purchase made

Plantillas CodeCanyon

Si trabajas con iOS y quieres adentrarte en el lenguaje Swift y desarrollo de aplicaciones, revisa algunas de mis plantillas de aplicación iOS en CodeCanyon.

Hay cientos de otras plantillas de aplicación iOS en Envato Market también, listas para ser personalizadas y optimizar tu flujo de trabajo. ¡Ve a revisarlas! Podrías ahorrar horas de trabajo en tu siguiente aplicación.

Conclusión

En este tutorial, hemos cubierto todos los pasos necesarios para crear productos de Compras desde Aplicación en iTunes Connect y cómo escribir el código para habilitarlas en tu aplicación. ¡Espero que puedas poner este conocimiento en uso en tu siguiente aplicación iOS!

Gracias por leer, ¡y te veré la próxima vez! Por favor revisa nuestros otros cursos y tutoriales acerca de desarrollo de aplicaciones iOS con Swift.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.