Mesurer les achats via une application

Sélectionnez une plate-forme : iOS+ Android Unity


Les achats via une application (IAP) sont des contenus ou des fonctionnalités numériques que vous pouvez vendre dans une application mobile via l'App Store d'Apple ou Google Play, afin que votre application n'ait pas à traiter les transactions financières. Les achats via une application incluent, par exemple, les contenus par abonnement ou les éléments de jeu spéciaux.

Analytics affiche les événements d'achat via une application dans le rapport "Achats via une application".

Pour les applications Unity, le SDK Analytics s'intègre à l'App Store d'Apple sur iOS et à Google Play sur Android.

Dans la plupart des cas, le SDK Analytics collecte automatiquement les événements d'achat via l'application sans nécessiter d'appels d'API dans votre application. Les exigences de configuration et le comportement de suivi dépendent de la plate-forme cible :

  • Android : les transactions Google Play sont suivies automatiquement après l'association de Google Play. Aucune modification de code n'est requise.
  • iOS (StoreKit 1) : les transactions de l'App Store effectuées à l'aide des API StoreKit 1 sont suivies automatiquement. Aucune modification de code n'est requise.
  • iOS (StoreKit 2) : les transactions sur l'App Store effectuées à l'aide des API StoreKit 2 doivent être enregistrées manuellement à l'aide de l'API Unity personnalisée.

Avant de commencer

Implémentation

Android

Pour les applications Android, vous pouvez mesurer les événements d'achat via l'application dès que vous associez votre compte à Google Play. Vous n'avez pas besoin d'écrire de code personnalisé dans votre projet Unity pour mesurer les achats.

iOS

Pour les applications iOS, la stratégie d'implémentation dépend de l'utilisation de StoreKit 1 ou StoreKit 2 :

StoreKit 1

Si votre parcours d'achat utilise StoreKit 1, le SDK Analytics consigne automatiquement les événements d'achat via l'application. Vous n'avez pas besoin d'ajouter de code personnalisé pour suivre ces achats.

StoreKit 2

Si votre parcours d'achat utilise StoreKit 2, vous devez consigner manuellement les transactions validées en transmettant la chaîne d'identifiant de transaction à 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");
        }
    });
}
Récupérer l'ID de transaction à l'aide d'Unity IAP

Si votre projet utilise le package d'achat via une application standard d'Unity (UnityEngine.Purchasing), la méthode de récupération de l'ID de transaction dépend de la version de l'API Unity IAP que vous utilisez.

Rappel de confirmation avec Unity IAP v5.2 ou version ultérieure

Dans Unity IAP v5.2 et versions ultérieures, vous pouvez accéder aux informations de transaction spécifiques à Apple directement à partir de l'objet Order dans le rappel de confirmation. Vous pouvez transmettre OriginalTransactionID ou l'ID de transaction actuel à 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
}
Ancien rappel ProcessPurchase

Si vous utilisez l'ancien rappel ProcessPurchase, vous pouvez extraire l'identifiant de transaction du produit acheté :

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;
}

Enregistrer manuellement les événements d'achat via une application

Si vous devez suivre les achats via une application effectués en dehors du Play Store ou du magasin d'applications (par exemple, via d'autres plates-formes de téléchargement, des processus de traitement des paiements personnalisés ou d'autres places de marché), vous pouvez consigner manuellement ces transactions à l'aide de l'événement 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)
    );
}