using System; using System.Reflection; using UnityEngine.Networking; using UnityEngine.UDP.Common; namespace UnityEngine.UDP.Editor.Analytics { public static class EditorAnalyticsApi { public const string k_API_URL = "/udp/api/cdp/event"; public const string k_ENDPOINT = BuildConfig.CONNECT_ENDPOINT; public static string orgIdCache; public static string userIdCache; #region Event Names internal const string k_ImportSDKEventName = "editorImportSDK"; internal const string k_ClientCreateEventName = "editorClientCreate"; internal const string k_ClientUpdateEventName = "editorClientUpdate"; internal const string k_IapCreateEventName = "editorIapCreate"; internal const string k_IapUpdateEventName = "editorIapUpdate"; internal const string k_ProjectBuildEventName = "editorProjectBuild"; internal const string k_AppCreateEventName = "editorAppCreate"; internal const string k_AppUpdateEventName = "editorAppUpdate"; internal const string k_ProjectOpenEventName = "editorProjectOpen"; #endregion public static UnityWebRequest ImportSdk() { var parameters = Common.GetCommonParams(); EventRequest request = new EventRequest { type = k_ImportSDKEventName, msg = MiniJson.JsonEncode(parameters), }; return AssembleAndSendWebRequest(request); } public static UnityWebRequest ProjectOpened() { var parameters = Common.GetCommonParams(); EventRequest request = new EventRequest { type = k_ProjectOpenEventName, msg = MiniJson.JsonEncode(parameters), }; return AssembleAndSendWebRequest(request); } // clientCreate or clientUpdate public static UnityWebRequest ClientEvent(string eventName, string clientId, string failedReason) { var parameters = Common.GetCommonParams(); bool successful = failedReason == null; parameters.Add(Common.k_Successful, successful); if (successful) { parameters.Add(Common.k_ClientId, clientId); } else { parameters.Add(Common.k_FailedReason, failedReason); } EventRequest request = new EventRequest { type = eventName, msg = MiniJson.JsonEncode(parameters), }; return AssembleAndSendWebRequest(request); } // iapCreate && iapUpdate public static UnityWebRequest IapEvent(string eventName, string clientId, IapItem item, string failedReason) { var parameters = Common.GetCommonParams(); parameters.Add(Common.k_ClientId, clientId); if (failedReason != null) { parameters.Add(Common.k_FailedReason, failedReason); } bool successful = failedReason == null; parameters.Add(Common.k_Successful, successful); if (successful) { parameters.Add(Common.k_Consumable, item.consumable); parameters.Add(Common.k_ItemId, item.id); parameters.Add(Common.k_ItemType, "inapp"); var priceList = item.priceSets.PurchaseFee.priceMap.DEFAULT; parameters.Add(Common.k_PriceList, priceList); parameters.Add(Common.k_ProductId, item.slug); parameters.Add(Common.k_OwnerId, item.ownerId); parameters.Add(Common.k_OwnerType, item.ownerType); } EventRequest request = new EventRequest { type = eventName, msg = MiniJson.JsonEncode(parameters), }; return AssembleAndSendWebRequest(request); } public static UnityWebRequest AppEvent(string eventName, string clientId, AppItemResponse appItem, string failedReason) { var parameters = Common.GetCommonParams(); bool successful = failedReason == null; parameters.Add(Common.k_Successful, successful); if (!successful) { parameters.Add(Common.k_FailedReason, failedReason); } else { parameters.Add(Common.k_ClientId, appItem.clientId); parameters.Add(Common.k_Revision, appItem.revision); parameters.Add(Common.k_AppName, appItem.name); parameters.Add(Common.k_AppSlug, appItem.slug); parameters.Add(Common.k_AppType, appItem.type); parameters.Add(Common.k_OwnerId, appItem.ownerId); parameters.Add(Common.k_OwnerType, appItem.ownerType); } EventRequest request = new EventRequest { type = eventName, msg = MiniJson.JsonEncode(parameters), }; return AssembleAndSendWebRequest(request); } private static UnityWebRequest AssembleAndSendWebRequest(EventRequest request) { return AppStoreOnboardApi.asyncRequest(UnityWebRequest.kHttpVerbPOST, k_ENDPOINT, k_API_URL, null, request); } public static UnityWebRequest ProjectBuildEvent() { var parameters = Common.GetCommonParams(); EventRequest request = new EventRequest { type = k_ProjectBuildEventName, msg = MiniJson.JsonEncode(parameters) }; return AssembleAndSendWebRequest(request); } } #region models [Serializable] public class EventRequest { public string type; public string msg; // json string of payload } [Serializable] public class EventRequestResponse : GeneralResponse { } #endregion }