void SaveLog() { if (stringBuilder.Length == 0) { return; } GSRequestData logData = new GSRequestData(); logData.AddString("key", "InAppPurchase"); logData.AddString("message", "User purchase in-app"); GSData _d = new GSData(new Dictionary <string, object>() { { "purchase", stringBuilder }, }); logData.AddObject("data", _d); GameSparksManager.Instance.Log(logData); string purchaseLog = PreferencesFactory.GetString("PurchaseLog", ""); purchaseLog = string.Format("{0}\n-----------\n{1}", purchaseLog, stringBuilder); PreferencesFactory.SetString("PurchaseLog", purchaseLog); stringBuilder.Length = 0; }
/** Converts a serializable object into GameSparks compatible GSData. */ public static GSRequestData ObjectToGSData(object obj) { GSRequestData gsData = new GSRequestData(); gsData.AddString("type", obj.GetType().ToString()); foreach (var field in obj.GetType().GetFields()) { if (!field.IsNotSerialized && field.GetValue(obj) != null) { if (field.FieldType == typeof(string)) { gsData.AddString(field.Name, field.GetValue(obj).ToString()); } else if (field.FieldType == typeof(bool)) { gsData.AddBoolean(field.Name, bool.Parse(field.GetValue(obj).ToString())); } else if (field.FieldType == typeof(int)) { gsData.AddNumber(field.Name, (int)Convert.ToInt32(field.GetValue(obj))); } else if (field.FieldType == typeof(float) || field.GetValue(obj).GetType() == typeof(double)) { gsData.AddNumber(field.Name, Double.Parse(field.GetValue(obj).ToString())); } else if (field.FieldType == typeof(List <string>) || field.GetValue(obj).GetType() == typeof(string[])) { gsData.AddStringList(field.Name, (field.FieldType == typeof(List <string>)) ? field.GetValue(obj) as List <string> : new List <string>(field.GetValue(obj) as string[])); } else if (field.FieldType == typeof(List <int>) || field.GetValue(obj).GetType() == typeof(int[])) { gsData.AddNumberList(field.Name, (field.FieldType == typeof(List <int>)) ? field.GetValue(obj) as List <int> : new List <int>(field.GetValue(obj) as int[])); } else if (field.FieldType == typeof(List <float>) || field.GetValue(obj).GetType() == typeof(float[])) { gsData.AddNumberList(field.Name, (field.FieldType == typeof(List <float>)) ? field.GetValue(obj) as List <float> : new List <float>(field.GetValue(obj) as float[])); } else if (field.FieldType == typeof(DateTime)) { gsData.AddDate(field.Name, (DateTime)field.GetValue(obj)); } else if (field.FieldType.IsClass && !field.FieldType.IsGenericType) { gsData.AddObject(field.Name, ObjectToGSData(field.GetValue(obj))); } else if (field.FieldType.IsGenericType && field.FieldType.GetGenericTypeDefinition() == typeof(List <>) || field.FieldType.IsArray) { List <GSData> gsDataList = new List <GSData>(); foreach (var elem in field.GetValue(obj) as IList) { gsDataList.Add(ObjectToGSData(elem)); } gsData.AddObjectList(field.Name, gsDataList); } } } Debug.LogWarning(gsData.JSON); return(gsData); }
public void SyncRestore() { if (!IsUserLoggedIn()) { return; } new LogEventRequest() .SetEventKey("LoadPlayerProgress") .Send((response) => { if (!response.HasErrors && response.ScriptData != null) { GSData data = response.ScriptData.GetGSData("data"); if (data == null) { return; } DateTime now = UnbiasedTime.Instance.Now(); string json = data.JSON; // date from remote json DateTime syncDate = now; if (data.ContainsKey("LastProgressSyncDate")) { syncDate = DateTime.Parse(data.GetString("LastProgressSyncDate")); } // date in device when was last sync DateTime lastUpdateDate = DateTime.Parse(PlayerPrefs.GetString("LastProgressSyncDate", now.ToString(CultureInfo.InvariantCulture))); MyDebug.Log("Should update prefs; lastUpdateDate: " + lastUpdateDate + "; syncDate: " + syncDate); if (syncDate.CompareTo(lastUpdateDate) != 0) { MyDebug.Log("Diff hash, update prefs"); JSONPrefs.Replace(json); // updating device date to sync date, because on next start shouldn't update again PlayerPrefs.SetString("LastProgressSyncDate", syncDate.ToString(CultureInfo.InvariantCulture)); PlayerPrefs.Save(); CustomGameManager manager = CustomGameManager.Instance as CustomGameManager; manager.ResetGame(); // reload data from sync LevelController.Instance.Reload(); // GSRequestData logData = new GSRequestData(); logData.AddString("key", "ProgressSync"); logData.AddString("message", "User synched progress from server"); GSData _d = new GSData(new Dictionary <string, object>() { { "Date in JSON", syncDate }, { "Date in device", lastUpdateDate } }); logData.AddObject("data", _d); Log(logData); } GetAwards(); // safe place to get awards } }); }
public void RefreshChallengesList() { if (_refreshCoroutine != null) { StopCoroutine(_refreshCoroutine); } _challenges.Clear(); var requestData = new GSRequestData(); requestData.AddString("Language", LanguageUtils.RealLanguage(LocaliseText.Language)); var eligibilityCriteria = new GSRequestData(); GSData _d = new GSData(new Dictionary <string, object>() { { "Language", LanguageUtils.RealLanguage(LocaliseText.Language) } }); eligibilityCriteria.AddObject("segments", _d); new FindChallengeRequest() .SetAccessType("PUBLIC") .SetShortCode(new List <string> { Constants.ChallengeShortCode }) .SetScriptData(requestData) .SetEligibility(eligibilityCriteria) .Send((secondResponse) => { var publicChallenges = secondResponse.ChallengeInstances; if (publicChallenges == null || !publicChallenges.Any()) { var challengesData = secondResponse.ScriptData; if (challengesData == null) { return; } var dataList = secondResponse.ScriptData.GetGSDataList("challenges"); if (dataList != null) { if (dataList.Count > 0) { var enumerator = dataList.GetEnumerator(); while (enumerator.MoveNext()) { var current = enumerator.Current; if (current != null) { string username = null; string userId = null; var challengeId = current.GetString("challengeId"); var scriptData = current.GetGSData("scriptData"); if (scriptData != null) { } var challenger = current.GetGSData("challenger"); if (challenger != null) { username = challenger.GetString("name"); userId = challenger.GetString("id"); if (userId == PreferencesFactory.GetString(Constants.ProfileUserId)) { continue; } } var ch = new Challenge { ChallengeId = challengeId, UserName = username, UserId = userId, AvatarUploadId = "", ExternalIds = null }; _challenges.Add(ch); } } enumerator.Dispose(); } } } List <string> _ignoreChallangeIds = new List <string>(); var ignoreList = secondResponse.ScriptData.GetGSDataList("ignoreChallanges"); if (ignoreList != null) { var challengesIgnoreEnum = ignoreList.GetEnumerator(); while (challengesIgnoreEnum.MoveNext()) { var challenge = challengesIgnoreEnum.Current; _ignoreChallangeIds.Add(challenge.GetString("challengeId")); } } if (publicChallenges != null) { var challengesEnum = publicChallenges.GetEnumerator(); while (challengesEnum.MoveNext()) { var challenge = challengesEnum.Current; if (_ignoreChallangeIds.Contains(challenge.ChallengeId)) { continue; } var scriptData = challenge.ScriptData; var showInList = true; if (scriptData != null) { var k = scriptData.GetBoolean("showInList"); if (k != null) { showInList = (bool)k; } } if (showInList) { var username = challenge.Challenger.Name; var userId = challenge.Challenger.Id; if (userId == PreferencesFactory.GetString(Constants.ProfileUserId)) { continue; } var ch = new Challenge { ChallengeId = challenge.ChallengeId, UserName = username, UserId = userId, AvatarUploadId = challenge.ScriptData.GetString("avatarUploadId"), ExternalIds = challenge.Challenger.ExternalIds }; _challenges.Add(ch); } } challengesEnum.Dispose(); if (_onChallengeDetected != null) { _onChallengeDetected.OnChallengesListeFetched(_challenges); } } if (ShouldGetChallengesList) { _refreshCoroutine = CoRoutines.DelayedCallback(_challengeRefreshRate, RefreshChallengesList); StartCoroutine(_refreshCoroutine); } }); }