| Выберите платформу: | iOS+ Android Unity |
Покупки в приложении – это цифровой контент или функции, которые можно продавать в мобильном приложении через Apple App Store или Google Play. В этом случае приложению не нужно обрабатывать финансовые транзакции. Примеры покупок в приложении: контент по подписке или специальные игровые предметы.
Analytics показывает события покупок в приложении в отчете "Покупки в приложении".
В приложениях Unity SDK Analytics интегрируется с Apple App Store на устройствах iOS и Google Play на устройствах Android.
В большинстве случаев SDK Analytics автоматически собирает данные о покупках в приложении без необходимости вызывать API в приложении. Требования к настройке и отслеживанию зависят от целевой платформы:
- Android. Транзакции Google Play отслеживаются автоматически после того, как вы свяжете Google Play. При этом не нужно изменять код сайта.
- iOS (StoreKit 1). Транзакции в App Store, совершенные с помощью API StoreKit 1, отслеживаются автоматически. При этом не нужно изменять код сайта.
- iOS (StoreKit 2). Транзакции в App Store, выполненные с помощью API StoreKit 2, необходимо регистрировать вручную с помощью специального API Unity.
Подготовка
Настройте проект Firebase и базу кода приложения, как описано в статье Начало работы с Google Analytics.
Убедитесь, что ваше приложение соответствует следующим требованиям к настройке для разных платформ:
iOS (StoreKit 1). Дополнительная настройка не требуется. Отслеживание с помощью StoreKit 1 работает автоматически.
iOS (StoreKit 2). Убедитесь, что в вашем приложении используется Firebase Unity SDK версии 13.12.0 или более новой.
Ознакомьтесь с документацией по API для покупок в приложении на платформах Google Play Платежи, Apple StoreKit и Unity In-App Purchasing.
Реализация
Android
Для приложений Android события, связанные с покупками в приложении, можно отслеживать сразу после установки связи с Google Play. Вам не нужно писать собственный код в проекте Unity, чтобы отслеживать покупки.
iOS
Для приложений iOS стратегия реализации зависит от того, какая версия StoreKit используется в приложении:
StoreKit 1
Если в вашем приложении для совершения покупок используется StoreKit 1, SDK Аналитики автоматически регистрирует события покупки в приложении. Чтобы отслеживать эти покупки, не нужно добавлять специальный код.
StoreKit 2
Если в вашем процессе покупки используется StoreKit 2, вам нужно вручную регистрировать подтвержденные транзакции, передавая строку идентификатора транзакции в 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"); } }); }
Как получить идентификатор транзакции с помощью Unity IAP
Если в вашем проекте используется стандартный пакет Unity для покупок в приложении (UnityEngine.Purchasing), способ получения идентификатора транзакции зависит от версии Unity IAP API.
Обратный вызов подтверждения с помощью Unity IAP версии 5.2 и более поздних
В Unity IAP версии 5.2 и более поздних версий информацию о транзакциях, относящуюся к Apple, можно получить непосредственно из объекта Order в функции обратного вызова подтверждения. Вы можете передать в LogAppleTransactionAsync() либо OriginalTransactionID, либо текущий идентификатор транзакции:
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 }
Обратный вызов устаревшей версии ProcessPurchase
Если вы используете устаревший обратный вызов ProcessPurchase, то можете извлечь идентификатор транзакции из купленного товара:
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; }
Как вручную регистрировать события покупки в приложении
Если вам нужно отслеживать покупки в приложении, совершенные не через Google Play или App Store (например, через альтернативные магазины, специальные платежные системы или другие торговые площадки), вы можете вручную регистрировать эти транзакции с помощью события 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) ); }