Medir las compras directas desde la app

Seleccionar plataforma: iOS+ Android Unity


Las compras directas desde la aplicación (CDA) 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 modo 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 de Analytics se integra en la App Store de Apple en iOS y en Google Play en Android.

En la mayoría de los casos, el SDK de Analytics recopila eventos de IAP automáticamente sin requerir llamadas a la API en tu app. Los requisitos de configuración y el comportamiento del seguimiento dependen de la plataforma de destino:

  • Android: Las transacciones de Google Play se rastrean 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 rastrean 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 manualmente con la API personalizada de Unity.

Antes de comenzar

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 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 hacer un seguimiento de estas compras.

StoreKit 2

Si tu flujo de compra usa StoreKit 2, debes registrar manualmente las transacciones verificadas pasando la cadena del 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");
        }
    });
}
Cómo recuperar el ID de transacción con IAP de Unity

Si tu proyecto usa el paquete estándar de compras integradas en la aplicación de Unity (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 la IAP de Unity v5.2 y versiones posteriores

En la versión 5.2 y posteriores de IAP de Unity, puedes acceder a la información de transacciones 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;
}