Android Studio, powiadomienia push z serwera

1

Cześć,
jest w trakcie tworzenia prostej aplikacji, z centralną bazą danych na serwerze. Chciałbym dodać funkcjonalność polegającą na tym, by w momencie dodania nowego rekordu w bazie danych aplikacja została o tym powiadomiona i żeby skutkowało to powiadomieniem w telefonie. Pytam o technologię / sposób zrobienia, a nie o konkretny kod. W tej chwili po prostu nie za bardzo wiem jaki obrać kierunek.

Z góry bardzo dziękuję za pomoc.

Pozdrawiam,
thalion

0

Push Notifications in Android Platform

Najprostsze podejście to gotowa platforma w postaci Google FCM, jak napisał Hageid. Czy można coś samemu zrobić?

Albo poll albo stałe podłączenie do serwera. Jedno i drugie wymaga ciągłej, periodycznej wymiany danych. Stałe podłączenie jest jednak znacznie lepsze. Wystarczy wysyłać na serwer pakiety keep-alive i czekać na ewentualną informację o zdarzeniu, które może przyjść od serwera. Tak działa push w przeglądarce, oparte o WebSocket protocol. Nie wchodziłem już głębiej w temat, ale może da się zastosować serwer http://leaks.wanari.com/2017/08/29/using-websocket-android/ klienta tego protokołu? Wygląda na to, że są takie rozwiązania, np. (Using Websocket on Android).

0

Też naszła mnie potrzeba realizacji tego tematu. Gdyby hosting był pełny, to można zrobić na 100 sposobów. A jeżeli mamy tylko php? Zastanawiam się, czy nie można otworzyć jakiejś strony php i po prostu czekać na odpowiedź aż strzeli timeout. To by oznaczało, że nie ma żadnego eventu. Po timeoucie pytamy od nowa i tak w kółko. Jeżeli strona odpowie, to będzie to nasze powiadomienie. Rozwiązanie wydaje się korzystać z minimalnej przepustowości, czyli chyba dobre. A na serwerze nie musimy mieć php, może to być dowolny serwer www.

Jak sądzicie, będzie ok?

0

Mam gotowy szkic rozwiązania:

  1. Program w javie produkuje dane, akurat u mnie w postaci pliku tekstowego (ForecastDownloader.java). Ten proces chodzi na serwerze wg harmonogramu. Akurat na moim hostingu jest dopuszczalna Java 6, więc tak to zrealizowałem.
  2. Plik weather_event.php stanowi serwer push. Z nim łączą się klienci i czekają w ten sposób na nadejście zdarzenia. Dałem tu dwie opcje: ?last powoduje pobranie ostatniego zdarzenia, a bez tego parametru - czeka na nadejście kolejnego. Ustawione mam odświeżenia na 5 minut, więc na tyle może zawiesić się Wam przeglądarka. :)
  3. WeatherProviderIndirect.kt to klient, czyli program, który czeka na nadejście zdarzenia. Właściwie nie jest on jeszcze klientem tego systemu, bo pobiera dane z linka ?last. Ale kod oczekujący na zdarzenie będzie bardzo podobny. Odczyt zdarzenia sprowadza się do odczytania danych z urla. Tutaj po prostu mam klienta na Raspberry Pi, który nie ma problemu z kosztem połączenia sieciowego. W wersji androidowej będę chciał zrobić czekanie na zdarzenie, czyli oszczędzanie baterii.

Póki co zrobiłem tak, że nadejście zdarzenia powoduje zamknięcie połączenia i klient musi je nawiązać na nowo. W pewnych zastosowaniach to wystarczy, w sumie daje niewielki narzut ruchu sieciowego. Ale można pójść dalej i po odczytaniu zdarzenia - obsłużyć je i czekać dalej, na napływ następnych danych strumieniem sieciowym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1