| Seleccionar plataforma: | iOS+ Android Unity |
Las compras directas desde la app (IAP) son contenido digital o funciones que puedes vender en una app para dispositivos móviles a través de la App Store de Apple o Google Play de manera que tu aplicación no tenga que procesar transacciones financieras. Algunos ejemplos de compras directas desde la aplicación incluyen contenido basado en suscripciones o artículos especiales de videojuegos.
Analytics muestra los eventos de IAP en el informe de compras directas desde la app.
En el caso de las apps de Unity, el SDK Analytics se integra en la App Store de Apple en iOS y Google Play en Android.
En la mayoría de los casos, el Analytics SDK recopila eventos de IAP automáticamente sin requerir llamadas a la API en tu app. Los requisitos de configuración y el comportamiento de seguimiento dependen de la plataforma de segmentación:
- Android: Google Play transacciones se registran automáticamente después de vincular Google Play. No requiere cambios en los códigos.
- iOS (StoreKit 1): Las transacciones de App Store realizadas con las APIs de StoreKit 1 se registran automáticamente. No requiere cambios en los códigos.
- iOS (StoreKit 2): Las transacciones de App Store realizadas con las APIs de StoreKit 2 se deben registrar de forma manual con la API personalizada de Unity.
Antes de comenzar
Configura tu proyecto de Firebase y la base de código de tu app como se describe en Comienza a usar Google Analytics.
Vincula tu proyecto de Firebase a una propiedad Google Analytics 4.
Asegúrate de que tu app cumpla con estos requisitos de configuración específicos de la plataforma:
iOS (StoreKit 1): No se requiere ninguna configuración adicional. El seguimiento de StoreKit 1 funciona automáticamente.
iOS (StoreKit 2): Asegúrate de que tu app use el SDK de Firebase Unity v13.12.0 o una versión posterior.
Consulta la documentación específica de la plataforma para la Facturación Google Play, Apple StoreKit, y Unity In-App Purchasing para asegurarte de conocer las APIs de compra directa desde la app.
Implementación
Android
En el caso de las apps para Android, puedes medir los eventos de IAP en cuanto te vincules a Google Play. No es necesario que escribas ningún código personalizado en tu proyecto de Unity para medir las compras.
iOS
En el caso de las apps para iOS, la estrategia de implementación depende de si tu app usa StoreKit 1 o StoreKit 2:
StoreKit 1
Si tu flujo de compra usa StoreKit 1, el SDK de Analytics registra automáticamente los eventos de IAP. No es necesario que agregues ningún código personalizado para registrar estas compras.
StoreKit 2
Si tu flujo de compra usa StoreKit 2, debes registrar manualmente las transacciones verificadas pasando la cadena de identificador de transacción a LogAppleTransactionAsync().
using Firebase.Analytics; // Call this method once you have completed a StoreKit 2 transaction // and have the transaction identifier. public void LogPurchase(string transactionId) { FirebaseAnalytics.LogAppleTransactionAsync(transactionId).ContinueWith(task => { if (task.IsFaulted || task.IsCanceled) { Debug.LogError("Failed to log Apple purchase transaction: " + task.Exception); } else { Debug.Log("Successfully logged Apple purchase transaction"); } }); }
Recupera el ID de transacción con Unity IAP
Si tu proyecto usa el paquete estándar de Unity In-App Purchasing
(UnityEngine.Purchasing), el método para recuperar el ID de transacción depende
de la versión de la API de Unity IAP que uses.
Devolución de llamada de confirmación con Unity IAP v5.2 o versiones posteriores
En Unity IAP v5.2 y versiones posteriores, puedes acceder a la información de transacción específica de Apple directamente desde el objeto Order en la devolución de llamada de confirmación. Puedes pasar el OriginalTransactionID o el ID de transacción actual a LogAppleTransactionAsync():
using UnityEngine.Purchasing; using Firebase.Analytics; using Firebase.Extensions; // Example using Unity IAP v5.2+ Order confirmation void OnPurchaseConfirmed(Order order) { #if UNITY_IOS if (order is ConfirmedOrder confirmedOrder) { var appleInfo = confirmedOrder.Info.Apple; if (appleInfo != null) { string transactionId = appleInfo.OriginalTransactionID; if (!string.IsNullOrEmpty(transactionId)) { // Log the StoreKit 2 transaction with Firebase Analytics FirebaseAnalytics.LogAppleTransactionAsync(transactionId).ContinueWithOnMainThread(task => { if (task.IsFaulted || task.IsCanceled) { Debug.LogError($"Failed to log Apple purchase transaction: {task.Exception}"); } else { Debug.Log("Successfully logged Apple purchase transaction"); } }); } else { Debug.LogWarning("Apple OriginalTransactionID is null or empty. Skipping Firebase logging."); } } } else if (order is FailedOrder failedOrder) { Debug.Log($"Purchase confirmation bypassed due to failure: {failedOrder.FailureReason}"); } #endif }
Devolución de llamada ProcessPurchase heredada
Si usas la devolución de llamada ProcessPurchase heredada, puedes extraer el identificador de transacción del producto comprado:
using UnityEngine.Purchasing; using Firebase.Analytics; using Firebase.Extensions; public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) { // Extract the transaction ID from the purchased product string transactionId = args.purchasedProduct.transactionID; #if UNITY_IOS // Log the StoreKit 2 transaction with Firebase Analytics FirebaseAnalytics.LogAppleTransactionAsync(transactionId).ContinueWithOnMainThread(task => { if (task.IsFaulted || task.IsCanceled) { Debug.LogError($"Failed to log Apple purchase transaction: {task.Exception}"); } else { Debug.Log("Successfully logged Apple purchase transaction"); } }); #endif return PurchaseProcessingResult.Complete; }
Registra eventos de compra directa desde la app de forma manual
Si necesitas hacer un seguimiento de las compras directas desde la app que se realizan fuera de Play Store o App Store (por ejemplo, a través de tiendas alternativas o procesos de pago personalizados, o bien otros mercados), puedes registrar estas transacciones de forma manual con el evento IN_APP_PURCHASE.
using Firebase.Analytics; public void LogCustomInAppPurchase(string productName, double value, string currencyCode, int quantity = 1) { FirebaseAnalytics.LogEvent( FirebaseAnalytics.EventInAppPurchase, new Parameter(FirebaseAnalytics.ParameterProductName, productName), new Parameter(FirebaseAnalytics.ParameterValue, value), new Parameter(FirebaseAnalytics.ParameterCurrency, currencyCode), new Parameter(FirebaseAnalytics.ParameterQuantity, quantity) ); }