Форма Xamarin: добавляю ли я в TrackEvent много кода и можно ли использовать TrackError в операторе non catch - PullRequest
0 голосов
/ 01 марта 2019

Я не уверен, что иду по правильному пути.У меня есть много трек событий в этом методе, чтобы отслеживать поток пользователей.Кто-нибудь подскажет, вкладываю ли я слишком много.

try
            {
                #region AppCenter Analytics
                Diagnostic.TrackEvent("Start Refreshing Token",
                    new Dictionary<string, string>() {
                        { "Username",  username}
                    });
                #endregion

                #region AppCenter Diagnostics --Empty
                #endregion

                if (String.IsNullOrEmpty(refreshToken))
                {
                    #region AppCenter Analytics
                    Diagnostic.TrackEvent("Empty Refreshed Token",
                        new Dictionary<string, string>() {
                        { "Username",  username}
                        });
                    #endregion

                    #region AppCenter Diagnostics --Empty
                    #endregion

                    return new CommonResult<TokenModel>()
                    {
                        Data = null,
                        Code = (int) ErrorCode.ErrorRefreshTokenEmpty,
                        IsSuccess = false,
                        ErrorMessage = string.Empty,
                        Error = new ErrorData(new Exception("Refresh token is empty."), new string[] { })
                    };
                }

                #region AppCenter Analytics
                Diagnostic.TrackEvent("Get Discovery Endpoint",
                    new Dictionary<string, string>() {
                        { "Username",  username}
                    });
                #endregion

                #region Diagnostics -- Empty
                #endregion

                var disco = await GetDiscoveryResponseAsync();

                if (disco.IsError)
                {
                    #region AppCenter Analytics
                    Diagnostic.TrackEvent("Error Discovery Endpoint",
                        new Dictionary<string, string>() {
                        { "Username",  username}
                        });
                    #endregion

                    #region Diagnostics -- Empty
                    #endregion

                    return new CommonResult<TokenModel>() 
                    { 
                        Data = null, 
                        IsSuccess = false,
                        Code = (int) ErrorCode.ErrorDiscoveryEndpoint,
                        ErrorMessage = string.Empty
                    };
                }

                #region AppCenter Analytics
                Diagnostic.TrackEvent("Get Refresh Token Endpoint",
                    new Dictionary<string, string>() {
                        { "Username",  username},
                        { "Endpoint", disco.TokenEndpoint}
                    });
                #endregion

                #region Diagnostics -- Empty
                #endregion

                var httpClient = new HttpClient();
                var response = await httpClient.RequestRefreshTokenAsync(new RefreshTokenRequest()
                {
                    Address = disco.TokenEndpoint,

                    ClientId = clientId,
                    ClientSecret = clientSecret,
                    Scope = scope,
                    RefreshToken = refreshToken
                });

                if (response.IsError)
                {
                    #region AppCenter Analytics
                    Diagnostic.TrackEvent("Error getting refresh token",
                        new Dictionary<string, string>() {
                            { "Username",  username },
                            { "Endpoint", disco.TokenEndpoint } 
                        });
                    #endregion

                    #region Diagnostics -- Empty
                    #endregion

                    return new CommonResult<TokenModel>()
                    {
                        Data = null,
                        IsSuccess = false,
                        Code = (int)ErrorCode.ErrorRefreshToken,
                        ErrorMessage = string.Empty
                    };
                }

                var data = new TokenModel()
                {
                    ExpiresIn = response.ExpiresIn.ToString(),
                    TokenType = response.TokenType,
                    AccessToken = response.AccessToken,
                    RefreshToken = response.RefreshToken
                };

                return new CommonResult<TokenModel>() { Data = data, IsSuccess = true, ErrorMessage = String.Empty };
            }
            catch (Exception exception)
            {
                #region AppCenter Analytics
                Diagnostic.TrackEvent("Error Getting Refresh Token",
                    new Dictionary<string, string>() {
                        { "Username",  username}
                    });
                #endregion

                #region Diagnostics -- Empty
                Diagnostic.TrackErrorRequired(exception,
                    new Dictionary<string, string> {
                        { "Username", username },
                    });
                #endregion

                return new CommonResult<TokenModel>()
                {
                    Data = null,
                    IsSuccess = false,
                    Code = (int) ErrorCode.ErrorRefreshTokenUnknown,
                    ErrorMessage = string.Empty
                };
            }
        }

Также внутри оператора if, у которого есть ошибка при выполнении предыдущего кода, я должен вызвать Crashes.TrackError, чтобы отследить ошибку, или не должен использовать Crashes.TrackError, так как это не сбой.

Если не следует использовать Crashes.TrackError, какова лучшая практика для регистрации этих ошибок.Я могу поместить его в TrackEvent, но есть ограничение на количество символов, которые можно передать в качестве свойств.

1 Ответ

0 голосов
/ 01 марта 2019

TrackError специально для отслеживания обнаруженных исключений.

...