Оценивайте покупки в приложении

Выберите платформу: 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.

Прежде чем начать

Выполнение

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