Интеграция отчетов Revenue в Appmetrica - AppWillapps/KnowledgeBase GitHub Wiki
Для корректной работы отчетов in-app Revenue необходимо:
- Включить валидацию в настройках проекта в Appmetrica (Настройки > Revenue)
- Создать класс AppmetricaActivate в проекте
using System.Collections;
using System.Collections.Generic;
using Io.AppMetrica;
using UnityEngine;
public static class AppmetricaActivate
{
\[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)\]
public static void Activate()
{
AppMetrica.Activate(new AppMetricaConfig("your app key") {
CrashReporting \= true,
SessionTimeout \= 10,
LocationTracking \= false,
Logs \= false,
FirstActivationAsUpdate \= \!IsFirstLaunch(),
DataSendingEnabled \= true,
RevenueAutoTrackingEnabled \= true
});
}
private static bool IsFirstLaunch()
{
return true;
}
}
-
В классе отвечающем за InApp покупки добавить метод для отправки данных для валидации AppMetricaValidation(PurchaseEventArgs args)
-
Вызвать метод AppMetricaValidation(PurchaseEventArgs args) в Unity Purchase методе результата покупки ProcessPurchase
using Io.AppMetrica;
...
// Declaration of the Receipt structure for getting information about the IAP.
[System.Serializable]
public struct Receipt {
public string Store;
public string TransactionID;
public string Payload;
}
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs args) {
AppMetricaValidation(args);
return PurchaseProcessingResult.Complete;
}
void AppMetricaValidation(PurchaseEventArgs args)
{
var product = args.purchasedProduct;
string currency = product.metadata.isoCurrencyCode;
decimal price = product.metadata.localizedPrice;
long priceMicros = decimal.ToInt64(price * 1000000m);
var receiptDict = (Dictionary<string,
object>)MiniJson.JsonDecode(args.purchasedProduct.receipt);
var payload = (null != receiptDict && receiptDict.ContainsKey("Payload"))
? (string)receiptDict["Payload"] : "";
var jsonDetailsDict = (!string.IsNullOrEmpty(payload)) ?
(Dictionary<string, object>)MiniJson.JsonDecode(payload) : null;
var json = (jsonDetailsDict != null &&
jsonDetailsDict.ContainsKey("json")) ? (string)jsonDetailsDict["json"] :
"";
var signature = (jsonDetailsDict != null &&
jsonDetailsDict.ContainsKey("signature")) ? (string)jsonDetailsDict["signature"] :
"";
Revenue revenue = new Revenue(priceMicros, currency);
if (product.receipt != null)
{
Revenue.Receipt yaReceipt = new Revenue.Receipt();
Receipt receipt = JsonUtility.FromJson<Receipt>(product.receipt);
#if UNITY_ANDROID
yaReceipt.Signature = signature;
yaReceipt.Data = json;
#elif UNITY_IOS
yaReceipt.TransactionID = receipt.TransactionID;
yaReceipt.Data = receipt.Payload;
#endif
revenue.ProductID = args.purchasedProduct.definition.id;
revenue.ReceiptValue = yaReceipt;
}
AppMetrica.ReportRevenue(revenue);
}