public void Load()
        {
            GameFoundationSdk.Uninitialize();

            if (_dataLayer?.persistence == null)
            {
                Debug.LogError("DataLayer is null.");
                return;
            }

            Deferred def = GameFoundationSdk.Initialize(_dataLayer);

            if (def.isDone)
            {
                if (def.isFulfilled)
                {
                    _onInitOrLoadComplete?.Invoke();
                    OnInitOrLoadComplete?.Invoke();
                }
                else
                {
                    Debug.LogError(def.error.Message);
                    _onInitOrLoadFail?.Invoke();
                }
            }
            else
            {
                IEnumerator Routine(Deferred aDef)
                {
                    yield return(aDef.Wait());

                    if (aDef.isFulfilled)
                    {
                        _onInitOrLoadComplete?.Invoke();
                        OnInitOrLoadComplete?.Invoke();
                    }
                    else
                    {
                        Debug.LogError(aDef.error.Message);
                        _onInitOrLoadFail?.Invoke();
                    }
                }

                StartCoroutine(Routine(def));
            }
        }
        public void Initialize()
        {
            var serializer  = new JsonDataSerializer();
            var persistence = new PlayFabPersistence(_key, serializer);

            _dataLayer = new PersistenceDataLayer(persistence);

            Deferred def = GameFoundationSdk.Initialize(_dataLayer);

            if (def.isDone)
            {
                if (def.isFulfilled)
                {
                    _onInitOrLoadComplete?.Invoke();
                    OnInitOrLoadComplete?.Invoke();
                }
                else
                {
                    Debug.LogError(def.error.Message);
                    _onInitOrLoadFail?.Invoke();
                }
            }
            else
            {
                IEnumerator Routine(Deferred aDef)
                {
                    yield return(aDef.Wait());

                    if (aDef.isFulfilled)
                    {
                        _onInitOrLoadComplete?.Invoke();
                        OnInitOrLoadComplete?.Invoke();
                    }
                    else
                    {
                        Debug.LogError(aDef.error.Message);
                        _onInitOrLoadFail?.Invoke();
                    }
                }

                StartCoroutine(Routine(def));
            }
        }