인앱 이벤트

개요

인앱 이벤트는 앱에서 어떤 일이 일어나는지에 대한 인사이트를 제공합니다. ROI(투자 수익률) 및 LTV(유저생애 치)를 측정할 수 있도록 시간을 들여 측정하려는 이벤트를 정의하는 것이 좋습니다.

인앱이벤트 기록은 이벤트 이름 및 값 파라미터를 사용하여 sendEvent 호출하는 방식으로 수행됩니다. 더 자세한 내용은 인앱 이벤트 문서를 참조하십시오.

여기에서 이벤트 기록에 대한 자세한 내용을 확인하십시오.

이벤트 전송

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

parametertypedescription
eventNamestring이벤트 이름
eventValuesDictionary<string, string>이벤트로 전송한 이벤트 값

예:

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

수익 기록하기

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.

수익 값에는 쉼표 구분 기호, 통화 기호 또는 텍스트가 절대로 포함되면 안됩니다. 예를 들어, 수익 값은 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);

📘

참고

통화 기호를 수익 값에 추가하지 않습니다.

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

인앱 구매 검증

인앱 구매 영수증 유효성 검증의 경우 운영 체제에 제공된 지침을 따르십시오.

참고
validateReceipt를 호출하면 인앱이벤트가 자동으로 af_purchase 생성되므로 이 이벤트를 직접 보낼 필요가 없습니다.
구매 유효성 검사 응답은 앱 내 이벤트 전송 개요 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);
    }

}