Android Small Talks: Backendless, czyli alternatywa dla Parse.com

Android Small Talks: Backendless, czyli alternatywa dla Parse.com

Parse.com był jednym z najpopularniejszych serwisów typu MBaaS (Mobile backend as a service). Umożliwiał tworzenie bazy danych w chmurze i udostępniał do niej dostęp poprzez automatycznie generowane API. Niestety jakiś czas temu ogłoszono informację o zakończeniu tego projektu, co zmusiło nas do znalezienia alternatywy. Spośród wielu serwisów tego typu zdecydowałem się wybrać Backendless.com. Dlaczego właśnie to rozwiązanie uznałem za najlepsze?

Czemu wybrałem Backendless na mój serwis MBaaS?

W Backendless możemy korzystać nam z bardzo wielu funkcjonalności, takich jak:

  • User Management,
  • Data Persistenceter,
  • Geolocation,
  • Media Streaming,
  • Publish/Subscribe Messaging,
  • Push Notifications,
  • Custom Business Logic,
  • Analytics,
  • Mobile Code Generation.

Do połączenia z bazą danych zostało udostępnione SDK zarówno dla Androida jak i iOS-a. Nie jest to jednak jedyna metoda łączenia – możemy to również robić poprzez REST API, dzięki czemu każdy może wybrać najwygodniejszy dla siebie sposób. Poniżej opiszę podstawowe funkcjonalności, takie jak zarządzenie użytkownikami, komunikacja z bazą danych oraz własną logikę biznesową.

Zarządzanie bazą użytkowników

Backendless posiada specjalną tabelę dla użytkowników. Jest ona tworzona dla każdej nowej aplikacji automatycznie. SDK udostępnia specjalne metody oraz klasy, pozwalające w łatwy sposób zarejestrować nowych użytkowników oraz przeprowadzić proces logowania. Do naszej dyspozycji został również oddany system, który umożliwia potwierdzenie utworzenia nowego konta poprzez wysłanie do użytkownika maila z linkiem aktywacyjnym.

Rejestracja

Rejestracja użytkownika jest bardzo prosta. SDK zaopatrzone jest w klasę BackendlessUser, która posiada pola takie jak e-mail oraz password. Ponadto możemy dodać dowolne pole poprzez ustawienie property przekazując klucz i wartość. Wszystkie zapytania z użyciem SDK odbywają się poprzez wywołanie statycznych metod z odpowiednich klas. W tym przypadku jest to klasa UserService. Dla każdego zapytania wykonywanego w tle przekazujemy odpowiedni callback, który jest wywoływany przy odpowiedzi z API.

public void registerUser(String username, String email, String password) {
        BackendlessUser user = new BackendlessUser();
        user.setEmail(email);
        user.setPassword(password);
        user.setProperty("username", username);

        Backendless.UserService.register(user, new AsyncCallback<BackendlessUser>() {
            @Override
            public void handleResponse(BackendlessUser response) {
            }

            @Override
            public void handleFault(BackendlessFault fault) {
            }
        });
    }

Logowanie

Logowanie użytkowników przebiega w bardzo podobny sposób do rejestracji. Korzystamy również z klasy UserService. Do logowania potrzebny jest nam adres e-mail podany przy rejestracji oraz hasło.

public void loginUser(String username, String password, BaseDataCallback<UserProfile> callback) {
        Backendless.UserService.login(username, password, new AsyncCallback<BackendlessUser>() {
            @Override
            public void handleResponse(BackendlessUser response) {
            }

            @Override
            public void handleFault(BackendlessFault fault) {
            }
        });
    }

Komunikacja z bazą danych

Backendless pozwala nam automatycznie mapować tabele bazy danych na nasze klasy. Jeśli nasza klasa posiada inną nazwę niż tabela to musimy dodać wywołanie metody mapującej (najlepiej w klasie aplikacji). Przykładowo:

Backendless.Persistence.mapTableToClass("BackendlessProduct", Product.class);

Teraz możemy już zapisywać i odczytywać dane działając na naszych obiektach. Po raz kolejny korzystamy ze statycznych metod.

Zapisanie produktu

public void saveProduct(Product product, BaseDataCallback<Product> callback) {
        Backendless.Persistence.save(product, new AsyncCallback<Product>() {
            @Override
            public void handleResponse(Product response) {
            }

            @Override
            public void handleFault(BackendlessFault fault) {
            }
        });
    }

Pobranie listy produktów

public void getProducts(BaseDataCallback<ArrayList<Product>> callback) {

        Backendless.Persistence.of(Product.class).find(new AsyncCallback<BackendlessCollection<Product>>() {
            @Override
            public void handleResponse(BackendlessCollection<Product> response) {
            }

            @Override
            public void handleFault(BackendlessFault fault) {
            }
        });
    }

Dla wszystkich tabel w bazie, które sami utworzyliśmy korzystamy z klasy Persistence. Udostępnia nam ona potrzebne metody do zarządzania zawartością tabel, takie jak save, remove, find, loadRelations.

Logika biznesowa

Jeśli musimy wykonać jakieś dodatkowe działania na bazie danych, np. podczas zapisywania obiektów, to Backendless nam w tym doskonale pomoże. Do takich celów udostępniony został specjalny moduł, pozwalający na dopisanie kodu, który zostanie wykonany przed lub po konkretnej akcji. Wybór akcji jest dość spory, między innymi usuwanie obiektów, zapisywanie, wyszukiwanie. Kod dla logiki biznesowej możemy pisać w języku Java, PHP lub JavaScript.

Prosty przykład wygląda następująco:

@Asset( "Product" )
public class ProductTableEventHandler extends com.backendless.servercode.extension.PersistenceExtender<Product> {

  @Override
  public void beforeCreate( RunnerContext context, Product product) throws Exception {
    product.setDescription("This is cloud code generated description");
  }   
}

Wystarczy rozszerzyć klasę PersistenceExtender, a następnie nadpisać odpowiednie metody. W tym przypadku jest to metoda beforeCreate, która jak sama nazwa wskazuje jest wywoływana przed zapisaniem obiektu w bazie. Metody te możemy wykonywać synchronicznie lub asynchronicznie. Konfiguracja dla każdej klasy znajduje się w panelu deweloperskim.

Podsumowując, Backendless jest doskonałym wyborem dla osób szukających alternatywy dla Parse.com lub po prostu serwisu typu MBaaS. Jego głównymi zaletami są dostęp do bazy zarówno z użyciem SDK, jak i zapytań REST oraz możliwość pisania własnej logiki biznesowej.

Grzesiek

Grzesiek Lipski

Profesjonalnym rozwojem aplikacji na Androida zajmuje się od 9 lat. Lubi nowoczesne rozwiązania i zawsze zwraca uwagę na dobrą jakość kodu. Grzesiek chętnie testuje nowe możliwości, dlatego tworzy aplikacje również we Flutterze, a po godzinach próbuje swoich sił przy tworzeniu gier w Unity3D. Kiedy akurat nie programuje, gra w squasha albo robi fotografie dronem.

Wycena projektu

Opowiedz nam o swoim projekcie i napisz, jak możemy Ci pomóc.

Dlaczego warto rozwijać z nami projekty?

Logo Mobile Trends Awards

Mobile Trends Awards 2021

Wygrana w kategorii
ŻYCIE CODZIENNE

Nagroda Legalnych Bukmacherów

Nagroda Legalnych Bukmacherów 2019

Najlepsza aplikacja mobilna

Mobile Trends Awards logo

Mobile Trends Awards 2020

Nominacja w kategorii
SPORT I REKREACJA

20

opinii klientów

Clutch logo