In-App-Käufe analysieren

Plattform auswählen: iOS+ Android Unity


In-App-Käufe (IAP) sind digitale Inhalte oder Funktionen, die Sie in einer mobilen App über den Apple App Store oder Google Play verkaufen können, damit Ihre App keine Finanztransaktionen verarbeiten muss. Beispiele für In-App-Käufe sind abonnementbasierte Inhalte oder spezielle Spielfiguren.

Analytics zeigt IAP-Ereignisse im Bericht „In-App-Käufe“ an.

Bei Unity-Apps wird das Analytics SDK unter iOS in den Apple App Store und unter Android in Google Play eingebunden.

In den meisten Fällen erfasst das Analytics SDK automatisch IAP-Ereignisse, ohne dass API-Aufrufe in Ihrer App erforderlich sind. Die Einrichtungsanforderungen und das Tracking-Verhalten hängen von der Zielplattform ab:

  • Android: Google Play-Transaktionen werden automatisch erfasst, nachdem Google Play verknüpft wurde. Es sind keine Codeänderungen erforderlich.
  • iOS (StoreKit 1): App Store-Transaktionen, die über StoreKit 1 APIs ausgeführt werden, werden automatisch erfasst. Es sind keine Codeänderungen erforderlich.
  • iOS (StoreKit 2): App Store-Transaktionen, die über StoreKit 2 APIs ausgeführt werden, müssen manuell über die benutzerdefinierte Unity API protokolliert werden.

Hinweis

Implementierung

Android

Bei Android-Apps können Sie In-App-Kauf-Ereignisse erfassen, sobald Sie eine Verknüpfung mit Google Play hergestellt haben. Sie müssen keinen benutzerdefinierten Code in Ihr Unity-Projekt schreiben, um Käufe zu erfassen.

iOS

Bei iOS-Apps hängt die Implementierungsstrategie davon ab, ob Ihre App StoreKit 1 oder StoreKit 2 verwendet:

StoreKit 1

Wenn in Ihrem Kaufvorgang StoreKit 1 verwendet wird, werden In-App-Kaufereignisse automatisch vom Analytics SDK protokolliert. Sie müssen keinen benutzerdefinierten Code hinzufügen, um diese Käufe zu erfassen.

StoreKit 2

Wenn Ihr Kaufvorgang StoreKit 2 verwendet, müssen Sie bestätigte Transaktionen manuell protokollieren, indem Sie den Transaktions-ID-String an LogAppleTransactionAsync() übergeben.

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");
        }
    });
}
Transaktions-ID mit Unity IAP abrufen

Wenn in Ihrem Projekt das Standard-In-App-Kaufpaket von Unity (UnityEngine.Purchasing) verwendet wird, hängt die Methode zum Abrufen der Transaktions-ID von der verwendeten Version der Unity IAP API ab.

Bestätigungs-Callback mit Unity IAP v5.2+

In Unity IAP v5.2 und höher können Sie direkt über das Objekt Order im Bestätigungs-Callback auf Apple-spezifische Transaktionsinformationen zugreifen. Sie können entweder die OriginalTransactionID oder die aktuelle Transaktions-ID an LogAppleTransactionAsync() übergeben:

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
}
Legacy-ProcessPurchase-Callback

Wenn Sie den alten ProcessPurchase-Callback verwenden, können Sie die Transaktions-ID aus dem gekauften Produkt extrahieren:

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

In-App-Kaufereignisse manuell protokollieren

Wenn Sie In-App-Käufe erfassen möchten, die außerhalb des Google Play Store oder App Store getätigt wurden (z. B. über alternative Stores, benutzerdefinierte Zahlungsabwicklungen oder andere Marktplätze), können Sie diese Transaktionen manuell mit dem Ereignis IN_APP_PURCHASE protokollieren.

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