public void ShowUI(string leaderboardId, UM_LeaderboardTimeSpan timeSpan, Action <SA_Result> callback)
        {
            ISN_GKGameCenterViewController viewController = new ISN_GKGameCenterViewController();

            viewController.ViewState             = ISN_GKGameCenterViewControllerState.Leaderboards;
            viewController.LeaderboardIdentifier = leaderboardId;

            ISN_GKLeaderboardTimeScope scope = ISN_GKLeaderboardTimeScope.AllTime;

            switch (timeSpan)
            {
            case UM_LeaderboardTimeSpan.AllTime:
                scope = ISN_GKLeaderboardTimeScope.AllTime;
                break;

            case UM_LeaderboardTimeSpan.Daily:
                scope = ISN_GKLeaderboardTimeScope.Today;
                break;

            case UM_LeaderboardTimeSpan.Weekly:
                scope = ISN_GKLeaderboardTimeScope.Week;
                break;
            }

            viewController.LeaderboardTimeScope = scope;
            viewController.Show(() => {
                callback.Invoke(new SA_Result());
            });
        }
        /// <summary>
        /// Shows the default Game Center leaderboard UI
        /// </summary>
        /// <param name="leaderboardId"></param>
        /// <param name="timeScope"></param>
        public void ShowDefaultLeaderboardUI([CanBeNull] string leaderboardId     = null,
                                             ISN_GKLeaderboardTimeScope timeScope = ISN_GKLeaderboardTimeScope.Today)
        {
            if (GCenterLoginHelper.Instance.IsSignedIn() && _isInitialized)
            {
                _viewController.ViewState = ISN_GKGameCenterViewControllerState.Leaderboards;

                if (_viewController != null)
                {
                    if (string.IsNullOrEmpty(leaderboardId))
                    {
                        _viewController.Show();
                    }
                    else
                    {
                        _viewController.LeaderboardIdentifier = leaderboardId;
                        _viewController.LeaderboardTimeScope  = timeScope;
                        _viewController.Show();
                    }
                }
            }
            else
            {
                Debug.Log("Not signed into Game Center.");
            }
        }
        public void LoadCurrentPlayerScore(string leaderboardId, UM_LeaderboardTimeSpan span, UM_LeaderboardCollection collection, Action <UM_ScoreLoadResult> callback)
        {
            var leaderboardRequest = new ISN_GKLeaderboard();

            leaderboardRequest.Identifier = leaderboardId;


            ISN_GKLeaderboardPlayerScope isn_collection = ISN_GKLeaderboardPlayerScope.Global;

            switch (collection)
            {
            case UM_LeaderboardCollection.Public:
                isn_collection = ISN_GKLeaderboardPlayerScope.Global;
                break;

            case UM_LeaderboardCollection.Social:
                isn_collection = ISN_GKLeaderboardPlayerScope.FriendsOnly;
                break;
            }



            ISN_GKLeaderboardTimeScope isn_timeSpan = ISN_GKLeaderboardTimeScope.AllTime;

            switch (span)
            {
            case UM_LeaderboardTimeSpan.AllTime:
                isn_timeSpan = ISN_GKLeaderboardTimeScope.AllTime;
                break;

            case UM_LeaderboardTimeSpan.Weekly:
                isn_timeSpan = ISN_GKLeaderboardTimeScope.Week;
                break;

            case UM_LeaderboardTimeSpan.Daily:
                isn_timeSpan = ISN_GKLeaderboardTimeScope.Today;
                break;
            }

            leaderboardRequest.PlayerScope = isn_collection;
            leaderboardRequest.TimeScope   = isn_timeSpan;
            leaderboardRequest.Range       = new ISN_NSRange(1, 1);
            leaderboardRequest.LoadScores((result) => {
                UM_ScoreLoadResult um_result;

                if (result.IsSucceeded)
                {
                    UM_Score score = new UM_Score(leaderboardRequest.LocalPlayerScore.Value,
                                                  leaderboardRequest.LocalPlayerScore.Rank,
                                                  (int)leaderboardRequest.LocalPlayerScore.Context,
                                                  leaderboardRequest.LocalPlayerScore.DateUnix);

                    um_result = new UM_ScoreLoadResult(score);
                }
                else
                {
                    um_result = new UM_ScoreLoadResult(result.Error);
                }

                callback.Invoke(um_result);
            });
        }