Version: 2017.2
Cross-store installation issues with Android in-app purchase stores
Universal Windows Platform

iOS & Mac App Stores

Funcionalidad extendida

Leyendo el App Receipt

Un App Receipt se almacena en el almacenamiento local del dispositivo y se puede leer como sigue:

var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
string receipt = builder.Configure<IAppleConfiguration>().appReceipt;

Revisando por restricciones de pagos

Los In App Purchases se pueden restringir en las configuraciones de un dispositivo, el cual se pueden marcar como sigue:

var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
bool canMakePayments = builder.Configure<IAppleConfiguration>().canMakePayments;

Recuperando Transacciones

En plataformas Apple, los usuarios deben ingresar su clave para recuperar transacciones pasadas por lo que su aplicación debe proporcionarle a los usuarios un botón que le permita hacer esto. Durante este proceso el método ProcessPurchase de su IStoreListener será invocado para cualquier item que el usuario sea dueño.

/// <summary>
/// Your IStoreListener implementation of OnInitialized.
/// </summary>
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
    extensions.GetExtension<IAppleExtensions> ().RestoreTransactions (result => {
        if (result) {
            // This does not mean anything was restored,
            // merely that the restoration process succeeded.
        } else {
            // Restoration failed.
        }
    });
}

Actualizando el App Receipt

Apple provides a mechanism to fetch a new App Receipt from their servers, typically used when no receipt is currently cached in local storage; SKReceiptRefreshRequest.

Tenga en cuenta que esto le solicitará al usuario por su contraseña.

Unity IAP hace que este método esté disponible como sigue:

/// <summary>
/// Your IStoreListener implementation of OnInitialized.
/// </summary>
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
    extensions.GetExtension<IAppleExtensions> ().RefreshAppReceipt (receipt => {
        // This handler is invoked if the request is successful.
        // Receipt will be the latest app receipt.
        Console.WriteLine(receipt);
    },
    () => {
        // This handler will be invoked if the request fails,
        // such as if the network is unavailable or the user
        // enters the wrong password.
    });
}

Ask to Buy (preguntar para comprar)

iOS 8 introduced a new parental control feature; Ask to Buy

Ask to buy le permite a una In App Purchase en que sea diferida a un padre para su aprobación. Cuando esto ocurre, Unity IAP le enviará a su App una notificación si se registra para ser notificado como sigue.

/// <summary>
/// This will be called when Unity IAP has finished initialising.
/// </summary>
public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
{
    extensions.GetExtension<IAppleExtensions>().RegisterPurchaseDeferredListener(product => {
        Console.WriteLine(product.definition.id);
    });
}

Si y cuando la compra es aprobada o rechazada, se invocará los métodos normales de ProcessPurchase / OnPurchaseFailed de su listener de la tienda.

Probando

Para probar en las tiendas Apple usted debe estar utilizando una cuenta de iTunes Connect Test, la cual puede ser creada en iTunes Connect.

Salga de la tienda de aplicaciones en el dispositivo iOS o portátil, inicie su aplicación y se le pedirá que inicie sesión al intentar una compra o restaurar transacciones.

Si recibe un error de inicialización con una razón de NoProductsAvailable, siga esta lista de revisión:

  • Los identificadores de producto de iTunes Connect deben coincidir exactamente con el identificador proporcionado por Unity IAP
  • In-App purchases deben estar habilitadas para su aplicación en iTunes Connect
  • Los productos deben estar despejados para venta en iTunes Connect
  • Puede tomar varias horas para que los nuevos productos creados en iTunes Connect estén disponibles para compras
  • Usted debe aceptar los últimos acuerdos de desarrollador de iTunes Connect y tener datos bancarios activos

Mac App Store (Tienda de apps de Mac)

Cuando construya una construcción de escritorio Mac usted debe seleccionar dentro de los build settings de Unity. Mac App Store validation.

Una vez que haya creado su aplicación, debe actualizar su archivo info.plist con su identificador de bundle y sus strings de versión. Haga clic con el botón derecho en el archivo .app y haga clic en show package contents, localice el archivo info.plist y actualice la cadena CFBundleIdentifier al identificador del paquete de su aplicación.

A continuación, debe firmar, empaquetar e instalar su aplicación. Necesitará ejecutar los siguientes comandos desde un terminal OSX:

codesign -f --deep -s "3rd Party Mac Developer Application: " your.app/Contents/Plugins/unitypurchasing.bundle
codesign -f --deep -s "3rd Party Mac Developer Application: " your.app
productbuild --component your.app /Applications --sign "3rd Party Mac Developer Installer: " your.pkg

To sign the bundle, you may first need to remove the Contents.meta file if it exists: your.app/Contents/Plugins/unitypurchasing.bundle/Contents.meta

Para instalar correctamente el paquete, debe eliminar el archivo .app sin descomprimir antes de ejecutar el paquete recién creado.

A continuación, debe iniciar su aplicación desde la carpeta Aplicaciones. La primera vez que lo haga, se le pedirá que ingrese los detalles de su cuenta de iTunes, para los que debe ingresar su cuenta de usuario de iTunes Connect. A continuación, podrá realizar compras de prueba en el entorno de sandbox.

Cross-store installation issues with Android in-app purchase stores
Universal Windows Platform