Sự kiện trong Ứng dụng

Tổng quan

Sự kiện trong ứng dụng cung cấp thông tin chi tiết về những gì đang xảy ra trong ứng dụng của bạn. Bạn nên dành thời gian và xác định các sự kiện bạn muốn đo lường để có thể đo lường ROI (Lợi tức đầu tư) và LTV (Giá trị Vòng đời).

Việc ghi nhận các sự kiện trong ứng dụng được thực hiện bằng cách gọi ra sendEvent với tên sự kiện và các thông số giá trị. Xem tài liệu về Sự kiện trong ứng dụng để biết thêm chi tiết.

Tìm thêm thông tin về ghi nhận sự kiện ở đây.

Gửi sự kiện

void sendEvent(string eventName, Dictionary<string, string> eventValues)

parametertypedescription
eventNamestringTên của sự kiện
eventValuesDictionary<string, string>Các giá trị sự kiện được gửi cùng với sự kiện

Ví dụ:

Dictionary<string, string> eventValues = new Dictionary<string, string>();
eventValues.Add(AFInAppEvents.CURRENCY, "USD");
eventValues.Add(AFInAppEvents.REVENUE, "0.99");
eventValues.Add("af_quantity", "1");
AppsFlyer.sendEvent(AFInAppEvents.PURCHASE, eventValues);

Ghi nhật ký doanh thu

You can send revenue with any in-app event. Use the AFInAppEvents.REVENUE event parameter to include revenue in the in-app event. You can populate it with any numeric value, positive or negative.

Giá trị doanh thu không được chứa dấu tách dấu phẩy, ký hiệu tiền tệ hoặc văn bản. Ví dụ một sự kiện doanh thu nên tương tự như 1234.56.

Currency code requirements when sending revenue events

  • Default currency: USD

  • Use a 3-character ISO 4217 code (an example follows).

  • Set the currency code by calling the API:

    AppsFlyer.setCurrencyCode("ZZZ")
    

Example: In-app purchase event with revenue
This purchase event is for 200.12 Euros. For the revenue to reflect in the dashboard use the following.

using System.Collections.Generic;

Dictionary<string, string> purchaseEvent = new Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "EUR");
purchaseEvent.Add(AFInAppEvents.REVENUE, "200.12");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a",);
AppsFlyer.sendEvent ("af_purchase", purchaseEvent);

📘

Lưu ý

Không thêm ký hiệu loại tiền tệ vào giá trị doanh thu.

Logging negative revenue

Record negative revenue using a minus sign.

  • Revenue value is preceded by a minus sign.
  • The event name has a unique value, "cancel_purchase". This lets you identify negative revenue events in raw data reports and in the Dashboard.

Example: App user receives a refund or cancels a subscription

using System.Collections.Generic;

Dictionary<string, string> purchaseEvent = new Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "USD");
purchaseEvent.Add(AFInAppEvents.REVENUE, "-200");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a");
AppsFlyer.sendEvent ("cancel_purchase", purchaseEvent);

In-app purchase validation Beta

This API is currently in closed beta. Please contact AppsFlyer before using it.

Để xác thực biên lai mua hàng trong ứng dụng, hãy làm theo hướng dẫn tùy theo hệ điều hành của bạn.

Lưu ý
Việc gọi ra validateReceipt sẽ tự động tạo sự kiện trong ứng dụng af_purchase nên bạn không cần phải tự gửi sự kiện này.
Phản hồi xác thực mua hàng được kích hoạt trong lớp AppsFlyerTrackerCallbacks.cs class.

// for Android 
`void validateAndSendInAppPurchase(AFPurchaseDetailsAndroid details, Dictionary<string, string> additionalParameters, MonoBehaviour gameObject)`
// for iOS 
`void validateAndSendInAppPurchase(AFSDKPurchaseDetailsIOS details, Dictionary<string, string> extraEventValues, MonoBehaviour gameObject)`

using UnityEngine.Purchasing;
using AppsFlyerSDK;

public class AppsFlyerObject : MonoBehaviour, IAppsFlyerValidateAndLog
{

    public static string kProductIDConsumable = "com.test.cons";

    void Start()
    {
        AppsFlyer.initSDK("devKey", "devKey");
        AppsFlyer.startSDK();
    }

    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
    {
        string prodID = args.purchasedProduct.definition.id;
        string price = args.purchasedProduct.metadata.localizedPrice.ToString();
        string currency = args.purchasedProduct.metadata.isoCurrencyCode;

        string receipt = args.purchasedProduct.receipt;
        var recptToJSON = (Dictionary<string, object>)AFMiniJSON.Json.Deserialize(product.receipt);
        var receiptPayload = (Dictionary<string, object>)AFMiniJSON.Json.Deserialize((string)recptToJSON["Payload"]);
        var transactionID = product.transactionID;

        if (String.Equals(args.purchasedProduct.definition.id, kProductIDConsumable, StringComparison.Ordinal))
        {
#if UNITY_IOS

            if(isSandbox)
            {
                AppsFlyeriOS.setUseReceiptValidationSandbox(true);
            }

            AFSDKPurchaseDetailsIOS details = AFSDKPurchaseDetailsIOS.Init(prodID, price, currency, transactionID);

            AppsFlyeriOS.validateAndSendInAppPurchase(details, null, this);
#elif UNITY_ANDROID

        AFPurchaseDetailsAndroid details = new AFPurchaseDetailsAndroid(AFPurchaseType.Subscription, "token", prodID, price, currency);

        AppsFlyerAndroid.validateAndSendInAppPurchase(
        details,
        null, 
        this);
#endif
        }

        return PurchaseProcessingResult.Complete;
    }

    public void onValidateAndLogComplete(string result)
    {
        AppsFlyer.AFLog("onValidateAndLogComplete", result);
        Dictionary<string, object> validateAndLogDataDictionary = AppsFlyer.CallbackStringToDictionary(result);
    }

    public void onValidateAndLogFailure(string error)
    {
        AppsFlyer.AFLog("onValidateAndLogFailure", error);
        Dictionary<string, object> validateAndLogErrorDictionary = AppsFlyer.CallbackStringToDictionary(error);
    }

}

Xác nhận mua hàng trong ứng dụng

Để xác thực biên lai mua hàng trong ứng dụng, hãy làm theo hướng dẫn tùy theo hệ điều hành của bạn.

Lưu ý
Việc gọi ra validateReceipt sẽ tự động tạo sự kiện trong ứng dụng af_purchase nên bạn không cần phải tự gửi sự kiện này.
Phản hồi xác thực mua hàng được kích hoạt trong lớp AppsFlyerTrackerCallbacks.cs class.

void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string tranactionId, Dictionary<string, string> additionalParameters, MonoBehaviour gameObject)

//To get the callbacks
//AppsFlyer.createValidateInAppListener ("AppsFlyerTrackerCallbacks", "onInAppBillingSuccess", "onInAppBillingFailure");
AppsFlyer.validateReceipt(string publicKey, string purchaseData, string signature, string price, string currency, Dictionary additionalParametes);
using UnityEngine.Purchasing;
using AppsFlyerSDK;

public class AppsFlyerObject : MonoBehaviour, IStoreListener, IAppsFlyerValidateReceipt
{

    public static string kProductIDConsumable = "com.test.cons";

    void Start()
    {
        AppsFlyer.initSDK("devKey", "devKey");
        AppsFlyer.startSDK();
    }

    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args)
    {
        string prodID = args.purchasedProduct.definition.id;
        string price = args.purchasedProduct.metadata.localizedPrice.ToString();
        string currency = args.purchasedProduct.metadata.isoCurrencyCode;

        string receipt = args.purchasedProduct.receipt;
        var recptToJSON = (Dictionary<string, object>)AFMiniJSON.Json.Deserialize(product.receipt);
        var receiptPayload = (Dictionary<string, object>)AFMiniJSON.Json.Deserialize((string)recptToJSON["Payload"]);
        var transactionID = product.transactionID;

        if (String.Equals(args.purchasedProduct.definition.id, kProductIDConsumable, StringComparison.Ordinal))
        {
#if UNITY_IOS

            if(isSandbox)
            {
                AppsFlyeriOS.setUseReceiptValidationSandbox(true);
            }

            AppsFlyeriOS.validateAndSendInAppPurchase(prodID, price, currency, transactionID, null, this);
#elif UNITY_ANDROID
        var purchaseData = (string)receiptPayload["json"];
        var signature = (string)receiptPayload["signature"];
        AppsFlyerAndroid.validateAndSendInAppPurchase(
        "<google_public_key>", 
        signature, 
        purchaseData, 
        price, 
        currency, 
        null, 
        this);
#endif
        }

        return PurchaseProcessingResult.Complete;
    }

    public void didFinishValidateReceipt(string result)
    {
        AppsFlyer.AFLog("didFinishValidateReceipt", result);
    }

    public void didFinishValidateReceiptWithError(string error)
    {
        AppsFlyer.AFLog("didFinishValidateReceiptWithError", error);
    }

}