Интеграция отчетов Revenue в Appmetrica - AppWillapps/KnowledgeBase GitHub Wiki

Для корректной работы отчетов in-app Revenue необходимо:

  1. Включить валидацию в настройках проекта в Appmetrica (Настройки > Revenue)

image1

  1. Создать класс 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;  
      	}  
   }  
  1. В классе отвечающем за InApp покупки добавить метод для отправки данных для валидации AppMetricaValidation(PurchaseEventArgs args)

  2. Вызвать метод 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);
       }

⚠️ **GitHub.com Fallback** ⚠️