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;
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;
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.
}
});
}
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.
});
}
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.
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:
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.