/// <summary> /// Purge the campaign tracking data /// </summary> public static xPromoCampaignTrackingListData PurgeCampaigns(xPromoCampaignListData campaignListList, xPromoCampaignTrackingListData trackingData) { List <xPromoCampaignTrackingData> trackingDataList = new List <xPromoCampaignTrackingData>(); for (int i = 0; i < campaignListList.games.Length; i++) { xPromoCampaignTrackingData trackingDataItem = GetTrackingDataItem(trackingData, campaignListList.games[i].campaignId); if (trackingDataItem == null) { trackingDataItem = new xPromoCampaignTrackingData { campaignId = campaignListList.games[i].campaignId, views = 0, todayViews = 0 }; } trackingDataList.Add(trackingDataItem); } xPromoCampaignTrackingListData newTrackingData = new xPromoCampaignTrackingListData(); newTrackingData.campaigns = new xPromoCampaignTrackingData[trackingDataList.Count]; for (int i = 0; i < trackingDataList.Count; i++) { newTrackingData.campaigns[i] = trackingDataList[i]; } // Save to local the new tracking data SaveToLocal(newTrackingData); return(newTrackingData); }
/// <summary> /// Save the tracking of the campaigns to local storage /// </summary> public static void SaveToLocal(xPromoCampaignTrackingListData trackingData) { string json = JsonUtility.ToJson(trackingData); PlayerPrefs.SetString(xPromoTrackingKey, json); PlayerPrefs.Save(); }
public void LogTrackingData(xPromoCampaignTrackingListData trackingData) { _trackingDataLog = ""; if (trackingData != null && trackingData.campaigns.Length > 0) { for (int i = 0; i < trackingData.campaigns.Length; i++) { _trackingDataLog += $"{trackingData.campaigns[i].campaignId}\t{trackingData.campaigns[i].views}\t{trackingData.campaigns[i].todayViews}\n"; } } else { _trackingDataLog = "Empty"; } OnLog?.Invoke(_trackingDataLog); _notifyOnChange?.Invoke(); }
private static xPromoCampaignTrackingData GetTrackingDataItem(xPromoCampaignTrackingListData trackingData, string campaignId) { if (trackingData == null) { return(null); } for (int i = 0; i < trackingData.campaigns.Length; i++) { if (string.Compare(trackingData.campaigns[i].campaignId, campaignId, StringComparison.InvariantCulture) == 0) { return(trackingData.campaigns[i]); } } return(null); }
/// <summary> /// Read from local storage /// </summary> public static xPromoCampaignTrackingListData ReadFromLocal() { string json = PlayerPrefs.GetString(xPromoTrackingKey, string.Empty); if (!string.IsNullOrEmpty(json)) { xPromoCampaignTrackingListData trackingData = JsonUtility.FromJson <xPromoCampaignTrackingListData>(json); if (trackingData != null && trackingData.campaigns.Length > 0) { var lastDayMeasuredStr = PlayerPrefs.GetString(xPromoTrackingDayKey, string.Empty); if (!string.IsNullOrEmpty(lastDayMeasuredStr)) { long lastDayMeasuredInSeconds = long.Parse(lastDayMeasuredStr); DateTime lastDayMeasured = baseDate.ToLocalTime(); lastDayMeasured = lastDayMeasured.AddSeconds(lastDayMeasuredInSeconds); var now = DateTime.Now; bool isAnotherDay = (lastDayMeasured.Year != now.Year || lastDayMeasured.Month != now.Month || lastDayMeasured.Day != now.Day); if (isAnotherDay) { for (int i = 0; i < trackingData.campaigns.Length; i++) { trackingData.campaigns[i].todayViews = 0; } lastDayMeasuredInSeconds = ((DateTimeOffset)lastDayMeasured).ToUnixTimeSeconds(); PlayerPrefs.SetString(xPromoTrackingDayKey, lastDayMeasuredInSeconds.ToString()); PlayerPrefs.Save(); } } } return(trackingData); } else { return(null); } }
/// <summary> /// Init the xPromo Manager /// </summary> public void Init(string remoteJson, xPromoCampaign[] embeddedCampaigns = null) { Log("Init"); // Set Embedded campaigns _embeddedCampaignsElements = embeddedCampaigns; // Try using remote json bool remoteJsonIsValid = LoadCampaingDataFromJson(remoteJson); if (remoteJsonIsValid) { SaveLocalCampaingData("The provided remote json is valid"); } else { Log("Remote campaign data is not valid"); // Get the latest json from local storage string localJson = LoadLocalCampaingData(); bool localJsonIsValid = LoadCampaingDataFromJson(localJson); if (!localJsonIsValid) { Log($"Campaigns were read from local json"); } else { Log("There are no campaigns stored locally. Exit from xPromo."); return; } } trackingData = xPromoCampaignTracking.ReadFromLocal(); trackingData = xPromoCampaignTracking.PurgeCampaigns(campaignListData, trackingData); // Convert the dates to the local format for (int i = 0; i < campaignListData.games.Length; i++) { if (campaignListData.games[i].startDate > 0) { DateTime date1 = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime(); campaignListData.games[i].startDateTime = date1.AddSeconds(campaignListData.games[i].startDate); } else { campaignListData.games[i].startDateTime = DateTime.MinValue; } if (campaignListData.games[i].endDate > 0) { DateTime date2 = new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime(); campaignListData.games[i].endDateTime = date2.AddSeconds(campaignListData.games[i].endDate); } else { campaignListData.games[i].endDateTime = DateTime.MaxValue; } } ReBuildFileteredList(); // Logger logger.LogCampaigns(campaignListData); logger.LogTrackingData(trackingData); xPromoDownloadManager.Instance.StartDownload(campaignListData.assetsURL, buildAssetsToDownloadList(campaignListData)); }