| Seleziona piattaforma: | iOS+ Android Unity |
Gli acquisti in-app (IAP) sono contenuti o funzionalità digitali che puoi vendere in un'app per dispositivi mobili tramite l'Apple App Store o Google Play, in modo che questa non debba elaborare transazioni finanziarie. Esempi di acquisti in-app includono contenuti su abbonamento o elementi di gioco speciali.
Analytics mostra gli eventi IAP nel report Acquisti in-app.
Per le app Unity, l'SDK Analytics si integra con l'Apple App Store su iOS e con Google Play su Android.
Nella maggior parte dei casi, l'SDK Analytics raccoglie automaticamente gli eventi IAP senza richiedere chiamate API nella tua app. I requisiti di configurazione e il comportamento di monitoraggio dipendono dalla piattaforma di destinazione:
- Android: le transazioni Google Play vengono monitorate automaticamente dopo il collegamento di Google Play. senza dover apportare modifiche al codice.
- iOS (StoreKit 1): le transazioni dell'App Store effettuate utilizzando le API StoreKit 1 vengono monitorate automaticamente. senza dover apportare modifiche al codice.
- iOS (StoreKit 2): le transazioni dell'App Store effettuate utilizzando le API StoreKit 2 devono essere registrate manualmente utilizzando l'API Unity personalizzata.
Prima di iniziare
Configura il progetto Firebase e il codebase della tua app come descritto in Guida introduttiva a Google Analytics.
Collega il tuo progetto Firebase a una proprietà Google Analytics 4.
Assicurati che la tua app soddisfi i seguenti requisiti di configurazione specifici per la piattaforma:
iOS (StoreKit 1): non è richiesta alcuna configurazione aggiuntiva. Il monitoraggio di StoreKit 1 funziona automaticamente.
iOS (StoreKit 2): assicurati che la tua app utilizzi l'SDK Firebase Unity v13.12.0 o successive.
Assicurati di conoscere le API per gli acquisti in-app consultando la documentazione specifica della piattaforma per Fatturazione Google Play, StoreKit di Apple e Unity In-App Purchasing.
Implementazione
Android
Per le app per Android, puoi misurare gli eventi IAP non appena ti colleghi a Google Play. Non devi scrivere codice personalizzato nel tuo progetto Unity per misurare gli acquisti.
iOS
Per le app per iOS, la strategia di implementazione dipende dall'utilizzo di StoreKit 1 o StoreKit 2:
StoreKit 1
Se il flusso di acquisto utilizza StoreKit 1, l'SDK Analytics registra automaticamente gli eventi IAP. Non devi aggiungere alcun codice personalizzato per monitorare questi acquisti.
StoreKit 2
Se il flusso di acquisto utilizza StoreKit 2, devi registrare manualmente le transazioni verificate passando la stringa dell'identificatore di transazione a 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"); } }); }
Recuperare l'ID transazione utilizzando Unity IAP
Se il tuo progetto utilizza il pacchetto standard per gli acquisti in-app di Unity
(UnityEngine.Purchasing), il metodo per recuperare l'ID transazione dipende
dalla versione dell'API Unity IAP che utilizzi.
Callback di conferma tramite Unity IAP v5.2+
In Unity IAP v5.2 e versioni successive, puoi accedere alle informazioni sulle transazioni specifiche di Apple direttamente dall'oggetto Order nel callback di conferma. Puoi
trasferire OriginalTransactionID o l'ID transazione corrente a
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 legacy ProcessPurchase
Se utilizzi il callback ProcessPurchase legacy, puoi estrarre l'identificatore
della transazione dal prodotto acquistato:
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; }
Registrare manualmente gli eventi di acquisto in-app
Se devi monitorare gli acquisti in-app effettuati al di fuori del Play Store o dell'App Store (ad esempio tramite store alternativi o procedure di pagamento personalizzate o altri marketplace), puoi registrare manualmente queste transazioni utilizzando l'evento 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) ); }