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