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