/// <summary> /// Builds request URL using ServerUrl, AppKey, DeviceID and supplied queryParams parameters. /// The data is appended in the URL. /// </summary> /// <param name="queryParams"></param> /// <returns></returns> private string BuildGetRequest(Dictionary <string, object> queryParams) { var requestStringBuilder = new StringBuilder(); //Metrics added to each request foreach (var item in _countlyUtils.GetBaseParams()) { requestStringBuilder.AppendFormat((item.Key != "app_key" ? "&" : string.Empty) + "{0}={1}", UnityWebRequest.EscapeURL(item.Key), UnityWebRequest.EscapeURL(Convert.ToString(item.Value))); } //Query params supplied for creating request foreach (var item in queryParams) { if (!string.IsNullOrEmpty(item.Key) && item.Value != null) { requestStringBuilder.AppendFormat("&{0}={1}", UnityWebRequest.EscapeURL(item.Key), UnityWebRequest.EscapeURL(Convert.ToString(item.Value))); } } if (!string.IsNullOrEmpty(_config.Salt)) { // Create a SHA256 using (var sha256Hash = SHA256.Create()) { var data = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(requestStringBuilder + _config.Salt)); requestStringBuilder.Insert(0, _countlyUtils.GetBaseInputUrl()); return(requestStringBuilder.AppendFormat("&checksum256={0}", _countlyUtils.GetStringFromBytes(data)).ToString()); } } requestStringBuilder.Insert(0, _countlyUtils.GetBaseInputUrl()); return(requestStringBuilder.ToString()); }