Jak działają powiadomienia push?

25

Zastanawiam się, jak działa system powiadomień push?

Czy istnieje aktywne połączenie TCP / IP działające w tle z serwerami Google?

opc0de
źródło
1
Patrz Wikipedia - co prawda jest trochę trudne do odczytania. Zasadniczo i mówiąc prosto: klient łączy się z serwerem i prosi o informację - a następnie odpowiedź jest „opóźniona”, gdy informacje są dostępne (lub nigdy, jeśli ich nie ma), po czym następuje nowa prośba. Więc tak, wymaga to stałego połączenia TCP / IP w tle, skubiącego akumulator.
Izzy
@ Izyzy to nie może mieć racji, ponieważ (1) dokumenty mówią, że Intencja jest tworzona, gdy wiadomość dotrze, i (2) co działające na Androidzie może utrzymać otwarte połączenie, którego Android nigdy nie może zabić?
Michael
@Michael Które dokumenty? Nie jestem programistą Androida, aby zrozumieć jego głębię (i to nie jest tablica dyskusyjna), więc prawdopodobnie nie mogę się tutaj z tobą kłócić. Słyszałem, że słuchaczy (dla transmisji) można ustanowić dynamicznie - ale nigdy nie słyszałem o intencjach (IMHO muszą być zadeklarowani w Manifest). Mogę sobie wyobrazić usługę Google wykonującą „prawdziwą robotę”, a aplikacja po prostu rejestruje „odbiorcę”. Powyższy opis był bardziej „ogólny”, a nie specyficzny dla Androida, i starałem się to uprościć;)
Izzy

Odpowiedzi:

25

Tak, Android utrzymuje jedno aktywne połączenie z serwerami Google, ale nie zużywa dużo energii ani danych, ponieważ nie jest przesyłany żaden ruch, dopóki coś nie wyśle ​​wiadomości GCM do aplikacji w telefonie. Telefon ma tylko jedno połączenie, z którego korzystają wszystkie aplikacje: zainstalowanie nowej aplikacji korzystającej z GCM nie powoduje dodatkowego obciążenia.

Pierwszym krokiem w GCM jest to, że serwer innej firmy (taki jak serwer e-mail) wysyła żądanie do serwera GCM Google. Ten serwer wysyła następnie wiadomość do twojego urządzenia poprzez to otwarte połączenie. System Android sprawdza komunikat w celu ustalenia, dla której aplikacji jest przeznaczony, i uruchamia tę aplikację. Aby korzystać z GCM, aplikacja musi się zarejestrować w Androidzie i musi mieć odpowiednie uprawnienia. Po uruchomieniu aplikacji może od razu utworzyć powiadomienie z danymi z wiadomości. Wiadomości GCM mają bardzo ograniczony rozmiar, więc aplikacja może zamiast tego otworzyć normalne połączenie z serwerem innej firmy, aby uzyskać więcej informacji (na przykład pobierając nagłówki nowych wiadomości e-mail).

Zaletą korzystania z powiadomień push jest to, że aplikacje nie muszą być uruchamiane w regularnych odstępach czasu, aby sprawdzać nowe dane, oszczędzając zarówno energię, jak i dane. Zaletą posiadania scentralizowanego mechanizmu, takiego jak GCM, jest to, że urządzenie potrzebuje tylko jednego otwartego połączenia sieciowego, a system Android GCM jest jedyną rzeczą, która musi nadal działać, a nie każda aplikacja musi pozostać uruchomiona w tle, aby utrzymać własną sieć połączenie z własnym serwerem.

Dan Hulme
źródło
Dodałbym tylko 1 komentarz: wiadomości GCM mogą mieć rozmiar 4KByte, więc nie są one tak ograniczone. developer.android.com/google/gcm/gcm.html
Moszi
Co utrzymuje to połączenie otwarte? Wszelkie działania lub usługi związane z Androidem mogą zostać zabite w dowolnym momencie.
Michael
1
Dzięki za informację. Zgodnie z moim pytaniem : Czy wiesz, jaki jest adres URL otwartego gniazda? (URL połączenia z urządzenia do serwerów GCM, które jest otwarte i używane do przesyłania danych powiadomień)
Sabeti
6

System operacyjny Android korzysta teraz z GCM (Google Cloud Messaging) dla powiadomień push WS. Możesz uzyskać lepszy pomysł tutaj ; da ci przegląd architektury o usłudze powiadamiania w trybie push z jej cyklem życia.

Mam nadzieję, że to pomoże.

Bhavesz
źródło
Czy istnieje sposób na zrobienie podobnej rzeczy bez konieczności polegania na serwerach Google?
Michael
@Michael Korzystasz z usług Amazon Cloud? Wydaje się, że mają porównywalną koncepcję. Ale jeśli chodzi o „jak to zrobić”, to niewłaściwe miejsce;)
Izzy
1

Późna odpowiedź na stare pytanie, ale warto je zadać.

GCM został wycofany w kwietniu 2018 r., A Google zalecił użycie FCM, który jest podobny do GCM.

  1. nie musimy pisać własnej logiki ponownej rejestracji lub subskrypcji
  2. Możesz korzystać z Firebase Notifications, rozwiązania do obsługi powiadomień bez serwera z konsolą internetową, która pozwala każdemu wysyłać powiadomienia do określonych odbiorców na podstawie informacji Firebase Analytics.
  3. Ma podstawową infrastrukturę GCM.
  4. Pojedyncza wiadomość może przenieść ładunek do 4KB do aplikacji klienckiej.
Ajay Deepak
źródło
1
Z perspektywy aplikacji FCM nie jest podobny do GCM, jest identyczny. FCM to tylko nowa nazwa GCM.
Robert