| 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
Richten Sie Ihr Firebase-Projekt und die Codebasis Ihrer App ein, wie unter Erste Schritte mit Google Analytics beschrieben.
Verknüpfen Sie Ihr Firebase-Projekt mit einer Google Analytics 4-Property.
Ihre App muss die folgenden plattformspezifischen Einrichtungsanforderungen erfüllen:
iOS (StoreKit 1): Es ist keine zusätzliche Einrichtung erforderlich. Das StoreKit 1-Tracking funktioniert automatisch.
iOS (StoreKit 2): Ihre App muss das Firebase Unity SDK ab Version 13.12.0 verwenden.
Machen Sie sich mit den APIs für In-App-Käufe vertraut, indem Sie die plattformspezifische Dokumentation für Google Play Billing, Apple StoreKit und Unity In-App Purchasing lesen.
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) ); }