Project Track – Nozbe API

Kolejny tydzień zmagań z Xamarinem i to przez wielkie Z. Czuję się pisząc ten projekt jak na samym początku mojej kariery. Wszystko jest nowe, wszystko inne, wszystko fascynujące. Nie sądziłem, że ten projekt będzie mi dawał tyle przyjemności. Dzisiaj trochę o zakładkach (tabach) i o problemach z API Nozbe.

Celem na ten tydzień tak jak w ostatnio wspominałem było to żeby połączyć się ze swoim kontem na Nozbe i pobrać jakieś dane. Muszę przyznać, że okazało się to trudniejsze niż mi się wydawało. Nozbe teoretycznie udostępnia API do połączenia z kontami. Cała dokumentacja dostępna jest tutaj. Po stronie widać, że niestety udostępnienie API nie jest dla firmy priorytetem i dokumentacja, jak i samo API jest dosyć ubogie. No ale co tam trzeba spróbować. No i kombinowałem jak to ogarnąć na najróżniejsze sposoby, ale albo dostawałem zwrotkę 404 Not Found albo 400 Bad Request. Ech było to naprawdę frustrujące, że z taką w zasadzie prostą rzeczą nie mogę sobie z jakiegoś powodu poradzić. Ostatecznie stwierdziłem, że nie ma sensu na razie tracić na to czasu i połączyłem się z nimi za pomocą starego, niewspieranego już API w którym wysyła się request po prostu przekazując odpowiednie parametry w adresie i dostaję JSONa. Sytuacja nie optymalna, ale na razie wystarczy żeby pchnąć projekt dalej. W między czasie jestem w kontakcie z obsługą klienta Nozbe i mam nadzieję, że wspólnie uda nam się w końcu pokonać moje problemy.

Kiedy już udało się otrzymać jakieś informacje z systemu to stwierdziłem, że pora ogarnąć jakieś kolejne widoki i zacząć powoli nadawać kształt aplikacji. Trochę poczytałem, pomyślałem co faktycznie chciałbym osiągnąć i znalazłem rozwiązanie.

Tabbed Page

W aplikacjach mobilnych sposobów na nawigację po apce jest przynajmniej kilka. Jednak już od samego początku wiedziałem jak chcę żeby wyglądało to u mnie, tylko nie miałem pojęcia jak takie podejście się nazywa. Szybkie googlowanie i wyszło, że chodzi o Tabbed Page, a w przykładzie wygląda to tak:

Chodzi o to, że różne strony są dostępne pod zakładkami. Okazuje się, że implementacja tego w Xamarinie jest banalnie prosta. Wystarczy jako stronę startową dać takiego XAMLa:

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="ProjectTrack.Tabbed" Title="Project Track">

</TabbedPage>

A następnie w .xaml.cs dodać odpowiednie zakładki jako dzieci:

namespace ProjectTrack
{ 
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class Tabbed : TabbedPage
    {
        public Tabbed()
        {
            InitializeComponent();
            Children.Add(new MainPage());
            Children.Add(new ProjectPage());
        }
    }
}

To czego nie wiedziałem to to, że wszystkie strony z zakładek ładowane są już na starcie aplikacji. Może to później powodować pewne problemy z wydajnością i dłuższym czasem ładowania aplikacji, ale tym problemem zajmę się później o ile w ogóle wystąpi.

Nozbe API

No, ale wróćmy do API i połączenia z samym Nozbe.

Póki co tak jak wspomniałem na początku, połączyłem się ze starym API, które jest banalnie proste, tylko i wyłącznie po to żeby pchnąć rozwój aplikacji do przodu i nie musieć generować jakiś Mocków.

Proste podłączenie i pobranie projektów wygląda w tej chwili tak:

public class NozbeService
    {
        public string Key { get; set; }
        public NozbeService(string email, string password)
        {
            //Key = Login(email, password);
            Key = "unikalnyKluczAPI";
        }

        public string Login(string email, string password)
        {
            using (var client = new HttpClient())
            {
                var result = client.GetAsync("https://webapp.nozbe.com/api/login/email-"+email+"/password-"+password);
                return result.Result.Content.ReadAsStringAsync().Result;
            }
        }

        public string Projects()
        {
            using (var client = new HttpClient())
            {
                var result = client.GetAsync("https://webapp.nozbe.com/api/projects/key-" + Key);
                return result.Result.Content.ReadAsStringAsync().Result;
            }
            
        }


    }

Wprawne oko zauważy na pewno 2 rzeczy.

Po pierwsze na razie na sztywno wpisuje klucz do autoryzacji przez API. W późniejszej fazie dorobię integrację z kontem gdzie będzie można się albo zalogować swoim mailem i hasłem, albo podaniem klucza do API, które jest do wyciągnięcia z samej aplikacji Nozbe.

Po drugie używam asynchronicznych metod HttpClient w sposób synchroniczny. Stwierdziłem, że jeszcze nie bardzo czuję to jak w aplikacjach mobilnych wygląda cykl aplikacji dlatego wchodzenie w procesy asynchroniczne to jeszcze zbyt dużo 🙂

Na szczęście wszystko zadziałało tak jak bym sobie tego życzył i aplikacja wygląda w tej chwili tak:

GIF

Co na przyszły tydzień?

Cały czas nie ogarniam do końca sprawy z Commandami. Muszę sobie mocno odświeżyć moją wiedzę na ten temat i poczytać kilka artykułów. Ostatnio janko podpowiedział jak napisać to wszystko w bardziej czytelny sposób i na pewno będę chciał się tych podpowiedzi trzymać, ale brakuje mi trochę wiedzy odnośnie tego jakie to to ma możliwości.

Dlatego też planem na przyszły tydzień jest ogarnięcie Commandów i podpięcie ich pod stronę z projektami, gdzie w przypadku kliknięcia w dany projekt będziemy przechodzić do konkretnych jego zadań. Trzymajcie kciuki za sukces 🙂

 

Related posts

  • Pingback: dotnetomaniak.pl()

  • Też podchodziłem kiedyś do tego API, ale doszedłem do wniosku że nie uda mi się zrealizować na nim mojego mini-projektu.
    Ostatecznie przesiadłem się na Todoist do zarządzania zadaniami i tu pod tym kątem jest meega lepiej. Co nie zmienia faktu że za rodzimy produkt trzymam kciuki.

    Fajnie prezentujesz informacje, dobrze się czyta 🙂

    • Kajetan Duszyński

      Ehhh no właśnie zgłaszając projekt i planując go nie przewidziałem, że mogę napotkać takie problemy. Pomyślałem, że skoro jest API to powinno pójść gładko. No nic. Na razie na pewno jeszcze powalczę. Mam kontakt z Nozbe także mam nadzieję, że się uda. Co do Todoista to też być może w przyszłości dorobię integrację. Zobaczymy co czas przyniesie.
      Ach i wielkie dzięki za ostatnie słowa. Zawsze to daje mega kopa jak ktoś wspomni, że te wypociny dobrze się czyta 🙂