Conceptos básicos y configuración de compras desde la aplicación en Xamarin. iOSIn-App Purchase Basics and Configuration in Xamarin.iOS

La implementación de compras desde la aplicación requiere que la aplicación use la API de StoreKit en el dispositivo.Implementing in-app purchases requires the application to utilize the StoreKit API on the device. StoreKit administra toda la comunicación con los servidores iTunes de Apple para obtener información del producto y realizar transacciones.StoreKit manages all communication with Apple’s iTunes servers to get product information and perform transactions. El perfil de aprovisionamiento debe estar configurado para la compra desde la aplicación y la información del producto debe especificarse en iTunes Connect.The provisioning profile must be configured for in-app purchasing and product information must be entered in iTunes Connect.

El uso de App Store para proporcionar la compra desde la aplicación requiere la siguiente configuración y configuración:Using the App Store to provide in-app purchasing requires the following setup and configuration:

  • iTunes Connect : configuración de los productos para vender y configurar cuentas de usuario de espacio aislado para probar la compra.iTunes Connect – Configuring the products to sell and setting up sandbox user accounts to test purchasing. También debe haber proporcionado su información bancaria y fiscal a Apple para que puedan remitir los fondos recopilados en su nombre.You must also have provided your banking and tax information to Apple so they can remit funds collected on your behalf.
  • portal de aprovisionamiento de iOS : creación de un identificador de paquete y habilitación del acceso al almacén de aplicaciones para la aplicación.iOS Provisioning Portal – Creating a Bundle Identifier and enabling App Store access for your app.
  • Kit de tienda : agregar código a la aplicación para mostrar productos, comprar productos y restaurar transacciones.Store Kit – Adding code to your app for displaying products, purchasing products and restoring transactions.
  • Código personalizado : para realizar el seguimiento de las compras realizadas por los clientes y proporcionar los productos o servicios que han adquirido.Custom code – To track purchases made by customers and provide the products or services they’ve purchased. También es posible que necesite implementar un proceso del lado servidor para validar las confirmaciones si los productos se componen del contenido descargado de un servidor (como los libros y los problemas de la revista).You may also need implement a server-side process to validate receipts if your products consist of content downloaded from a server (such as books and magazine issues).

Hay dos "entornos de servidor" del kit de tiendas:There are two Store Kit “server environments”:

  • Producción : transacciones con dinero real.Production – Transactions with real money. Solo es accesible a través de aplicaciones enviadas y aprobadas por Apple.Only accessible via applications that have been submitted and approved by Apple. Los productos de compra desde la aplicación también deben revisarse y aprobarse antes de que estén disponibles en el entorno de producción.In-app purchase products must also be reviewed and approved before they are available on the production environment.
  • Espacio aislado : Dónde se producen las pruebas.Sandbox – Where your testing happens. Los productos están disponibles aquí inmediatamente después de la creación (el proceso de aprobación solo se aplica al entorno de producción).Products are available here immediately after creation (the approval process only applies to the Production environment). Las transacciones en el espacio aislado requieren que los usuarios de prueba (no los ID. de Apple reales) realicen transacciones.Transactions in the sandbox require test users (not real Apple IDs) to perform transactions.

Reglas de compra desde la aplicaciónIn-App Purchase Rules

No puede aceptar otras formas de pago para productos o servicios digitales dentro de la aplicación, ni mencionarlos ni hacer referencia a ellos a ellos desde dentro de una aplicación.You cannot accept other forms of payment for digital products or services inside your app, nor mention them or refer your users to them from within an app. Esto significa que no puede aceptar tarjetas de crédito ni PayPal cuando la compra desde la aplicación es el mecanismo de pago más adecuado.This means you cannot accept credit cards or PayPal when in-app purchasing is the most appropriate payment mechanism. Hay un caso especial para la compra de productos digitales fuera de la aplicación, pero para su uso en la aplicación, como los libros de compras en un sitio web que están asociados a un "Inicio de sesión" específico y el uso de ese "Inicio de sesión" en la aplicación permite que el usuario acceda a los libros comprados.There is a special case for purchasing digital products outside the app but for use in the app, such as purchasing books on a website that are associated with a specific “login” and using that “login” in the app lets the user access the purchased books. Las aplicaciones que funcionan de esta manera no pueden mencionar ni vincularse a la característica de compra externa: los desarrolladores deben comunicar esta funcionalidad a sus usuarios de otras maneras (por ejemplo, a través de marketing por correo electrónico u otro canal directo).Applications that operate this way are not allowed to mention or link to the external purchasing feature – developers must communicate this capability to their users in other ways (perhaps via email marketing or some other direct channel).

Sin embargo, puesto que no se pueden usar compras desde la aplicación para las mercancías físicas, en ese caso se permite usar un mecanismo de pago alternativo (por ejemplo,However, since you can’t use in-app purchases for physical goods, in that case you are allowed use an alternate payment mechanism (eg. tarjeta de crédito, PayPal) desde dentro de la aplicación.credit card, PayPal) from within the app.

Apple debe aprobar todos los productos antes de su venta: el nombre, la descripción y una captura de pantalla del "producto" son necesarios para su revisión.Apple must approve every product before it goes on-sale – the name, description and a screenshot of the ‘product’ is required for review. Las horas de revisión del producto son las mismas que para las revisiones de la aplicación.Product review times are the same as for application reviews.

No puede elegir ningún precio para el producto: solo puede seleccionar un "plan de tarifa" que tenga un valor específico en cada país o moneda que admita Apple.You cannot choose any price for your product – you may only select a ‘price tier’ that has a specific value in each country/currency that Apple supports. No puede tener un nivel de precios diferente en distintos mercados.You cannot have a different price tier in different markets.

ConfiguraciónConfiguration

Antes de escribir el código de compra en la aplicación, debe realizar algún trabajo de configuración en iTunes Connect ( itunesconnect.Apple.com) y en el portal de aprovisionamiento de iOS ( Developer.Apple.com/iOS).Before writing any in-app purchasing code you must do some set-up work in iTunes Connect ( itunesconnect.apple.com) and the iOS Provisioning Portal ( developer.apple.com/iOS).

Estos tres pasos se deben completar antes de escribir cualquier código:These three steps should be complete before writing any code:

  • Cuenta de desarrollador de Apple : Envíe su información bancaria e impuestos a Apple.Apple Developer Account – Submit your banking and taxation information to Apple.
  • portal de aprovisionamiento de iOS : Asegúrese de que la aplicación tiene un identificador de aplicación válido (no un carácter comodín con un asterisco * en él) y tiene habilitada la adquisición de aplicaciones.iOS Provisioning Portal – Ensure your app has a valid App ID (not a wildcard with an asterisk * in it) and has In App Purchasing enabled.
  • Administración de aplicaciones de iTunes Connect : agregar productos a la aplicación.iTunes Connect Application Management – Add products to your application.

Cuenta de desarrollador de AppleApple Developer Account

La creación y distribución de aplicaciones gratuitas requiere muy poca configuración en iTunes Connect, sin embargo, para vender aplicaciones de pago o compras desde la aplicación, es necesario proporcionar a Apple información bancaria y fiscal.Building and distributing free apps requires very little configuration in iTunes Connect, however to sell paid apps or in-app purchases requires you to provide Apple with banking and taxation information. Haga clic en contratos, impuestos y banca en el menú principal que se muestra aquí:Click on Agreements, Tax and Banking from the main menu shown here:

Su cuenta de desarrollador debe tener un contrato de aplicaciones de pago de iOS en vigor, tal como se muestra en esta captura de pantalla:Your Developer Account should have an iOS Paid Applications contract in effect, as shown in this screenshot:

No podrá probar ninguna funcionalidad de StoreKit hasta que tenga un contrato de aplicaciones de pago de iOS : las llamadas a StoreKit en el código producirán un error hasta que Apple haya procesado la información de contratos, impuestos y banca .You will not be able to test any StoreKit functionality until you have an iOS Paid Applications contract – StoreKit calls in your code will fail until Apple has processed your Contracts, Tax, and Banking information.

Portal de aprovisionamiento de iOSiOS Provisioning Portal

Las nuevas aplicaciones se configuran en la sección identificadores de aplicaciones del portal de aprovisionamiento de iOS.New applications are set up in the App IDs section of the iOS Provisioning Portal. Para crear un nuevo identificador de aplicación, vaya al centro de usuarios del portal de aprovisionamiento de iOS, vaya a certificados, identificadores y perfiles sección del portal y haga clic en identificadores en aplicaciones iOS.To create a new App ID, go to the Member Center of the iOS Provisioning Portal, navigate to Certificates, Identifiers, and Profiles section of the Portal, and click on Identifiers under iOS Apps. A continuación, haga clic en "+" en la parte superior derecha para generar un nuevo identificador de aplicación.Then, click the "+" on the top right to generate a new App ID.

El formulario para crear nuevos identificadores de aplicaciónThe form for creating new App IDs

tiene el siguiente aspecto:looks like this:

Escriba algo apropiado para la Descripción, de modo que pueda identificar fácilmente este identificador de aplicación en una lista.Enter something appropriate for the Description, so you can easily identify this App ID in a list. En el Prefijo de ID. de aplicación, seleccione el identificador del equipo.For the App ID Prefix, select the Team ID.

Identificador de paquete/formato de sufijo de ID. de aplicaciónBundle Identifier/App ID Suffix Format

Puede usar cualquier cadena que desee para su identificador de lote (siempre que sea único en su cuenta); sin embargo, Apple recomienda seguir el formato de DNS inverso en lugar de usar cualquier cadena arbitraria.You can use any string you like for your Bundle Identifier (as long as it’s unique in your account), however Apple recommends you follow the reverse-DNS format rather than use any arbitrary string. La aplicación de ejemplo que acompaña a este artículo usa com. Xamarin. storekit. Testing para el identificador de paquete, pero sería igualmente válido usar un identificador como my_store_example (aunque Apple no lo recomiende).The sample application that accompanies this article uses com.xamarin.storekit.testing for the Bundle Identifier, however it would be equally valid to use an identifier like my_store_example (even though Apple doesn’t recommend it).

Importante

Apple también permite agregar asteriscos comodín al final de un identificador de paquete para que se pueda usar un único identificador de aplicación para varias aplicaciones. sin embargo, los identificadores de aplicación de la tarjeta no se pueden usar para in-AppPurchase.Apple also allows wild-card asterisk to be added to the end of a Bundle Identifier so that a single App ID can be used for multiple applications, however wild-card App IDs cannot be used for In-AppPurchase. Un identificador de lote de tarjetas comodín de ejemplo podría ser com. Xamarin. *An example wild-card Bundle Identifier might be com.xamarin.*

Habilitar App ServicesEnabling App Services

Tenga en cuenta que la compra desde la aplicación se habilitará automáticamente en la lista de servicios:Note that In-App Purchase will be automatically enabled in the Services list:

Perfiles de aprovisionamientoProvisioning Profiles

Cree perfiles de aprovisionamiento de desarrollo y producción como lo haría normalmente, seleccionando el identificador de aplicación que ha configurado para la compra desde la aplicación.Create Development and Production Provisioning Profiles as you normally would, selecting the App ID that you’ve set up for In-App Purchasing. Consulte las guías aprovisionamiento de dispositivos iOS y publicación en la tienda de aplicaciones para obtener más información.Refer to the iOS Device Provisioning and Publishing to the App Store guides for more information.

iTunes ConnectiTunes Connect

Haga clic en mis aplicaciones en iTunes Connect para crear o editar una entrada de aplicación de iOS.Click My Apps in iTunes Connect to create or edit an iOS application entry. La página información general de la aplicación se muestra aquí:The application overview page is shown here:

Haga clic en compras desde la aplicación para crear o editar productos para su venta.Click In-App Purchases to create or edit your products for sale. En esta captura de pantalla se muestra la aplicación de ejemplo con varios productos ya agregados:This screenshot shows the sample app with several products already added:

El proceso para agregar nuevos productos tiene dos pasos:The process to add new products has two steps:

  1. Elija el tipo de producto:Choose the product type:
  2. Escriba los atributos del producto, incluido el ID. de producto, el plan de tarifa y las descripciones localizadas:Enter the product’s attributes, including the Product Id, pricing tier and localized descriptions:

Los campos necesarios para cada producto de compra desde la aplicación se describen a continuación:The fields required for each in-app purchase product are described below:

Nombre de referenciaReference Name

El nombre de referencia no se muestra a los usuarios; es para uso interno y solo aparece en iTunes Connect.The Reference Name is not displayed to your users; it is for internal use and only appears in iTunes Connect.

Formato de ID. de productoProduct ID Format

Un identificador de producto solo puede contener caracteres alfanuméricos (A-Z, a-z, 0-9), subrayado () y punto (.).A Product Identifier can only contain alphanumeric (A-Z,a-z,0-9), underscore (), and period (.) characters. Aunque puede usar cualquier cadena para los identificadores, Apple recomienda el formato DNS inverso.Although you can use any string for your identifiers, Apple recommends the reverse-DNS format. Por ejemplo, la aplicación de ejemplo usa este identificador de paquete:For example, the sample application uses this Bundle Identifier:

com.xamarin.storekit.testing

Por lo tanto, la Convención para identificar productos de compra en la aplicación sería la siguiente:Therefore the convention to identify in-app purchase products would be as follows:

com.xamarin.storekit.testing.consume5credits
com.xamarin.storekit.testing.consume10credits
com.xamarin.storekit.testing.sepia
com.xamarin.storekit.testing.greyscale

Esta Convención de nomenclatura no se aplica, solo una recomendación para ayudarle a administrar sus productos.This naming convention is not enforced, simply a recommendation to help you manage your products. Además, a pesar de seguir la misma Convención de DNS inverso, los identificadores de producto no están relacionados con el identificador de paquete y no se necesitan para empezar con la misma cadena.Further, despite following the same reverse-DNS convention, the Product Identifiers are not related to the Bundle Identifier and are not required to start with the same string. Todavía sería válido usar identificadores como photo_product_greyscale (aunque Apple no lo recomiende).It would still be valid to use identifiers like photo_product_greyscale (even though Apple doesn’t recommend it).

El identificador de producto no se muestra a los usuarios, pero se usa para hacer referencia al producto en el código de la aplicación.Product ID is not displayed to your users, but it is used to reference the product in your application code.

Tipo de productoProduct Type

Hay cinco tipos de productos de compra desde la aplicación que puede ofrecer:There are five types of in-app purchase product you can offer:

  1. Consumible : cosas que se "usan", como la moneda del juego que el jugador puede gastar.Consumable – Things that are ‘used up’, such as in-game currency that the player can spend. Si el usuario realiza una copia de seguridad o una restauración, o si se actualiza su dispositivo, no se restaura también una transacción consumible (lo que haría que el reproductor se conferira la misma ventaja).If the user does a backup/restore or otherwise has their device refreshed, a consumable transaction does NOT get restored as well (which would effectively give the player the same benefit over again). El código de aplicación debe asegurarse de proporcionar el ' elemento consumible ' en cuanto se complete la transacción.Application code must be sure to provide the ‘consumable item’ as soon as the transaction is completed.
  2. No consumible : productos que el usuario posee una vez comprados, como un problema de la revista digital o un nivel de juego.Non-consumable – Products that the user ‘owns’ once purchased, such as a digital magazine issue or a game level.
  3. Suscripciones renovables automáticamente: al igual que una suscripción de revista del mundo real, al final del período de suscripción, Apple cobra automáticamente el cliente de nuevo y amplía el período de suscripción, siempre o hasta que el cliente lo cancela explícitamente.Auto-Renewable Subscriptions – Just like a real-world magazine subscription, at the end of the subscription period Apple automatically charges the customer again and extends the subscription term, forever or until the customer explicitly cancels it. Este es el método de pago preferido para las aplicaciones de NewsStand (de hecho, las aplicaciones deben admitir este método de pago para su aprobación para la distribución de NewsStand).This is the preferred payment method for Newsstand apps (in fact, apps MUST support this payment method to be approved for Newsstand distribution).
  4. Suscripción gratuita : solo se puede ofrecer en aplicaciones habilitadas para NewsStand y permite que el cliente tenga acceso al contenido de la suscripción en todos sus dispositivos.Free Subscription – Can only be offered in Newsstand-enabled apps, and allows the customer to access subscription content on all their devices. Las suscripciones gratuitas nunca expiran.Free subscriptions never expire.
  5. Suscripción sin renovación : debe usarse para vender acceso limitado de tiempo a contenido estático, como el acceso de un mes a un archivo de fotografías.Non-Renewing Subscription – Should be used to sell time-limited access to static content, such as one month’s access to a photo archive.

Actualmente, en este documento solo se tratan los dos primeros tipos de productos (consumibles y no consumibles).This document currently covers only the first two product types (Consumable and Non-Consumable).

Planes de tarifaPrice Tiers

La tienda de aplicaciones no le permite elegir un precio arbitrario para los productos: Apple proporciona niveles de precio fijos entre los que puede elegir.The App Store does not let you choose an arbitrary price for your products – Apple provides fixed price tiers that you can choose from. Los precios se fijan en cada moneda y Apple se reserva el derecho de ajustar los precios relativos (por ejemplo, después de un cambio sostenido en la tasa de cambio de divisa relativa entre una moneda determinada y el dólar estadounidense).Prices are fixed in each currency, and Apple reserves the right to adjust the relative prices (for example, after a sustained change in the relative foreign exchange rate between a particular currency and the US Dollar).

Apple proporciona una matriz de precios para ayudarle a seleccionar el nivel correcto de la moneda o el precio que desee.Apple provides a price matrix to help you select the correct tier for the currency/price that you want. A continuación se muestra un extracto de la matriz de precios (2012 de agosto):An excerpt of the price matrix (August 2012) is shown here:

En el momento de la escritura (2013 de junio), hay 87 niveles de 0,99 USD a 999,99 USD.At the time of writing (June 2013) there are 87 tiers from USD 0.99 to USD 999.99. La matriz de precios muestra el precio que los clientes pagarán y también el importe que recibirá de Apple: se trata de un descuento del 30% y también de los impuestos locales que se necesitan para recopilar (observe en el ejemplo que los vendedores de Estados Unidos y Canadá reciben 70C para 99C p producto, mientras que los vendedores de Australia solo reciben 63c debido a «bienes & los impuestos sobre los servicios» aplicados al precio de venta).The Pricing Matrix shows the price that your customers will pay and also the amount you will receive from Apple – this is less their 30% charge and also any local taxes they are required to collect (notice in the example that U.S. and Canadian sellers receive 70c for a 99c product, while Australian sellers receive only 63c due to ‘Goods & Services Tax’ levied on the sale price).

Los precios del producto pueden actualizarse en cualquier momento, incluidos los cambios de precio programados que se aplican en una fecha futura.Your product’s pricing can be updated at any time, including scheduled price changes that take effect on a future date. En esta captura de pantalla se muestra cómo se agrega un cambio de precio con fecha futura: el precio se cambia temporalmente de nivel 1 a nivel 3 para el mes de septiembre únicamente:This screenshot shows how a future-dated price change is added – the price is being temporarily changed from tier 1 to tier 3 for the month of September only:

Productos gratuitos no admitidosFree Products Not Supported

Aunque Apple ha proporcionado una opción de suscripción gratuita especial para las aplicaciones de NewsStand, no es posible establecer un precio cero (gratuito) para cualquier otro tipo de compra en la aplicación.Although Apple has provided a special Free Subscription option for Newsstand apps, it is not possible to set a zero (free) price for any other in-app purchase types. Aunque puede editar los precios (IE. Lower) de promociones de ventas, no puede realizar compras desde la aplicación "gratis" a través de iTunes Connect.While you can edit (ie. lower) prices for sales promotions, you cannot make in-app purchases ‘free’ via iTunes Connect.

LocalizaciónLocalization

En iTunes Connect puede escribir un nombre diferente y texto descriptivo para cualquier número de idiomas admitidos.In iTunes Connect you can enter different Name and Description text for any number of supported languages. Cada idioma se puede Agregar o editar en a través de un elemento emergente:Each language can be added/edited in via a popup:

Cuando se muestra información del producto en la aplicación, el texto localizado está disponible para que se muestre a través de StoreKit.When you display product information in your app, the localized text is available for you to display via StoreKit. La presentación de la moneda también debe estar localizada para mostrar el símbolo y el formato decimal correctos; este formato se trata más adelante en el documento.The currency display must also be localized to show the correct symbol and decimal formatting – this formatting is covered later in the document.

Revisión de App StoreApp Store Review

Igual que las aplicaciones: Apple revisa todos los productos antes de que se les permita su venta.Same as apps – each product is reviewed by Apple before being allowed to go on-sale. Es posible que se rechacen los productos por contenido inadecuado en el nombre o la descripción, o que Apple decida que ha elegido el tipo de producto incorrecto (por ejemplo,Products may be rejected for inappropriate content in the Name or Description, or Apple may decide that you’ve chosen the wrong product type (eg. ha creado un problema de libro o revista pero ha usado el tipo de producto consumible).you’ve created a book or magazine issue but used the Consumable product type). Las revisiones del producto pueden tardar tanto como una revisión de la aplicación.Product reviews can take as long as an app review.

La primera vez que se envía una aplicación con la opción de compra desde la aplicación habilitada (ya sea una nueva aplicación o se ha agregado la funcionalidad a una existente), también debe elegir algunos productos para enviarlos.The first time an app is submitted with in-app purchasing enabled (whether it’s a new app, or the functionality has been added to an existing one) you must also choose some products to submit with it. El portal de iTunes Connect le pedirá que lo haga, tal como se muestra en esta captura de pantalla:The iTunes Connect portal will prompt you to do this, as shown in this screenshot:

La aplicación y las compras desde la aplicación se revisarán juntas, de modo que todos se aprueben a la vez (de modo que la aplicación no vaya al almacén sin ningún producto aprobado).The application and the in-app purchases will be reviewed together, so that they all get approved at once (so that app doesn’t go into the store without any approved products!).

Una vez aprobada su primera versión con la funcionalidad de compra desde la aplicación, puede agregar más productos y enviarlos para su revisión en cualquier momento.After your first version with in-app purchase capability has been approved, you can add further products and submit them for review at any time. También puede optar por enviar una nueva versión junto con productos específicos de compras desde la aplicación, mediante la página de detalles de la versión , como sugiere la solicitud.You can also choose to submit a new version together with specific in-app purchase products, using the Version Details page as the prompt suggests.

Consulte las directrices de revisión del App Store para obtener más información.Refer to the App Store Review Guidelines for more information.

Parte 2: Introducción al kit de almacenamiento y recuperando información del productoPart 2 - Store Kit Overview and Retreiving Product Information