Mesurer les achats via une application

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


Les achats via une application désignent des contenus ou fonctionnalités numériques que vous pouvez vendre dans une application mobile via l'App Store d'Apple ou Google Play Cela évite d'effectuer des transactions financières dans votre application. Il peut s'agir, par exemple, de contenus vendus par abonnement ou de pièces spéciales dans un jeu.

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

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

Dans la plupart des cas, le Analytics SDK collecte automatiquement les événements d'achat via une 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 sont suivies automatiquement après l'association de Google Play.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 de 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 une application dès que vous les associez à 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 de StoreKit 2 par votre application :

StoreKit 1

Si votre parcours d'achat utilise StoreKit 1, le SDK Analytics enregistre automatiquement les événements d'achat via une 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 enregistrer 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 de Unity IAP

Si votre projet utilise le package standard d'achat via une application de 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 à l'aide de 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
}
Rappel ProcessPurchase hérité

Si vous utilisez le rappel ProcessPurchase hérité, 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 de l'App Store (par exemple, via d'autres plates-formes de téléchargement d'applications, des processus de paiement personnalisés ou d'autres places de marché), vous pouvez enregistrer 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)
    );
}