Dziś szybkie podsumowanie sprintu.
Generalnie prace polegały na testowaniu funkcjonalności zaimplementowanej już przeze mnie.
Aplikacja działa prawidłowo, zgodnie ze scenariuszami Gherkin.
Dane użytkownika konta google chcę wykorzystać do tego aby zapisywać pomiary każdego użytkownika, co pozwoli użytkownikom na śledzenie swoich postępów.
Wybrałem gotowy system logowania google zamiast samodzielnie implementować mechanizm rejestracji, zmiany hasła, logowania. Nie chcę też przechowywać wszystkich danych użytkowników a jedynie ich pomiary, które będziemy prezentować na wykresach.
Do zaimplementowania były scenariusze:
# language: pl
Właściwość:
Jako użytkownik aplikacji mobilnej
chcę ekran logowania
aby mieć możliwość zapisywania swoich postępów
Scenariusz: Prawidłowe logowanie do aplikacji
Mając aktywne konto google
Jeśli na ekranie logowania podam swój login i hasło
I zatwierdze dane odpowiednim przyciskiem
Wtedy będę miał dostęp do wszystkich funkcjonalności aplikacji
Scenariusz: Nieprawidłowe logowanie do aplikacji
Mając brak konta google
Jeśli na ekranie logowania podam nieistniejący login i hasło
I zatwierdze dane odpowiednim przyciskiem
Wtedy nie będę miał dostępu do żadnej funkcjonalności aplikacji
I zostanę przeniesiony na ekran mówiący o nieudanej próbie logowania
Klasa Renderer, którą omówię po weekendzie wygląda tak:
public class AuthenticationPageRenderer : PageRenderer
{
bool isShown;
protected override void OnElementChanged(ElementChangedEventArgs e)
{
base.OnElementChanged(e);
var accounts = AccountStore.Create(Context).FindAccountsForService(App.AppName);
var account = accounts.FirstOrDefault();
if (account == null)
{
if (!isShown)
{
isShown = true;
var auth = new OAuth2Authenticator(
Constants.ClientId,
Constants.ClientSecret,
Constants.Scope,
new Uri(Constants.AuthorizeUrl),
new Uri(Constants.RedirectUrl),
new Uri(Constants.AccessTokenUrl));
auth.Completed += OnAuthenticationCompleted;
var activity = Context as Activity;
activity.StartActivity(auth.GetUI(activity));
}
}
else
{
if (!isShown)
{
App.User.Email = account.Username;
App.SuccessfulLoginAction.Invoke();
}
}
}
async void OnAuthenticationCompleted(object sender, AuthenticatorCompletedEventArgs e)
{
if (e.IsAuthenticated)
{
var request = new OAuth2Request("GET", new Uri(Constants.UserInfoUrl), null, e.Account);
var response = await request.GetResponseAsync();
if (response != null)
{
string userJson = response.GetResponseText();
App.User = JsonConvert.DeserializeObject(userJson);
e.Account.Username = App.User.Email;
AccountStore.Create(Context).Save(e.Account, App.AppName);
}
}
App.SuccessfulLoginAction.Invoke();
}
Generalnie prace polegały na testowaniu funkcjonalności zaimplementowanej już przeze mnie.
Aplikacja działa prawidłowo, zgodnie ze scenariuszami Gherkin.
Dane użytkownika konta google chcę wykorzystać do tego aby zapisywać pomiary każdego użytkownika, co pozwoli użytkownikom na śledzenie swoich postępów.
Wybrałem gotowy system logowania google zamiast samodzielnie implementować mechanizm rejestracji, zmiany hasła, logowania. Nie chcę też przechowywać wszystkich danych użytkowników a jedynie ich pomiary, które będziemy prezentować na wykresach.
Do zaimplementowania były scenariusze:
# language: pl
Właściwość:
Jako użytkownik aplikacji mobilnej
chcę ekran logowania
aby mieć możliwość zapisywania swoich postępów
Scenariusz: Prawidłowe logowanie do aplikacji
Mając aktywne konto google
Jeśli na ekranie logowania podam swój login i hasło
I zatwierdze dane odpowiednim przyciskiem
Wtedy będę miał dostęp do wszystkich funkcjonalności aplikacji
Scenariusz: Nieprawidłowe logowanie do aplikacji
Mając brak konta google
Jeśli na ekranie logowania podam nieistniejący login i hasło
I zatwierdze dane odpowiednim przyciskiem
Wtedy nie będę miał dostępu do żadnej funkcjonalności aplikacji
I zostanę przeniesiony na ekran mówiący o nieudanej próbie logowania
Klasa Renderer, którą omówię po weekendzie wygląda tak:
public class AuthenticationPageRenderer : PageRenderer
{
bool isShown;
protected override void OnElementChanged(ElementChangedEventArgs
{
base.OnElementChanged(e);
var accounts = AccountStore.Create(Context).FindAccountsForService(App.AppName);
var account = accounts.FirstOrDefault();
if (account == null)
{
if (!isShown)
{
isShown = true;
var auth = new OAuth2Authenticator(
Constants.ClientId,
Constants.ClientSecret,
Constants.Scope,
new Uri(Constants.AuthorizeUrl),
new Uri(Constants.RedirectUrl),
new Uri(Constants.AccessTokenUrl));
auth.Completed += OnAuthenticationCompleted;
var activity = Context as Activity;
activity.StartActivity(auth.GetUI(activity));
}
}
else
{
if (!isShown)
{
App.User.Email = account.Username;
App.SuccessfulLoginAction.Invoke();
}
}
}
async void OnAuthenticationCompleted(object sender, AuthenticatorCompletedEventArgs e)
{
if (e.IsAuthenticated)
{
var request = new OAuth2Request("GET", new Uri(Constants.UserInfoUrl), null, e.Account);
var response = await request.GetResponseAsync();
if (response != null)
{
string userJson = response.GetResponseText();
App.User = JsonConvert.DeserializeObject
e.Account.Username = App.User.Email;
AccountStore.Create(Context).Save(e.Account, App.AppName);
}
}
App.SuccessfulLoginAction.Invoke();
}
Komentarze
Prześlij komentarz