Beispiel #1
0
    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;
    }
Beispiel #2
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);
            }
        });
    }