123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465 |
- using System;
- using System.Runtime.CompilerServices;
- [assembly: InternalsVisibleTo("Unity.Services.Analytics.Tests")]
- namespace Unity.Services.Analytics.Data
- {
- interface IDataGenerator
- {
- void GameRunning(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier);
- void SdkStartup(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier);
- void NewPlayer(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, string deviceModel);
- void GameStarted(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, string idLocalProject, string osVersion, bool isTiny, bool debugDevice, string userLocale);
- void GameEnded(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, DataGenerator.SessionEndState quitState);
- void AdImpression(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier,
- AdImpressionParameters adImpressionParameters);
- void Transaction(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, TransactionParameters transactionParameters);
- void TransactionFailed(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, TransactionFailedParameters transactionParameters);
- void ClientDevice(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier,
- string cpuType, string gpuType, Int64 cpuCores, Int64 ramTotal, Int64 screenWidth, Int64 screenHeight, Int64 screenDPI);
- void AcquisitionSource(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, AcquisitionSourceParameters acquisitionSourceParameters);
- }
- /// <summary>
- /// DataGenerator is used to push event data into the internal buffer.
- /// The reason its split like this is so we can test the output from
- /// The DataGenerator + InternalBuffer. If this output is validated we
- /// can be pretty confident we are always producing valid JSON for the
- /// backend.
- /// </summary>
- class DataGenerator : IDataGenerator
- {
- public void SdkStartup(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier)
- {
- buf.PushStartEvent("sdkStart", datetime, 1, true);
- buf.PushString(SdkVersion.SDK_VERSION, "sdkVersion");
- // Event Params
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- buf.PushString("com.unity.services.analytics", "sdkName"); // Schema: Required
- buf.PushEndEvent();
- }
- public void GameRunning(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier)
- {
- buf.PushStartEvent("gameRunning", datetime, 1, true);
- // Event Params
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- buf.PushEndEvent();
- }
- public void NewPlayer(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, string deviceModel)
- {
- buf.PushStartEvent("newPlayer", datetime, 1, true);
- // Event Params
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- // We aren't sending deviceBrand at the moment as deviceModel is sufficient.
- // UA1 did not send deviceBrand either. See JIRA-196 for more info.
- buf.PushString(deviceModel, "deviceModel"); // Schema: Optional
- buf.PushEndEvent();
- }
- public void GameStarted(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams,
- string callingMethodIdentifier, string idLocalProject, string osVersion, bool isTiny, bool debugDevice, string userLocale)
- {
- buf.PushStartEvent("gameStarted", datetime, 1, true);
- // Event Params
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- // Schema: Required
- buf.PushString(userLocale, "userLocale");
- // Schema: Optional
- if (!String.IsNullOrEmpty(idLocalProject))
- {
- buf.PushString(idLocalProject, "idLocalProject");
- }
- buf.PushString(osVersion, "osVersion");
- buf.PushBool(isTiny, "isTiny");
- buf.PushBool(debugDevice, "debugDevice");
- buf.PushEndEvent();
- }
- // Keep the enum values in Caps!
- // We stringify the values.
- // These values aren't listed as an enum the Schema, but they are listed
- // values here http://go/UA2_Spreadsheet
- internal enum SessionEndState
- {
- PAUSED,
- KILLEDINBACKGROUND,
- KILLEDINFOREGROUND,
- QUIT,
- }
- public void GameEnded(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, SessionEndState quitState)
- {
- buf.PushStartEvent("gameEnded", datetime, 1, true);
- // Event Params
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- buf.PushString(quitState.ToString(), "sessionEndState"); // Schema: Required
- buf.PushEndEvent();
- }
- public void AdImpression(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, AdImpressionParameters adImpressionParameters)
- {
- buf.PushStartEvent("adImpression", datetime, 1, true);
- // Event Params
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- // Schema: Required
- buf.PushString(adImpressionParameters.AdCompletionStatus.ToString().ToUpperInvariant(), "adCompletionStatus");
- buf.PushString(adImpressionParameters.AdProvider.ToString().ToUpperInvariant(), "adProvider");
- buf.PushString(adImpressionParameters.PlacementID, "placementId");
- buf.PushString(adImpressionParameters.PlacementName, "placementName");
- // Schema: Optional
- if (adImpressionParameters.AdEcpmUsd is double adEcpmUsdValue)
- {
- buf.PushDouble(adEcpmUsdValue, "adEcpmUsd");
- }
- if (adImpressionParameters.PlacementType != null)
- {
- buf.PushString(adImpressionParameters.PlacementType.ToString(), "placementType");
- }
- if (!string.IsNullOrEmpty(adImpressionParameters.SdkVersion))
- {
- buf.PushString(adImpressionParameters.SdkVersion, "adSdkVersion");
- }
- if (!string.IsNullOrEmpty(adImpressionParameters.AdImpressionID))
- {
- buf.PushString(adImpressionParameters.AdImpressionID, "adImpressionID");
- }
- if (!string.IsNullOrEmpty(adImpressionParameters.AdStoreDstID))
- {
- buf.PushString(adImpressionParameters.AdStoreDstID, "adStoreDestinationID");
- }
- if (!string.IsNullOrEmpty(adImpressionParameters.AdMediaType))
- {
- buf.PushString(adImpressionParameters.AdMediaType, "adMediaType");
- }
- if (adImpressionParameters.AdTimeWatchedMs is Int64 adTimeWatchedMsValue)
- {
- buf.PushInt64(adTimeWatchedMsValue, "adTimeWatchedMs");
- }
- if (adImpressionParameters.AdTimeCloseButtonShownMs is Int64 adTimeCloseButtonShownMsValue)
- {
- buf.PushInt64(adTimeCloseButtonShownMsValue, "adTimeCloseButtonShownMs");
- }
- if (adImpressionParameters.AdLengthMs is Int64 adLengthMsValue)
- {
- buf.PushInt64(adLengthMsValue, "adLengthMs");
- }
- if (adImpressionParameters.AdHasClicked is bool adHasClickedValue)
- {
- buf.PushBool(adHasClickedValue, "adHasClicked");
- }
- if (!string.IsNullOrEmpty(adImpressionParameters.AdSource))
- {
- buf.PushString(adImpressionParameters.AdSource, "adSource");
- }
- if (!string.IsNullOrEmpty(adImpressionParameters.AdStatusCallback))
- {
- buf.PushString(adImpressionParameters.AdStatusCallback, "adStatusCallback");
- }
- buf.PushEndEvent();
- }
- public void AcquisitionSource(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, AcquisitionSourceParameters acquisitionSourceParameters)
- {
- buf.PushStartEvent("acquisitionSource", datetime, 1, true);
- // Event Params
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- //other event parameters
- // Required
- buf.PushString(acquisitionSourceParameters.Channel, "acquisitionChannel");
- buf.PushString(acquisitionSourceParameters.CampaignId, "acquisitionCampaignId");
- buf.PushString(acquisitionSourceParameters.CreativeId, "acquisitionCreativeId");
- buf.PushString(acquisitionSourceParameters.CampaignName, "acquisitionCampaignName");
- buf.PushString(acquisitionSourceParameters.Provider, "acquisitionProvider");
- if (!string.IsNullOrEmpty(acquisitionSourceParameters.CampaignType))
- {
- buf.PushString(acquisitionSourceParameters.CampaignType, "acquisitionCampaignType");
- }
- if (!string.IsNullOrEmpty(acquisitionSourceParameters.Network))
- {
- buf.PushString(acquisitionSourceParameters.Network, "acquisitionNetwork");
- }
- if (!string.IsNullOrEmpty(acquisitionSourceParameters.CostCurrency))
- {
- buf.PushString(acquisitionSourceParameters.CostCurrency, "acquisitionCostCurrency");
- }
- if (acquisitionSourceParameters.Cost is float cost)
- {
- buf.PushFloat(cost, "acquisitionCost");
- }
- buf.PushEndEvent();
- }
- public void Transaction(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, TransactionParameters transactionParameters)
- {
- buf.PushStartEvent("transaction", datetime, 1, true);
- // Event Params
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- if (!string.IsNullOrEmpty(SdkVersion.SDK_VERSION))
- {
- buf.PushString(SdkVersion.SDK_VERSION, "sdkVersion");
- }
- if (!string.IsNullOrEmpty(transactionParameters.PaymentCountry))
- {
- buf.PushString(transactionParameters.PaymentCountry, "paymentCountry");
- }
- if (!string.IsNullOrEmpty(transactionParameters.ProductID))
- {
- buf.PushString(transactionParameters.ProductID, "productID");
- }
- if (transactionParameters.RevenueValidated.HasValue)
- {
- buf.PushInt64(transactionParameters.RevenueValidated.Value, "revenueValidated");
- }
- if (!string.IsNullOrEmpty(transactionParameters.TransactionID))
- {
- buf.PushString(transactionParameters.TransactionID, "transactionID");
- }
- if (!string.IsNullOrEmpty(transactionParameters.TransactionReceipt))
- {
- buf.PushString(transactionParameters.TransactionReceipt, "transactionReceipt");
- }
- if (!string.IsNullOrEmpty(transactionParameters.TransactionReceiptSignature))
- {
- buf.PushString(transactionParameters.TransactionReceiptSignature, "transactionReceiptSignature");
- }
- if (!string.IsNullOrEmpty(transactionParameters.TransactionServer?.ToString()))
- {
- buf.PushString(transactionParameters.TransactionServer.ToString(), "transactionServer");
- }
- if (!string.IsNullOrEmpty(transactionParameters.TransactorID))
- {
- buf.PushString(transactionParameters.TransactorID, "transactorID");
- }
- if (!string.IsNullOrEmpty(transactionParameters.StoreItemSkuID))
- {
- buf.PushString(transactionParameters.StoreItemSkuID, "storeItemSkuID");
- }
- if (!string.IsNullOrEmpty(transactionParameters.StoreItemID))
- {
- buf.PushString(transactionParameters.StoreItemID, "storeItemID");
- }
- if (!string.IsNullOrEmpty(transactionParameters.StoreID))
- {
- buf.PushString(transactionParameters.StoreID, "storeID");
- }
- if (!string.IsNullOrEmpty(transactionParameters.StoreSourceID))
- {
- buf.PushString(transactionParameters.StoreSourceID, "storeSourceID");
- }
- // Required
- buf.PushString(transactionParameters.TransactionName, "transactionName");
- buf.PushString(transactionParameters.TransactionType.ToString(), "transactionType");
- SetProduct(ref buf, "productsReceived", transactionParameters.ProductsReceived);
- SetProduct(ref buf, "productsSpent", transactionParameters.ProductsSpent);
- buf.PushEndEvent();
- }
- public void TransactionFailed(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier, TransactionFailedParameters parameters)
- {
- buf.PushStartEvent("transactionFailed", datetime, 1, true);
- // Event Params
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- if (!string.IsNullOrEmpty(SdkVersion.SDK_VERSION))
- {
- buf.PushString(SdkVersion.SDK_VERSION, "sdkVersion");
- }
- if (!string.IsNullOrEmpty(parameters.PaymentCountry))
- {
- buf.PushString(parameters.PaymentCountry, "paymentCountry");
- }
- if (!string.IsNullOrEmpty(parameters.ProductID))
- {
- buf.PushString(parameters.ProductID, "productID");
- }
- if (parameters.RevenueValidated.HasValue)
- {
- buf.PushInt64(parameters.RevenueValidated.Value, "revenueValidated");
- }
- if (!string.IsNullOrEmpty(parameters.TransactionID))
- {
- buf.PushString(parameters.TransactionID, "transactionID");
- }
- if (!string.IsNullOrEmpty(parameters.TransactionServer?.ToString()))
- {
- buf.PushString(parameters.TransactionServer.ToString(), "transactionServer");
- }
- if (parameters.EngagementID != null)
- {
- buf.PushInt64((long)parameters.EngagementID, "engagementID");
- }
- if (!string.IsNullOrEmpty(parameters.GameStoreID))
- {
- buf.PushString(parameters.GameStoreID, "gameStoreID");
- }
- if (!string.IsNullOrEmpty(parameters.AmazonUserID))
- {
- buf.PushString(parameters.AmazonUserID, "amazonUserID");
- }
- if (parameters.IsInitiator != null)
- {
- buf.PushBool((bool)parameters.IsInitiator, "isInitiator");
- }
- if (!string.IsNullOrEmpty(parameters.StoreItemSkuID))
- {
- buf.PushString(parameters.StoreItemSkuID, "storeItemSkuID");
- }
- if (!string.IsNullOrEmpty(parameters.StoreItemID))
- {
- buf.PushString(parameters.StoreItemID, "storeItemID");
- }
- if (!string.IsNullOrEmpty(parameters.StoreID))
- {
- buf.PushString(parameters.StoreID, "storeID");
- }
- if (!string.IsNullOrEmpty(parameters.StoreSourceID))
- {
- buf.PushString(parameters.StoreSourceID, "storeSourceID");
- }
- // Required
- buf.PushString(parameters.TransactionName, "transactionName");
- buf.PushString(parameters.TransactionType.ToString(), "transactionType");
- SetProduct(ref buf, "productsReceived", parameters.ProductsReceived);
- SetProduct(ref buf, "productsSpent", parameters.ProductsSpent);
- buf.PushString(parameters.FailureReason, "failureReason");
- buf.PushEndEvent();
- }
- public void ClientDevice(ref Internal.IBuffer buf, DateTime datetime, StdCommonParams commonParams, string callingMethodIdentifier,
- string cpuType, string gpuType, Int64 cpuCores, Int64 ramTotal, Int64 screenWidth, Int64 screenHeight, Int64 screenDPI)
- {
- buf.PushStartEvent("clientDevice", datetime, 1, true);
- commonParams.SerializeCommonEventParams(ref buf, callingMethodIdentifier);
- // Schema: Optional
- buf.PushString(cpuType, "cpuType");
- buf.PushString(gpuType, "gpuType");
- buf.PushInt64(cpuCores, "cpuCores");
- buf.PushInt64(ramTotal, "ramTotal");
- buf.PushInt64(screenWidth, "screenWidth");
- buf.PushInt64(screenHeight, "screenHeight");
- buf.PushInt64(screenDPI, "screenResolution");
- buf.PushEndEvent();
- }
- void SetProduct(ref Internal.IBuffer buf, string productName, Product product)
- {
- buf.PushObjectStart(productName);
- if (product.RealCurrency.HasValue)
- {
- buf.PushObjectStart("realCurrency");
- buf.PushString(product.RealCurrency.Value.RealCurrencyType, "realCurrencyType");
- buf.PushInt64(product.RealCurrency.Value.RealCurrencyAmount, "realCurrencyAmount");
- buf.PushObjectEnd();
- }
- if (product.VirtualCurrencies != null && product.VirtualCurrencies.Count != 0)
- {
- buf.PushArrayStart("virtualCurrencies");
- foreach (var virtualCurrency in product.VirtualCurrencies)
- {
- buf.PushObjectStart();
- buf.PushObjectStart("virtualCurrency");
- buf.PushString(virtualCurrency.VirtualCurrencyName, "virtualCurrencyName");
- buf.PushString(virtualCurrency.VirtualCurrencyType.ToString(), "virtualCurrencyType");
- buf.PushInt64(virtualCurrency.VirtualCurrencyAmount, "virtualCurrencyAmount");
- buf.PushObjectEnd();
- buf.PushObjectEnd();
- }
- buf.PushArrayEnd();
- }
- if (product.Items != null && product.Items.Count != 0)
- {
- buf.PushArrayStart("items");
- foreach (var item in product.Items)
- {
- buf.PushObjectStart();
- buf.PushObjectStart("item");
- buf.PushString(item.ItemName, "itemName");
- buf.PushString(item.ItemType, "itemType");
- buf.PushInt64(item.ItemAmount, "itemAmount");
- buf.PushObjectEnd();
- buf.PushObjectEnd();
- }
- buf.PushArrayEnd();
- }
- buf.PushObjectEnd();
- }
- }
- }
|