Medir as compras no app

Selecionar plataforma: iOS+ Android Unity


As compras no app consistem em conteúdo ou recursos digitais que podem ser vendidos em um app para dispositivos móveis na App Store da Apple ou no Google Play Dessa forma, seu aplicativo não precisa processar transações financeiras. Exemplos de compras no app incluem conteúdo baseado em assinatura ou peças especiais de jogos.

Analytics mostra os eventos de compra no app no relatório de compras no app.

Para apps Unity, o SDK Analytics se integra à App Store da Apple no iOS e Google Play no Android.

Na maioria dos casos, o Analytics SDK coleta automaticamente eventos de compra no app sem exigir chamadas de API no seu app. Os requisitos de configuração e o comportamento de rastreamento dependem da plataforma segmentada:

  • Android: Google Play transações são rastreadas automaticamente após a vinculação Google Play. Não é necessário alterar o código.
  • iOS (StoreKit 1): as transações da App Store feitas usando as APIs StoreKit 1 são rastreadas automaticamente. Não é necessário alterar o código.
  • iOS (StoreKit 2): as transações da App Store feitas usando as APIs StoreKit 2 precisam ser registradas manualmente usando a API Unity personalizada.

Antes de começar

Implementação

Android

Para apps Android, é possível medir os eventos de compra no app assim que você vincular ao Google Play. Não é necessário escrever nenhum código personalizado no projeto do Unity para medir as compras.

iOS

Para apps iOS, a estratégia de implementação depende de o app usar o StoreKit 1 ou o StoreKit 2:

StoreKit 1

Se o fluxo de compra usa o StoreKit 1, o SDK do Analytics registra automaticamente os eventos de compra no app. Não é necessário adicionar nenhum código personalizado para rastrear essas compras.

StoreKit 2

Se o fluxo de compra usa o StoreKit 2, é necessário registrar manualmente as transações verificadas transmitindo a string do identificador de transação para 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");
        }
    });
}
Recuperar o ID da transação usando o Unity IAP

Se o projeto usa o pacote padrão de compras no app do Unity (UnityEngine.Purchasing), o método para recuperar o ID da transação depende da versão da API Unity IAP que você está usando.

Callback de confirmação usando o Unity IAP v5.2 ou mais recente

No Unity IAP v5.2 e mais recente, é possível acessar informações de transação específicas da Apple diretamente do objeto Order no callback de confirmação. Você pode transmitir o OriginalTransactionID ou o ID da transação atual para 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
}
Callback ProcessPurchase legado

Se você estiver usando o callback ProcessPurchase legado, poderá extrair o identificador de transação do produto 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;
}