Eventos In-App

Visão Geral

Eventos in-app fornecem insights sobre o que está acontecendo em seu aplicativo. É recomendável reservar um tempo e definir os eventos que você deseja medir para permitir a medição do ROI (Return on Investment) e LTV (valor permanente).

A gravação de eventos in-app é realizada chamando sendEvent com o nome do evento e os parâmetros de valor. Consulte a documentação sobre Eventos in-app para obter mais detalhes.

Encontre mais informações sobre a gravação de eventos aqui.

Enviar evento

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

parametertypedescription
eventNamestringO nome do evento
eventValuesDictionary<string, string>Os valores de evento que são enviados com o evento

Exemplo:

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

Registro de receita

📘

Observação

For events with revenue, including in-app purchases, subscriptions, and ad revenue events, AppsFlyer customers with an ROI360 subscription should avoid using the AFInAppEvents.REVENUE(af_revenue) parameter in their in-app events. Doing so can result in duplicate revenue being reported. Instead, they should utilize the purchase connector and the ad revenue SDK API.

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.

O valor da receita não deve conter separadores de vírgula, símbolo de moeda ou texto. Um evento de receita deve ser semelhante a 1234,56, por exemplo.

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

📘

Observação

Não adicione símbolos de moeda ao valor da receita.

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.

Para validação de recibo de compra in-app, siga as instruções de acordo com o seu sistema operacional.

Observações
Chamar validReceipt gera automaticamente um evento in-app af_purchase , então você não precisa enviar este evento.
A resposta de validação de compra é acionada no 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);
    }

}

Validação de instalações no aplicativo

Para validação de recibo de compra in-app, siga as instruções de acordo com o seu sistema operacional.

Observações
Chamar validReceipt gera automaticamente um evento in-app af_purchase , então você não precisa enviar este evento.
A resposta de validação de compra é acionada no 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);
    }

}