Cómo usar la Biblioteca de Facturación Google Play con Unity

El complemento de la Facturación Google Play extiende servicios y recursos integrados de Unity para compras directas desde la aplicación, denominados Unity IAP, para proporcionar a tu juego las funciones más recientes de la Biblioteca de Facturación Google Play. En esta guía, se explica cómo configurar tu proyecto para usar el complemento. También se describe cómo implementar en Unity las funciones de la Biblioteca de Facturación en tu juego.

Cómo configurar el complemento de la Facturación Google Play

Para configurar el complemento, sigue los pasos de cada una de estas secciones vinculadas:

  1. Habilita la capa de abstracción de Unity IAP.
  2. Descarga e importa el complemento.
  3. Configura las opciones de compilación del complemento.
  4. Habilita el complemento.

Cómo habilitar la capa de abstracción de Unity IAP

El complemento de la Facturación Google Play se compila en una capa de abstracción incluida en Unity IAP, por lo que debes habilitar esa capa de abstracción antes de descargar e importar el complemento. Para habilitar la capa de abstracción de Unity IAP, haz lo siguiente:

  1. Completa todos los pasos del siguiente instructivo de Unity: Set up your project for Unity Services.
  2. Completa todos los pasos del siguiente instructivo de Unity: Enable the Unity IAP service.

Cómo descargar e importar el complemento

Los pasos que debes seguir varían según la versión de Unity que uses:

Unity 5.6 a 2018.3

Para esas versiones de Unity, se distribuye el complemento como un paquete de Unity en formato .unitypackage. Para descargar e importar el complemento, sigue estos pasos:

  1. Descarga la versión más reciente de Complementos de Google Play para Unity desde la página de versiones en GitHub del repositorio.
  2. En la barra de menú de Unity, haz clic en Assets > Import Package > Custom Package.

  3. Busca dónde se descargó el archivo .unitypackage y selecciónalo.

  4. En el diálogo Import Unity Package, deja todos los elementos seleccionados y haz clic en Import.

Después de importar el paquete, se agrega una nueva carpeta llamada GooglePlayPlugins (en la raíz de la carpeta Assets) a los recursos del proyecto. Esa carpeta contiene todos los recursos de la Biblioteca de Facturación correspondiente al complemento.

Unity 2018.4 y versiones posteriores

Para estas versiones de Unity, se distribuye el complemento a través de Game Package Registry for Unity. Para descargar e instalar el complemento, sigue estos pasos:

  1. Descarga la última versión de Game Package Registry for Unity.

  2. Importa el archivo .unitypackage. Para ello, selecciona la opción del menú de IDE de Unity Assets > Import package > Custom Package e importa todos los elementos.

  3. Cuando se te lo solicite, haz clic en Add Selected Registries para aceptar las Condiciones del Servicio de las API de Google y habilitar el Game Package Registry de Unity.

  4. Abre Window > Package Manager para ver la lista de paquetes.

  5. Si la ventana del administrador de paquetes tiene un botón de actualización, haz clic en él para cargar los paquetes.

  6. En la lista de paquetes, selecciona el paquete de la Facturación Google Play y haz clic en Install.

Cómo configurar las opciones de compilación

Debido a que el complemento extiende Unity IAP, Unity tendrá conflictos y no podrá compilar un APK para Android, a menos que se quiten de la compilación algunas dependencias antiguas que se superponen en Unity IAP. El complemento sirve para quitar automáticamente las bibliotecas conflictivas de tu proyecto. Para resolver esos conflictos, sigue estos pasos:

  1. En la barra de menú de Unity, selecciona Google > Play Billing > Build Settings.

  2. En la ventana Play Billing Build Settings, haz clic en Fix. Esta acción resuelve el conflicto y mueve los archivos conflictivos de Unity IAP a un directorio de copia de seguridad. Después de hacer clic en Fix, el botón cambia a Restore, y puedes hacer clic en él para restablecer los archivos conflictivos originales.

Cómo habilitar el complemento

Para habilitar el complemento, reemplaza la implementación de Unity IAP de Google Play por el complemento de la Facturación Google Play. Por ejemplo, cuando se usa Unity IAP Purchaser Script, debes cambiar el objeto StandardPurchaseModule que se pasa al compilador de CDA para usar Google.Play.Billing.GooglePlayStoreModule:

// Create a builder using the GooglePlayStoreModule.
    var configurationBuilder =
        ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
    

Si tu juego usa la misma versión de Purchaser Script para varias plataformas, debes agregar una verificación de plataforma a fin de garantizar que Unity siga usando su propia solución de CDA en otras plataformas:

var storeModule = StandardPurchasingModule.Instance();
    if (Application.platform == RuntimePlatform.Android)
    {
        storeModule = Google.Play.Billing.GooglePlayStoreModule.Instance();
    }
    var configurationBuilder = ConfigurationBuilder.Instance(storeModule);
    

Si publicas tu juego en otras tiendas de aplicaciones de Android además de Google Play Store, debes reemplazar la implementación predeterminada de Unity IAP solo cuando selecciones Google Play Store:

var storeModule = StandardPurchasingModule.Instance();
    if (Application.platform == RuntimePlatform.Android
           && SelectedAndoidAppStore == AppStore.GooglePlay)
    {
         storeModule = Google.Play.Billing.GooglePlayStoreModule.Instance();
    }
    var configurationBuilder = ConfigurationBuilder.Instance(storeModule);
    

Cómo implementar las funciones de la Biblioteca de Facturación Google Play en tu juego

El complemento de la Facturación Google Play extiende los servicios de Unity IAP, por lo que puedes usar las mismas API de Unity para administrar flujos de trabajo de compras comunes. Ten en cuenta que existen algunos cambios menores en el comportamiento de la API debido a diferencias entre la Biblioteca de Facturación y la implementación de CDA estándar de Unity para otras tiendas de aplicaciones. Si no conoces las API de Unity IAP, consulta la sección "Making a Purchase Script" del instructivo de Unity IAP para ver un ejemplo de cómo implementar flujos de compra básicos.

La Biblioteca de Facturación también incluye algunas funciones exclusivas de Google Play Store. Puedes acceder a esas funciones mediante una interfaz extendida. El resto de esta sección describe cómo implementar esas funciones únicas de la Biblioteca de Facturación en tu juego.

Cómo habilitar compras diferidas

Google Play admite compras diferidas, también denominadas compras o transacciones pendientes, en las que los usuarios pueden crear una compra y completarla más tarde con dinero en efectivo en tiendas físicas.

A fin de habilitar las compras diferidas, usa el compilador de CDA para modificar la configuración de tu módulo llamando al método EnableDeferredPurchase():

// Create a builder using a GooglePlayStoreModule.
    var configurationBuilder =
        ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
    // Enable deferred purchases
    configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
        .EnableDeferredPurchase();
    

Luego, implementa una devolución de llamada de compras diferidas mediante las extensiones de Play Store:

// Get the plugin extensions for the Google Play Store.
    _playStoreExtensions =
        extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

    // Set the deferred purchases callback.
    _playStoreExtensions.SetDeferredPurchaseListener(
        delegate(Product product)
        {
            // Do not grant the item here. Instead, record the purchase and remind
            // the user to complete the transaction in the Play Store.
        });
    

Cómo pasar ID de cuentas ofuscadas a Google Play

Puedes pasar ID de cuentas de usuario ofuscadas a Google Play para facilitar la detección de abusos, como detectar si varios dispositivos realizan compras en la misma cuenta en un período corto.

Para pasar un ID de cuenta ofuscada, invoca el método SetObfuscatedAccountId() desde la API de extensiones:

// Get the plugin extensions for the Google Play Store.
    _playStoreExtensions =
        extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

    // Pass an obfuscated account ID.
    _playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);
    

Cómo pasar ID de perfiles ofuscados a Google Play

Puedes pasar un ID de un perfil ofuscado a Google Play para facilitar la detección de fraudes, como detectar si varios dispositivos realizan compras en la misma cuenta en un período corto. Esto es similar a pasar un ID de cuenta de usuario ofuscada. En ambos casos, el ID representa a un solo usuario, pero el ID de perfil te permite identificar de forma única a un solo usuario que usa varios perfiles en una misma app. Después de enviar un ID de perfil ofuscado a Google Play, puedes recuperar ese ID más tarde en un recibo de compra.

Para pasar un ID de perfil ofuscado, usa el compilador de CDA para modificar la configuración de tu módulo llamando al método SetObfuscatedProfileId():

// Get the plugin extensions for the Google Play Store.
    _playStoreExtensions =
        extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

    // Pass an obfuscated profile ID.
    _playStoreExtensions.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
        .SetObfuscatedProfileId(obfuscatedProfileId);
    

Cómo confirmar cambios en el precio de las suscripciones

Google Play te permite cambiar el precio de una suscripción activa. Los usuarios de tu juego deben confirmar cualquier cambio de precio antes de que se aplique la modificación. Para solicitar a los usuarios que confirmen un cambio de precio correspondiente a su suscripción, llama al método ConfirmSubscriptionPriceChange():

// Get the plugin extensions for the Google Play Store.
    _playStoreExtensions =
        extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

    _playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
        delegate (bool success)
        {
            // Returns whether the user has accepted the new price or not.
        });
    

Cambios en el comportamiento de la API de Unity

Cuando usas el complemento de la Facturación Google Play, la mayoría de las API se comportan de la misma manera que la implementación de CDA estándar de Unity para otras tiendas de aplicaciones. Sin embargo, hay casos en los que las API se comportarán de manera diferente. En esta sección, se describen estas diferencias de comportamiento.

No se admite la carga útil para desarrolladores

Google Play dejó de usar la carga útil para desarrolladores y la reemplazó por alternativas más significativas y contextuales. Por este motivo, ya no se admite la carga útil para desarrolladores. Para obtener más información sobre las alternativas, consulta la página sobre Carga útil para desarrolladores.

Puedes seguir usando las mismas interfaces que define la implementación de CDA estándar de Unity para otras tiendas de aplicaciones, incluido IStoreControllor. Cuando inicias una compra, puedes usar IStoreControllor y llamar al método InitiatePurchase():

public void InitiatePurchase(Purchasing.Product product, string payload);
    

Sin embargo, no se aplicará ninguna carga útil que envíes (no aparecerá en el recibo final).

No se admite SubscriptionManager

Unity IAP proporciona la clase SubscriptionManager para administrar suscripciones. Debido a que la implementación de CDA estándar de Unity de esta clase usa la carga útil para desarrolladores, no se admite esta clase. Sin embargo, igual puedes crear esta clase, aunque es posible que recibas datos poco confiables cuando uses cualquiera de sus métodos get.

UpdateSubscription incluye pequeños cambios en la API

El complemento de la Facturación Google Play no admite el uso de los métodos SubscriptionManager.UpdateSubscription() y SubscriptionManager.UpdateSubscriptionInGooglePlayStore() para actualizar tus suscripciones ni cambiarlas a una versión inferior. Si tu juego invoca esos métodos, se arroja un GooglePlayStoreUnsupportedException.

La Biblioteca de Facturación proporciona una API alternativa para usar en lugar de esos métodos. Para actualizar la categoría de una suscripción, o bien cambiar a una versión inferior, llama al método UpdateSubscription() usando el modo de prorrateo:

void UpdateSubscription(Product oldProduct, Product newProduct,
               GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);
    

Puedes unir esta llamada de método con una verificación de plataforma o en un bloque de captura cuando se detecte GooglePlayStoreUnsupportedeException.

Para obtener más información y ejemplos de cómo usar el modo de prorrateo, consulta Cómo configurar el modo de prorrateo.