Smartfon z ekranem pokazującym czas 9:45, datę piątek, 25 czerwca, a także powiadomienie od "Your Favorite Brand" o wydarzeniu letnim ze zniżką 40%. Na górze ekranu widoczne ikony zasięgu, operatora AT&T oraz wskaźnik naładowanej baterii na 100%.

Jak działają i czym są powiadomienia push w Androidzie?

Paweł DedioDominika Kobiałka
2 autorów
7 minut czytania
Komentarze

Powiadomienia push stały się nieodzownym elementem naszego codziennego życia. Są one wszechobecne, choć my często nie zastanawiamy się nad sposobem, w jaki funkcjonują. W niniejszym artykule postaramy się przybliżyć wam, czym dokładnie są te elementy, jakie są ich rodzaje oraz jak działają w systemie Android.

Czym są powiadomienia push?

Powiadomienia push. Smartfon i smartwatch wyświetlające powiadomienie z aplikacji Hangouts od użytkownika David Park z wiadomością "Quick lunch at 12:30?".
Fot. Google / materiały prasowe

W dzisiejszych czasach powiadomienia push to w zasadzie każdy alert, który możesz zobaczyć na swoim telefonie lub innym urządzeniu. Jednak jeśli chcemy być dokładni, w systemie Android możemy podzielić je na dwa rodzaje – komunikaty utworzone przez aplikację oraz te przysłane przez zewnętrzny serwer. To właśnie ten drugi typ ma nazwę „powiadomienia push”.

W jaki sposób aplikacja wyświetla powiadomienia push?

Alerty są wyświetlane nie tylko przez programy, które korzystają z dostępu do internetu. Jako przykład mogę tutaj podać aplikację budzika, z której korzystam. Co niedzielę wyświetla ona komunikat z przypomnieniem o nastawieniu zegara na odpowiednią godzinę w poniedziałek. Więcej o samodzielnej konfiguracji można przeczytać na stronie pomocy Google.

Jak to działa od strony technicznej? Jeśli aplikacja wykryje w niedzielę, że nie ustawiłem żadnego budzika na poniedziałek, wysyła do systemu żądanie o wyświetlenie notyfikacji wraz z odpowiednimi parametrami (tytuł, tekst, obrazek itd.) Do takiego działania nie potrzebujemy żadnej ingerencji zewnętrznego serwera. Technicznie rzecz biorąc, nie są to powiadomienia push. Programista może bowiem w dowolnym miejscu zadecydować o wyświetleniu takiego alertu lub nie.

Powiadomienia push – jakie jest ich przeznaczenie?

Powiadomienia push. Męska ręka trzymająca smartfon z ekranem wyświetlającym graficzne elementy użytkowe, na biurku z notatnikiem, mikrofonem i elementami dekoracyjnymi.
Fot. Emmanuel Jason Eliphalet / Pexels

Powiadomienia push są przykładem jednostronnej komunikacji serwera z naszą aplikacją. Wyobraźmy sobie taki przykład – chcemy wyświetlić użytkownikowi informację, że otrzymał właśnie wiadomość w naszej aplikacji. Da się to zrobić na dwa sposoby. Możemy w określonych przedziałach czasowych łączyć się z naszym serwerem i pobierać informację o nieodczytanych wiadomościach. W sytuacji, gdy takie istnieją, wyświetlimy odpowiedni komunikat. Łatwo się domyślić, że nie jest to zbyt dobre rozwiązanie. Przede wszystkim dlatego, że takie regularne łączenie się z serwerem będzie powodować zużycie akumulatora i pakietu internetowego.

Drugim rozwiązaniem jest wysłanie alertu (w postaci powiadomienia push) bezpośrednio z naszego serwera w momencie otrzymania wiadomości przez konkretnego użytkownika. Pozwala to wyeliminować marnowanie energii i pakietu internetowego. Dlatego też ten typ komunikatu jest powszechnie stosowany.

Powiadomienia push z perspektywy programisty

Dwa smartfony wyświetlające ekran powiadomień z różnymi wiadomościami i powiadomieniami z aplikacji.
Fot. Apple / materiały prasowe

Najpierw urządzenie musi być zarejestrowane do otrzymywania powiadomień push. W systemach iOS Android i innych, aplikacja musi poprosić użytkownika o zgodę na otrzymywanie komunikatów, a następnie zarejestrować się w odpowiedniej usłudze (np. Apple Push Notification Service dla iOS, Firebase Cloud Messaging dla Android).

Po otrzymaniu unikalnego tokenu identyfikującego urządzenie, aplikacja wysyła go do swojego serwera. Serwer zapisuje token, a gdy potrzebuje wysłać alert, tworzy wiadomość z treścią i ewentualnymi dodatkami jak dźwięk czy ikona. Następnie, korzystając z odpowiedniego serwisu powiadomień, wysyła powiadomienie do telefonu czy zegarka.

Gdy notyfikacja dotrze do urządzenia, system operacyjny zajmuje się jego wyświetleniem. Aplikacja może zdefiniować, jak powiadomienie ma być prezentowane i czy powinno ono uruchamiać jakąś akcję w aplikacji (np. otwarcie konkretnej strony).

Ręczna obsługa powiadomień w systemie Android – czy to trudne?

Google uprościło ten proces najbardziej, jak się dało. Wystarczy, że rozszerzymy odpowiednią klasę udostępnioną przez Google i zaimplementujemy metodę odpowiadającą za odebranie powiadomienia. Późniejsze kroki wyglądają tak samo, jakbyśmy pokazywali zwykłą notyfikację offline (taką jak w przytoczonym przykładzie z budzikiem).

Największą przeszkodą jest przejście przez dokumentację Google i odpowiednie skonfigurowanie naszej aplikacji – dodanie odpowiednich kluczy licencyjnych, bibliotek itd. Niestety większość plików dotyczących usług dodatkowych Google jest napisana nieprzystępnym językiem i trzeba szukać pomocy na innych serwisach.

W jaki sposób serwer rozpoznaje konkretne urządzenie?

Osoba siedzi na ławce i trzyma smartfona w rękach; widoczne są ręce, część kurtki w kratę, jeansy.
Fot. Charlotte May / Pexels

W odpowiedzi na to pytanie, na wstępie opiszę proces wysyłania powiadomień z punktu widzenia serwera. Komunikacja między naszym serwerem a telefonami odbywa się poprzez serwery Google. Początkowo, zarówno nasz serwer, jak i aplikacja muszą uzyskać od Google klucz licencyjny, który umożliwia identyfikację naszej aplikacji. Gdy nasz serwer zamierza wysłać powiadomienie, nawiązuje połączenie z serwerem Google, przekazując wspomniany klucz. Dzięki temu Google wie, do której aplikacji powinno zostać skierowane powiadomienie.

Dodatkowo, aby nasza aplikacja mogła odbierać powiadomienia, konieczne jest zalogowanie użytkownika do systemu push, co również wymaga przekazania klucza licencyjnego do serwerów Google. W odpowiedzi otrzymujemy unikalny klucz urządzenia identyfikujący urządzenie. Następnie musi być on przesłany do naszego serwera. Proces ten może wydawać się skomplikowany, dlatego przedstawiam go w postaci uporządkowanych etapów:

  1. Użytkownik loguje się w naszej aplikacji.
  2. Otwieramy ekran powitalny i jednocześnie logujemy użytkownika (dodając do zapytania klucz licencyjny) do usługi Google odpowiedzialnej za powiadomienia.
  3.  Wysyłamy otrzymany od Google klucz identyfikujący urządzenie do naszego serwera wraz z danymi aktualnie zalogowanego użytkownika.
  4. Serwer przypisuje klucz urządzenia do danego użytkownika
  5. Użytkownik dostaje wiadomość.
  6. Serwer wysyła żądanie wysłania powiadomienia wraz z kluczem licencyjnym, kluczem urządzenia i odpowiednią wiadomością.
  7. Google sprawdza, czy klucz urządzenia i klucz licencyjny są poprawne i wysyła powiadomienie na urządzenie.
  8. Obsługujemy powiadomienie w naszej aplikacji.

Dlaczego powiadomienia push się nie dublują?

Pewnie nieraz zauważyłeś, że w chwili, gdy odczytasz e-maila na komputerze, znika odpowiednie powiadomienie wyświetlone na wszystkich Twoich urządzeniach. Jeśli zastanawiałeś się, jak to się dzieje – już śpieszę z wyjaśnieniem. Z perspektywy serwera nie ma standardu wykonania takiego działania, więc musimy zrobić to ręcznie.

W momencie, gdy serwer wykryje odczytanie jakiejś wiadomości przez użytkownika, wysyła nowe powiadomienia push z odpowiednimi danymi do wszystkich urządzeń dodanych przez użytkownika. Aplikacja rozpoznaje, że jest to specjalna notyfikacja, która oznacza odczytanie wiadomości. Zamiast wyświetlać nowy alert, program komunikuje się z systemem Android i usuwa komunikat odpowiedzialny za odczytanie.

Smartfon leżący na szarym blacie, z ekranem pokazującym główny ekran z aplikacjami i godziną 14:05 na wyświetlaczu.
Fot. Jolanta Szczepaniak / Android.com.pl

Jest jeszcze jedna opcja, nieco prostsza. Google udostępnia taką usługę jak grupowanie urządzeń. Dzięki temu możemy przypisać do 20 sprzętów do jednego użytkownika i zamiast ręcznie wysyłać powiadomienia do telefonu, smartwatcha itd., robimy to zbiorowo. Google zadba o to, że notyfikacje będą widoczne na wszystkich gadżetach i w przypadku odczytania go na jednym z urządzeń, zniknie ono również z pozostałych.

Zapraszamy również na największe w Polsce forum dla programistów Android.

Czym są powiadomienia push?

Powiadomienia push to krótkie wiadomości wysyłane z aplikacji internetowej lub mobilnej do urządzenia użytkownika. Są to komunikaty pochodzące z zewnętrznego serwera, informujące o nowościach lub ważnych zdarzeniach w aplikacjach.

Jak aplikacja wyświetla powiadomienia push?

Aplikacje mogą wyświetlać powiadomienia automatycznie, na podstawie zdarzeń w aplikacji lub danych z serwera, bez potrzeby ciągłego połączenia z internetem.

Po co są powiadomienia push?

Służą one do informowania użytkownika o ważnych wydarzeniach lub nowościach, bez konieczności ręcznego sprawdzania tego przez użytkownika w każdej aplikacji.

W jaki sposób serwer rozpoznaje konkretne urządzenie, aby wysłać powiadomienia push?

Serwer wykorzystuje unikalny klucz urządzenia (token), przekazywany przez aplikację po zalogowaniu się użytkownika do systemu powiadomień.

Poprzednie odcinki:

  1. Typowy dzień pracy programisty
  2. Wady pracy programisty
  3. Zalety pracy programisty
  4. [FAQ] Wszystko, co powinieneś wiedzieć jeśli interesuje Cię praca programisty
  5. Co mnie zdziwiło w programowaniu?
  6. Motywacja – w jaki sposób nie stracić zapału do programowania?
  7. Jaką firmę wybrać na początku kariery programisty?
  8. Jak wygląda rozmowa o pracę na stanowisko programisty?
  9. Jak zacząć programować?
  10. Skąd czerpać wiedzę o programowaniu?
  11. Początki programowania – jaką technologię wybrać?
  12. Cykl życia aplikacji na Androida – co to takiego?
  13. Jak tworzymy interfejs użytkownika w aplikacjach na Androida?
  14. Jak system Android oszczędza energię?

Źródło: oprac. własne. Zdjęcie otwierające: Google / materiały prasowe

Motyw