public static Task <int> RequestRefreshTokenAsync(this OAuth2Authenticator authenticator, string refreshToken)
        #endif

        {
            var queryValues = new Dictionary <string, string>
            {
                { "refresh_token", refreshToken },
                { "client_id", authenticator.ClientId },
                { "grant_type", "refresh_token" }
            };

            if (!string.IsNullOrEmpty(authenticator.ClientSecret))
            {
                queryValues["client_secret"] = authenticator.ClientSecret;
            }

            return(authenticator.RequestAccessTokenAsync(queryValues)
                   .ContinueWith
                   (
                       result =>
            {
                var accountProperties = result.Result;

                authenticator.OnRetrievedAccountProperties(accountProperties);

                return int.Parse(accountProperties["expires_in"]);
            }
                   ));
        }
        private async Task GetRefreshToken()
        {
            try
            {
                var account = AccountStore.Create().FindAccountsForService(Constants.AppName).FirstOrDefault();
                if (account == null)
                {
                    await Navigation.PushModalAsync(new Login());

                    return;
                }
                var refreshToken = account.Properties["refresh_token"];

                if (string.IsNullOrWhiteSpace(refreshToken))
                {
                    return;
                }
                var queryValues = new Dictionary <string, string>
                {
                    { "refresh_token", refreshToken },
                    { "client_id", Constants.AndroidClientId },
                    { "grant_type", "refresh_token" },
                    { "client_secret", null },
                };
                authenticator = new OAuth2Authenticator(
                    Constants.AndroidClientId,
                    null,
                    Constants.Scope,
                    new Uri(Constants.AuthorizeUrl),
                    new Uri(Constants.AndroidRedirectUrl),
                    new Uri(Constants.AccessTokenUrl),
                    null,
                    true);

                var result = await authenticator.RequestAccessTokenAsync(queryValues);

                if (result.ContainsKey("access_token"))
                {
                    account.Properties["access_token"] = result["access_token"];
                }

                if (result.ContainsKey("refresh_token"))
                {
                    account.Properties["refresh_token"] = result["refresh_token"];
                }

                //save account to account store
                AccountStore.Create().Save(account, Constants.AppName);

                await DisplayAlert("Info", "Refresh succeeded", "Ok");
            }
            catch (Exception ex)
            {
                await DisplayAlert("Error", "Refresh failed " + ex.Message, "Ok");
            }
        }