public Parameters Copy() { Parameters copy = new Parameters(); copy.advertiserId = this.advertiserId; copy.advertiserKey = this.advertiserKey; copy.culture = this.culture; copy.matRequest = this.matRequest; //Make this a hard copy copy.urlEncrypter = this.urlEncrypter; copy.Age = this.Age; copy.AllowDuplicates = this.AllowDuplicates; copy.Altitude = this.Altitude; copy.AppAdTracking = this.AppAdTracking; copy.AppName = this.AppName; copy.AppVersion = this.AppVersion; copy.ASHWID = this.ASHWID; copy.DebugMode = this.DebugMode; copy.DeviceBrand = this.DeviceBrand; copy.DeviceModel = this.DeviceModel; copy.DeviceType = this.DeviceType; copy.EventContentType = this.EventContentType; copy.EventContentId = this.EventContentId; copy.EventLevel = this.EventLevel; copy.EventQuantity = this.EventQuantity; copy.EventSearchString = this.EventSearchString; copy.EventRating = this.EventRating; copy.EventDate1 = this.EventDate1; copy.EventDate2 = this.EventDate2; copy.EventAttribute1 = this.EventAttribute1; copy.EventAttribute2 = this.EventAttribute2; copy.EventAttribute3 = this.EventAttribute3; copy.EventAttribute4 = this.EventAttribute4; copy.EventAttribute5 = this.EventAttribute5; copy.ExistingUser = this.ExistingUser; copy.FacebookUserId = this.FacebookUserId; copy.Gender = this.Gender; copy.GoogleUserId = this.GoogleUserId; copy.IsPayingUser = this.IsPayingUser; copy.LastOpenLogId = this.LastOpenLogId; copy.Latitude = this.Latitude; copy.Longitude = this.Longitude; copy.MatId = this.MatId; copy.OpenLogId = this.OpenLogId; copy.PackageName = this.PackageName; copy.TwitterUserId = this.TwitterUserId; copy.UserAgent = this.UserAgent; copy.UserEmail = this.UserEmail; copy.UserId = this.UserId; copy.UserName = this.UserName; copy.WindowsAid = this.WindowsAid; return copy; }
protected internal MATEventQueue(Parameters parameters) { this.parameters = parameters; syncLock = new Object(); }
internal MATUrlRequester(Parameters parameters, MATEventQueue eventQueue) { this.parameters = parameters; this.eventQueue = eventQueue; }
//TODO: Look into using JSON rather than strings public static string BuildUrl(string action, string eventName, double revenue, string currency, string refId, List<MATEventItem> eventItems, Parameters parameters) { StringBuilder url = new StringBuilder("https://"); url.Append(Uri.EscapeUriString(parameters.advertiserId)).Append("."); if (parameters.DebugMode) url.Append("debug."); url.Append(DOMAIN).Append("/serve?sdk=").Append(SDK_TYPE).Append("&ver=").Append(SDK_VERSION); url.Append("&advertiser_id=").Append(Uri.EscapeUriString(parameters.advertiserId)); url.Append("&mat_id=").Append(Uri.EscapeUriString(parameters.MatId)); url.Append("&action=").Append(Uri.EscapeUriString(action)); url.Append("&package_name=").Append(Uri.EscapeUriString(parameters.PackageName)); url.Append("&transaction_id=").Append(Guid.NewGuid().ToString().ToUpper()); // Append event name/ID for events if (action.Equals("conversion")) { long value; if (long.TryParse(eventName, out value)) url.Append("&site_event_id=").Append(eventName); else url.Append("&site_event_name=").Append(Uri.EscapeUriString(eventName)); } // Append open log id if (parameters.OpenLogId != null) url.Append("&open_log_id=").Append(Uri.EscapeUriString(parameters.OpenLogId)); if (parameters.LastOpenLogId != null) url.Append("&last_open_log_id=").Append(Uri.EscapeUriString(parameters.LastOpenLogId)); if (parameters.AllowDuplicates) url.Append("&skip_dup=1"); if (parameters.DebugMode) url.Append("&debug=1"); if (parameters.ExistingUser) url.Append("&existing_user=1"); // Construct encrypted data params and append to url StringBuilder data = new StringBuilder(); // Add UNIX timestamp as system date long timestamp = UnixTimestamp(); data.Append("&system_date=").Append(timestamp.ToString()); data.Append("&windows_aid=").Append(Uri.EscapeUriString(parameters.WindowsAid)); data.Append("&app_name=").Append(Uri.EscapeUriString(parameters.AppName)); data.Append("&app_version=").Append(Uri.EscapeUriString(parameters.AppVersion)); data.Append("&os_id=").Append(Uri.EscapeUriString(parameters.ASHWID)); if (parameters.UserAgent != null) data.Append("&user_agent=").Append(Uri.EscapeUriString(parameters.UserAgent)); if (parameters.AppAdTracking) data.Append("&app_ad_tracking=1"); else data.Append("&app_ad_tracking=0"); if (revenue > 0) data.Append("&revenue=").Append(Uri.EscapeUriString(revenue.ToString(parameters.culture))); if (currency != null) data.Append("¤cy_code=").Append(Uri.EscapeUriString(currency)); if (refId != null) data.Append("&advertiser_ref_id=").Append(Uri.EscapeUriString(refId)); if (parameters.Age > 0) data.Append("&age=").Append(Uri.EscapeUriString(parameters.Age.ToString(parameters.culture))); data.Append("&altitude=").Append(Uri.EscapeUriString(parameters.Altitude.ToString())); if (parameters.EventContentType != null) data.Append("&content_type=").Append(Uri.EscapeUriString(parameters.EventContentType)); if (parameters.EventContentId != null) data.Append("&content_id=").Append(Uri.EscapeUriString(parameters.EventContentId)); data.Append("&level=").Append(parameters.EventLevel.ToString()); data.Append("&quantity=").Append(parameters.EventQuantity.ToString()); if (parameters.EventSearchString != null) data.Append("&search_string=").Append(Uri.EscapeUriString(parameters.EventSearchString)); data.Append("&rating=").Append(Uri.EscapeUriString(parameters.EventRating.ToString())); if (parameters.EventDate1 != null) data.Append("&date1=").Append(Uri.EscapeUriString(UnixTimestamp(parameters.EventDate1).ToString())); if (parameters.EventDate2 != null) data.Append("&date2=").Append(Uri.EscapeUriString(UnixTimestamp(parameters.EventDate2).ToString())); if (parameters.EventAttribute1 != null) data.Append("&attribute_sub1=").Append(Uri.EscapeUriString(parameters.EventAttribute1)); if (parameters.EventAttribute2 != null) data.Append("&attribute_sub2=").Append(Uri.EscapeUriString(parameters.EventAttribute2)); if (parameters.EventAttribute3 != null) data.Append("&attribute_sub3=").Append(Uri.EscapeUriString(parameters.EventAttribute3)); if (parameters.EventAttribute4 != null) data.Append("&attribute_sub4=").Append(Uri.EscapeUriString(parameters.EventAttribute4)); if (parameters.EventAttribute5 != null) data.Append("&attribute_sub5=").Append(Uri.EscapeUriString(parameters.EventAttribute5)); if (parameters.DeviceBrand != null) data.Append("&device_brand=").Append(Uri.EscapeUriString(parameters.DeviceBrand)); if (parameters.DeviceModel != null) data.Append("&device_model=").Append(Uri.EscapeUriString(parameters.DeviceModel)); if (parameters.DeviceType != null) data.Append("&device_type=").Append(Uri.EscapeUriString(parameters.DeviceType)); if (parameters.FacebookUserId != null) data.Append("&facebook_user_id=").Append(Uri.EscapeUriString(parameters.FacebookUserId)); if (parameters.Gender != MATGender.NONE) data.Append("&gender=").Append(Uri.EscapeUriString(((int)parameters.Gender).ToString(parameters.culture))); if (parameters.GoogleUserId != null) data.Append("&google_user_id=").Append(Uri.EscapeUriString(parameters.GoogleUserId)); if (parameters.IsPayingUser != false) data.Append("&is_paying_user=1"); if (parameters.Latitude != 0) data.Append("&latitude=").Append(Uri.EscapeUriString(parameters.Latitude.ToString(parameters.culture))); if (parameters.Longitude != 0) data.Append("&longitude=").Append(Uri.EscapeUriString(parameters.Longitude.ToString(parameters.culture))); if (parameters.TwitterUserId != null) data.Append("&twitter_user_id=").Append(Uri.EscapeUriString(parameters.TwitterUserId)); if (parameters.UserEmail != null) data.Append("&user_email=").Append(Uri.EscapeUriString(parameters.UserEmail)); if (parameters.UserId != null) data.Append("&user_id=").Append(Uri.EscapeUriString(parameters.UserId)); if (parameters.UserName != null) data.Append("&user_name=").Append(Uri.EscapeUriString(parameters.UserName)); // Add event items to url as json string if (eventItems != null) data.Append("&site_event_items=").Append(Uri.EscapeUriString(JsonConvert.SerializeObject(eventItems))); if (parameters.matRequest != null) parameters.matRequest.ParamsToBeEncrypted(data.ToString()); // Encrypt data string string dataStr = parameters.urlEncrypter.Encrypt(data.ToString()); url.Append("&data=").Append(dataStr); url.Append("&response_format=json"); if (parameters.matRequest != null) parameters.matRequest.ConstructedRequest(url.ToString()); return url.ToString(); }
// Add a url to event queue to send later internal void ProcessTrackingRequest(string action, string eventName, double revenue, string currency, string refId, List<MATEventItem> eventItems, Parameters paramCopy) { Debug.WriteLine("Processing tracking request"); lock (syncLock) { Task.Factory.StartNew(() => { DumpQueue(); string url = MATUrlBuilder.BuildUrl(action, eventName, revenue, currency, refId, eventItems, paramCopy); AddToQueue(url, 0); DumpQueue(); }); } }
internal MATEventQueue(Parameters parameters) { syncLock = new object(); this.parameters = parameters; }
internal void ProcessTrackingRequest(string action, string eventName, double revenue, string currency, string refId, List<MATEventItem> eventItems, Parameters copy) { lock (syncLock) { if (queueThread == null || !queueThread.IsAlive) { queueThread = new Thread(delegate() //Start on separate thread to avoid slowdown { DumpQueue(); //Clear anything from the last dump List<MATUrlBuilder.URLInfo> eventQueue; // Get existing event queue or create new one if (IsolatedStorageSettings.ApplicationSettings.Contains(SETTINGS_MATEVENTQUEUE_KEY) && IsolatedStorageSettings.ApplicationSettings[SETTINGS_MATEVENTQUEUE_KEY].GetType() == typeof(List<MATUrlBuilder.URLInfo>)) { eventQueue = (List<MATUrlBuilder.URLInfo>)IsolatedStorageSettings.ApplicationSettings[SETTINGS_MATEVENTQUEUE_KEY]; } else // No existing queue, create { IsolatedStorageSettings.ApplicationSettings.Remove(SETTINGS_MATEVENTQUEUE_KEY); eventQueue = new List<MATUrlBuilder.URLInfo>(); } MATUrlBuilder.URLInfo url = MATUrlBuilder.BuildUrl(action, eventName, revenue, currency, refId, eventItems, copy); eventQueue.Add(url); SaveLocalSetting(SETTINGS_MATEVENTQUEUE_KEY, eventQueue); if (parameters.matResponse != null) parameters.matResponse.EnqueuedActionWithRefId(refId); DumpQueue(); }); queueThread.Start(); } } }
public void InitializeValues(string advId, string advKey) { var hardwareId = HardwareIdentification.GetPackageSpecificToken(null).Id; var dataReader = DataReader.FromBuffer(hardwareId); byte[] bytes = new byte[hardwareId.Length]; dataReader.ReadBytes(bytes); this.parameters = new Parameters(advId, advKey, bytes); eventQueue = new MATEventQueue(parameters); GetUserAgent(); // Handles the OnNetworkStatusChange event NetworkStatusChangedEventHandler networkStatusCallback = null; // Indicates if the connection profile is registered for network status change events. Set the default value to FALSE. bool registeredNetworkStatusNotif = false; networkStatusCallback = new NetworkStatusChangedEventHandler(OnNetworkStatusChange); // Register for network status change notifications if (!registeredNetworkStatusNotif) { NetworkInformation.NetworkStatusChanged += networkStatusCallback; registeredNetworkStatusNotif = true; } // Send queued requests eventQueue.DumpQueue(); }
public MATEventQueueWrapper(Parameters parameters) { this.parameters = parameters; }
public void InitializeValues(string advId, string advKey) { urlEncrypter = new Encryption(advKey, IV); // Attached objects for attributes, queue functionality, and more this.parameters = new Parameters(advId, advKey); eventQueue = new MATEventQueue(parameters); // Add listener for network availability DeviceNetworkInformation.NetworkAvailabilityChanged += DeviceNetworkInformation_NetworkAvailabilityChanged; // Check for Internet connectivity and send queued requests if (DeviceNetworkInformation.IsNetworkAvailable) { eventQueue.DumpQueue(); } }