iPhone SDK Compras en la aplicación

Este tutorial de iPhone SDK es el primero de una serie de varias partes sobre la venta de productos y servicios "in-app" con el marco del Kit de tienda. Espere conocer los beneficios y las limitaciones de usar la función de compra en la aplicación, los pasos necesarios para registrar el contenido "integrado en la aplicación" pagado con Apple Inc., cómo configurar un frente de tienda simple y la diferencia entre el modelo de producto incorporado. y el Modelo de Producto de Servidor para distribución de contenido y cumplimiento de pedidos..

1. Precalifique su contenido

Una de las características más poderosas lanzadas con el iPhone SDK 3 es la capacidad de procesar compras "in app". Debido a que la App Store maneja la autorización y el procesamiento de pagos en su nombre, esta función hace que la venta de bienes o servicios virtuales sea mucho más fácil, ya que los desarrolladores pueden concentrarse en crear y vender contenido excelente en lugar de las tareas de comercio electrónico más tradicionales, como el cifrado y almacenamiento de números de tarjetas de crédito o procesamiento de lotes de tarjetas de crédito. El uso de la función de compra en la aplicación también agilizará el proceso de pago para los usuarios, ya que simplemente deben ingresar su nombre de usuario y contraseña de Apple para autorizar la transacción con su cuenta de iTunes.

Por supuesto, estos beneficios vienen con una etiqueta de precio: Apple retendrá el 30% de la venta, como lo hace en todas las compras directas de la App Store. La elección de utilizar la App Store como su pasarela de pago también requerirá que cumpla con las siguientes reglas comerciales establecidas por Apple:

  • No se permiten servicios físicos o del mundo real..
    Lo sentimos, pero los comestibles, las camisetas y los lavados de autos no se pueden vender actualmente como una compra dentro de la aplicación..
  • La moneda virtual no está permitida.
    Apple no permitirá actualmente la creación de una economía virtual con una moneda intermedia directa.
  • Los artículos o servicios comprados dentro de su aplicación deben ser accedidos y utilizados dentro de su aplicación..
    Similar a la restricción de vender bienes del mundo real, esto evita que los desarrolladores vendan cosas como cupones u ofertas que se pueden canjear fuera de la aplicación..
  • No difamación, discurso de odio, pornografía o juegos de azar..
  • Apple ha publicado la siguiente lista de categorías aprobadas:
  • Contenido
    Incluye libros digitales, revistas, fotos, ilustraciones, niveles de juego, personajes del juego y otro contenido digital que se puede entregar dentro de su aplicación.
  • Funcionalidad
    Los productos desbloquean o expanden las funciones que ya ha entregado en su aplicación. Por ejemplo, podría enviar un juego con varios juegos más pequeños que el usuario podría comprar.
  • Servicios
    Permita que su aplicación le cobre a los usuarios servicios únicos, como la transcripción de voz. Cada vez que se utiliza el servicio es una compra por separado..
  • Suscripciones
    Proporcionar acceso a contenidos o servicios en una base extendida. Por ejemplo, su aplicación podría ofrecer acceso mensual a información financiera o a un portal de juegos en línea. Debe definir una frecuencia de renovación razonable para evitar molestar a los usuarios con recordatorios no deseados. Tenga en cuenta que usted es responsable tanto del seguimiento de los vencimientos de suscripciones como de la facturación de renovación; App Store no supervisa la duración de la suscripción y no ofrece un mecanismo de facturación automático..

2. Cree un nuevo proyecto de Xcode e importe el marco del kit de tienda.

El Store Kit Framework proporciona la potencia y la funcionalidad que utilizará para desarrollar sus compras dentro de la aplicación. Si bien el marco en sí no autoriza los pagos de sus usuarios, actúa como un puente entre su aplicación y Apple, lo que le permite enviar y recibir mensajes fácilmente desde la tienda de aplicaciones de iTunes..

Eche un vistazo a la siguiente ilustración de Apple Inc. para comprender mejor este concepto:

Abra Xcode y cree un nuevo proyecto de iPhone, seleccionando "Ver aplicación basada" como el tipo de aplicación predeterminado. Nombre la aplicación "InAppDemo" o inserte un título más creativo de su elección.

Haga clic con el botón derecho en la carpeta "Marcos" en el panel Grupos y archivos y seleccione Agregar -> Marcos existentes. Encuentra StoreKit.framework y haz clic en "Agregar".

Para utilizar el marco en nuestro proyecto, debemos agregarlo a la clase de controlador de vista de nuestro proyecto. Expanda la carpeta "Clases" y haga clic en InAppDemoViewController.h.

Justo debajo del comando "importar UIKit", agregue esta línea:

 #importar  

Su aplicación ahora debería poder aprovechar la funcionalidad de Store Kit Framework.

3. Registrar contenido premium con Apple Inc.

Cada producto o servicio virtual que desee vender en la aplicación debe estar registrado con Apple y se le debe asignar un identificador único de producto. Sorprendentemente, estos identificadores se generan en iTunesConnect, no en el Portal del Programa para Desarrolladores.

Para nuevas aplicaciones, esto presenta el problema clásico del "huevo o la gallina". Para poder construir su proyecto de compra en la aplicación, necesita generar identificadores de productos, pero como los identificadores de productos solo se pueden crear a través de iTunesConnect, su solicitud ya debe haber sido enviada para publicación..

La solución a este dilema es recorrer el proceso de envío de su solicitud para que Apple la revise, pero seleccione la casilla de verificación "Cargar el archivo binario de la aplicación más adelante" cuando acceda a la pestaña "Cargar". Esto colocará su aplicación en el estado "En espera de carga", que es lo que desea para evitar una revisión formal de su aplicación mientras aún está integrando y configurando sus compras dentro de la aplicación..

Inicie sesión en su cuenta de desarrollador de iPhone y navegue hasta el iPhone Provisioning Portal para comenzar el proceso de envío de una aplicación de prueba. Si aún no es miembro del Programa de desarrolladores de iPhone, deberá registrarse aquí.

Después de iniciar sesión en el Portal de aprovisionamiento, seleccione la pestaña "ID de aplicación". Haga clic en "Nueva ID de aplicación".

Deberá ingresar un nombre común y un identificador de paquete único. El nombre común se utilizará para identificar este ID de aplicación dentro del Portal de aprovisionamiento y el Identificador de paquete es un identificador único para su binario de aplicación real. Al desarrollar una aplicación que utilizará las compras dentro de la aplicación, debe utilizar un Identificador de paquete completo. No se permiten ID "comodines".

Haga clic en enviar. Volverá a la página principal de ID de aplicaciones..

Encuentre su ID de aplicación recién creada en la lista y luego haga clic en el enlace "Configurar" a la derecha de la misma.

En la pantalla "Configurar ID de aplicación", seleccione la casilla de verificación junto a "Habilitar en la compra de la aplicación" y haga clic en el botón "Listo":

Ahora debe tener un ID de aplicación único que puede usar para comenzar a desarrollar la función de compra en la aplicación con.

Ahora creará un envío de prueba de la aplicación, así que deje el portal del programa e inicie sesión en su cuenta de iTunesConnect en itunesconnect.apple.com.

Una vez en su cuenta, seleccione la opción "Administrar aplicaciones", luego seleccione "Agregar nueva aplicación" en la parte superior izquierda del panel.

Recorra las pantallas presentadas para agregar una nueva aplicación y asegúrese de seleccionar la casilla de verificación "agregar aplicación binario más adelante" en la pestaña "Cargar". En el proceso, es probable que deba cargar una imagen de prueba aleatoria para el logotipo de 512x512 y la Captura de pantalla principal.

Una vez que haya completado su envío ficticio, volverá a la página de inicio de administración de la aplicación iTunesConnect. Seleccione el envío de la aplicación que acaba de crear y luego seleccione "Administrar en compras de aplicaciones".

Para agregar su primer artículo, seleccione "CREAR NUEVO" en el botón superior izquierdo.

Ahora se le pedirá que seleccione el identificador de paquete con el que se asociarán sus compras dentro de la aplicación. Seleccione el identificador de paquete único que creó anteriormente en este tutorial y haga clic en "Continuar". Si está siguiendo estrictamente el tutorial, el identificador de paquete a seleccionar es "com.mobiletuts.inapppurchasedemo".

Ahora se le presentará un conjunto de opciones de precios en la pantalla "Crear nueva en la compra de la aplicación". Como se indica en las sugerencias de la herramienta de ayuda, el "Nombre de referencia" sirve para identificar su oferta de compra en los resultados de búsqueda de iTunesConnect y se utilizará la "Identificación del producto" para identificar su aplicación en los informes de iTunesConnect..

Apple lo alienta a elegir entre "Contenido", "Funcionalidad", "Servicios" y "Suscripciones" cuando considere las categorías posibles para sus ofertas dentro de la aplicación, pero cuando se trata de enviarlas a la tienda, se ve obligado a hacerlo. para identificar su aplicación con uno de los tres tipos completamente nuevos.

Según lo descrito por Apple Inc., estos tipos son:

  • Consumibles:
    Los productos deben comprarse cada vez que el usuario necesite ese artículo. Por ejemplo, los servicios se implementan comúnmente como productos consumibles..
  • No consumibles:
    Los productos solo pueden ser comprados una vez por los usuarios. Una vez que se compra un producto no consumible, siempre está disponible en todos los dispositivos asociados con la cuenta de iTunes de ese usuario. Los proveedores del Kit de tienda admiten restaurar productos no consumibles en otros dispositivos.
  • Suscripciones:
    Compartir atributos de productos consumibles y no consumibles. Al igual que un producto consumible, una suscripción se puede comprar varias veces; Esto le permite implementar su propio mecanismo de renovación en su aplicación. Sin embargo, las suscripciones deben proporcionarse en todos los dispositivos asociados con un usuario. En App Purchase espera que las suscripciones se entreguen a través de un servidor externo que usted proporcionará. Debe proporcionar infraestructura para entregar suscripciones a múltiples dispositivos.

Seleccione el que sea aplicable para su tipo de oferta o "Consumibles" si sigue estrictamente este tutorial. Tenga en cuenta que una vez que se establece este tipo, no se puede cambiar más adelante, así que elija sabiamente.

A continuación, establecemos el precio de oferta, que se realiza al seleccionar un nivel de precios en lugar de ingresar directamente un valor. El sistema de nivel de precios de compra en la aplicación es el mismo que el sistema de nivel de compra directo que se presentó al cargar inicialmente su aplicación, pero si desea revisar sus opciones nuevamente, haga clic en el texto "Ver matriz de precios" a la derecha del menú desplegable.

Continúe y seleccione "Nivel 1" por el precio o cualquier nivel que coincida con su oferta. Asegúrese de marcar la casilla "Borrado para la venta", aunque todavía no esté listo para iniciar su aplicación. Esta casilla debe estar marcada para depurar y probar su código.

El conjunto de campos "Mostrar detalles" le permite controlar fácilmente la localización de la oferta. Seleccione los idiomas en los que le gustaría incluir su oferta y agregue su nombre y descripción personalizados. Apple requiere una descripción significativa y específica para la aprobación de la revisión.

Por ahora, puede omitir el conjunto de campos Captura de pantalla ya que es puramente una guía para que el empleado de Apple revise su producto. Haga clic en "Guardar cambios" para registrar esta oferta con Apple. Repita este proceso para agregar artículos adicionales a la venta "en la aplicación".

Este tutorial usará los siguientes datos genéricos para nuestras ofertas, pero siéntase libre de ser tan creativo como le gustaría al insertar su propio:

Producto 1 | Consumibles | com.mobiletuts.inappdemo.1 | Tier 1
Producto 2 | Consumibles | com.mobiletuts.inappdemo.2 | El nivel 2
Producto 3 | Consumibles | com.mobiletuts.inappdemo.3 | Nivel 3

4. Construye tu frente de tienda

Una vez que haya registrado sus artículos premium con iTunesConnect, estará listo para comenzar a integrar estas ofertas en su aplicación. Para el propósito de este tutorial, usaremos un simple UITableView para mostrar nuestra lista de productos.

Vaya al archivo de encabezado de su controlador principal de vista de aplicaciones, en este caso InAppDemoViewController.h, y modifique el código para que se vea así:

 #importar  #importar  @interface InAppDemoViewController: UIViewController  NSMutableArray * productIdentifierList; NSMutableArray * productDetailsList; IBOutlet UITableView * productDisplayTableView;  @ propiedad (no atómica, retener) NSMutableArray * productIdentifierList; @ propiedad (no atómica, retener) NSMutableArray * productDetailsList; @ propiedad (no atómica, retener) UITableView * productDisplayTableView; @fin 

La matriz productIdentifierList almacenará los identificadores de producto que creamos en el Paso 3 como cadenas, mientras que productDetailsList almacenará la información del producto localizada proporcionada por App Store y que en realidad se muestra al usuario..

Ahora vaya al archivo de implementación de clase, InAppDemoViewController.m, y sintetice las variables que acaba de declarar en su archivo de encabezado:

 @implementation InAppDemoViewController @synthesize productIdentifierList, productDetailsList, productDisplayTableView; 

Descomente la función viewDidLoad e inicialice su fuente de datos:

 - (void) viewDidLoad productDetailsList = [[NSMutableArray alloc] init]; productIdentifierList = [[NSMutableArray alloc] init]; para (short item_count = 1; item_count <= 3; item_count++)  [productIdentifierList addObject:[NSString stringWithFormat:@"com.mobiletuts.inappdemo.%d", item_count]];  SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:productIdentifierList]]; request.delegate = self; [request start]; [super viewDidLoad];  

En una aplicación del mundo real, nunca querríamos poner este código de carga de compra en el método viewDidLoad porque se ejecutará en el hilo principal y bloqueará la interfaz de la aplicación brevemente mientras se recuperan los datos. Usamos viewDidLoad aquí solo para fines de demostración.

Comenzando en la línea 6, creamos un bucle for para iterar sobre la cantidad de elementos que queremos mostrar. Debido a que usamos un esquema de denominación común para nuestros identificadores de producto, podemos crear múltiples artículos sobre la marcha sin necesidad de escribir cada identificador a mano. Tenga en cuenta que este patrón se puede mejorar aún más con alguna programación de Internet: lo ideal sería que su lista de identificadores de productos se cargara desde un servidor externo para permitirle agregar o eliminar productos dinámicamente sin tener que ingresar un nuevo binario a través de la App Store cada vez..

Comenzando en la línea 10, se nos presenta nuestro primer objeto de Framework de kit de tienda, SKProductsRequest. Este objeto se usa para enviar una lista de identificadores de productos a la App Store con el fin de recibir de vuelta una lista de información de productos localizada e información precisa sobre precios de productos. Esta técnica de localización dinámica y recolección de productos le permite una flexibilidad mucho mayor que la codificación manual de estos atributos..

En la línea 12 configuramos el delegado de solicitud al que Store Kit Framework llamará después de recibir un resultado. Copie y pegue el siguiente código para cumplir con este protocolo de delegado:

 -(void) productsRequest: (SKProductsRequest *) request didReceiveResponse: (SKProductsResponse *) response [productDetailsList addObjectsFromArray: response.products]; [productDisplayTableView reloadData];  - (void) requestDidFinish: (SKRequest *) request [request release];  - (void) solicitud: (SKRequest *) solicitud didFailWithError: (NSError *) error NSLog (@ "Error al conectar con error:% @", [error localizedDescription]);  

Se llama al método productsRequest después de que la lista de productos se haya recuperado de la App Store, y asignamos esa lista de objetos del producto desde la App Store a nuestra matriz productDetailsList para su uso posterior. Los otros dos métodos de protocolo funcionan como se espera.

Ahora pasamos a configurar el UITableView que se usará para mostrar la información de nuestro producto. Comience por configurar su archivo nib en Interface Builder. Expanda la carpeta "Recursos" en el panel Grupos y archivos y haga doble clic en el archivo InAppViewController.xib para abrir Interface Builder.

Desde el panel de la biblioteca, arrastre un objeto UITableView a la ventana Controlador de vista en la aplicación. Haga clic con el botón derecho en el UITableView en la ventana y conecte la fuente de datos y delegue al propietario del archivo. Luego haga clic derecho en el propietario del archivo y conecte productDisplayTableView con el objeto UITableView. Guarda y cierra la punta..

Vuelva al archivo de implementación del controlador de vista, InAppDemoViewController.m.

Pegue las siguientes líneas para satisfacer los requisitos de los protocolos UITableViewDelegate y UITableViewDataSource:

- (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) sección return [self.productDetailsList count];  - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath static NSString * GenericTableIdentifier = @ "GenericTableIdentifier"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: GenericTableIdentifier]; if (cell == nil) cell = [[[UITableViewCell alloc] initWithFrame: CGRectZero reuseIdentifier: GenericTableIdentifier] autorelease];  Fila NSUInteger = [fila indexPath]; SKProduct * thisProduct = [productDetailsList objectAtIndex: row]; [cell.textLabel setText: [NSString stringWithFormat: @ "% @ -% @", thisProduct.localizedTitle, thisProduct.price]]; celda de retorno  

La mayor parte de esto es un código estándar para mostrar texto en celdas UITableView. Sin embargo, tenga en cuenta que creamos una instancia de SKProduct, este Producto, para recuperar los datos del producto para la fila actual, y que podemos recuperar fácilmente la información del producto localizada de los miembros de datos del objeto. Consulte la referencia oficial de Apple SKProduct para obtener más información sobre todos los miembros de datos disponibles.

Ahora debería poder compilar y ejecutar su aplicación, pero hay un problema: en App Store, las compras solo se pueden probar en un dispositivo real, por lo que tendrá que crear e instalar un perfil de aprovisionamiento para esta aplicación para probar el código.

Una vez que haya instalado su perfil de aprovisionamiento y configurado Xcode, cree y ejecute la aplicación en su dispositivo. Una vista de tabla básica con títulos de productos es demasiado simplista para su aplicación en el mundo real, pero la belleza del sistema In App Purchase es que la apariencia del escaparate depende completamente de usted. En futuros tutoriales de esta serie, se creará una interfaz más avanzada. Mientras tanto, estire su creatividad y utilice el diseño que desee para mostrar sus productos.!

5. Elija una estrategia de distribución

Antes de comenzar a autorizar transacciones y vender contenido nuevo a sus usuarios, tómese un momento para pensar en cómo se entregará ese nuevo contenido. El marco del kit de la tienda le permitirá autorizar fácilmente una compra, pero usted está solo cuando se trata de realizar el pedido. El modelo de producto incorporado y el modelo de producto de servidor son los dos patrones de diseño principales que puede elegir para garantizar que sus usuarios obtengan lo que pagan..

Modelo de producto incorporado

Con el Modelo de producto incorporado, todo lo que un usuario puede comprar ya está incluido en la aplicación cuando se descarga por primera vez. Este contenido está bloqueado u oculto para su uso hasta que se realiza una compra desde la aplicación, momento en el cual la oferta se vuelve utilizable..

El siguiente diagrama de Apple Inc. ilustra el modelo de producto incorporado:

Modelo de producto del servidor

En el Modelo de Producto del Servidor, el contenido se inserta dinámicamente en el dispositivo del usuario en el momento de la compra desde un servidor bajo su control. En el Modelo de Producto de Servidor, debe agregar el paso adicional de verificar que el recibo de transacción recibido del dispositivo cliente sea válido, y también es posible que deba configurar un mecanismo para identificar a sus usuarios para garantizar que las suscripciones y otros productos no consumibles puedan todavía se puede acceder desde cualquier dispositivo iPhone OS que posea el usuario que realiza la compra, y no solo desde el dispositivo en el que compró inicialmente el artículo (este es un requisito comercial de Apple). También es responsable de negociar la conexión de red para transferir lo que puede ser una cantidad considerable de datos de texto o multimedia.

Uno de los principales beneficios del Modelo de Producto de Servidor es que le permite vender una gran cantidad de contenido a pedido mientras mantiene reducido el tamaño de descarga inicial de su aplicación. También es mucho más rápido crear y entregar nuevo contenido premium a su aplicación, ya que no debería necesitar insertar un nuevo binario de aplicación a través de la tienda iTunes Store para ofrecer nuevos artículos a la venta..

El siguiente diagrama de Apple Inc. ilustra el Modelo de Producto de Servidor:

Como puede ver, el modelo de producto incorporado es el más simple de los dos patrones de diseño. Es más fácil de implementar y mantener, pero carece del poder de la entrega a pedido. El Modelo de Producto de Servidor es mucho más complejo, pero le permite crear contenido nuevo con mayor flexibilidad y velocidad, y también mantener el tamaño de su aplicación simplificado al proporcionar grandes descargas solo cuando sea necesario.

Tanto el Modelo de producto incorporado como el Modelo de producto de servidor se tratarán en detalle en futuras partes de esta serie..

Ahora es un buen momento para considerar estos dos modelos de distribución y determinar cuál es el mejor ajuste para su aplicación.