Jak działa technologia powiadomień wypychanych w systemie Android?

218

Jak Google wdrożył funkcję powiadomień wypychanych? Czy działa poprzez odpytywanie wykonywane przez usługę działającą w tle lub w inny sposób?

Khawar Raza
źródło
24
Brzmi dla mnie jak prawdziwe pytanie. Zastanawiałem się nad odpowiedzią, a Google mnie tu sprowadził. Kolejne pytanie dotyczące jakości zostało ponownie zamknięte.
Tino Mclaren,
1
Też chcę to wiedzieć i planowałem napisać pytanie, ale jest już jedno, więc jest to zdecydowanie dobre pytanie.
Igor Čordaš

Odpowiedzi:

170

Z tego, co słyszałem podczas konferencji programistów Androida w Izraelu:

Po prostu gniazdo TCP czeka w trybie akceptacji na serwerze Google w chmurze. Połączenie TCP zostało zainicjowane przez aplikację Google Play. Właśnie dlatego Google Play musi być zainstalowany na urządzeniu, aby Google Cloud Messaging (GCM) (wcześniej Android Cloud to Device Messaging Service - C2DM ) działał.

Gdy to gniazdo klienta TCP odbierze jakiś komunikat, komunikat zawiera takie informacje, jak nazwa pakietu aplikacji, do której powinien być adresowany, i oczywiście same dane. Dane te są analizowane i pakowane w celu, który jest nadawany i ostatecznie odbierany przez aplikację.

Gniazdo TCP pozostaje otwarte, nawet gdy stan radia urządzenia zmieni się w tryb „bezczynności”. Aplikacje nie muszą być uruchomione, aby otrzymać zamiary.

Więcej informacji na stronie http://developer.android.com/google/gcm/gcm.html

Tal Kanel
źródło
1
Ale myślę, że działa również na emulatorze. Przyszło mi do głowy, że urządzenie aktualizuje serwer o bieżącą ścieżkę (IP). Kiedy serwer Google musi wysłać powiadomienie, pobiera swoją bieżącą ścieżkę i przesyła wiadomość do tej ścieżki. Czy mam rację do pewnego stopnia?
Khawar Raza
2
@ Khawar Raza: kiedy adres IP urządzenia zmienił się z jakiegoś powodu, urządzenie rozłącza się z serwerem. kiedy to się dzieje - zamiast tego nowe połączenie rozpoznaje, na podstawie nowego adresu IP urządzenia.
Tal Kanel,
1
@ Khawar Raza: emulator działa nawet bez Google Play.
Wydaje
2
Widzę. To byłoby naprawdę interesujące, zastanawiam się, czy to prawda.
you786
2
Nadal więc odpytuje, ale dobrą stroną jest to, że odpytywanie jest scentralizowane przez Google Play.
Accollativo
143

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 Google Cloud Messaging (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.

Wziął to z: Źródło Zobacz także tutaj .

Aniket Thakur
źródło
1
Tylko komentarz na temat połączenia GCM. To pojedyncze połączenie jest pollingiem.
wmac
1
Najważniejsze było dla mnie to, że serwer strony trzeciej, np. Serwer poczty elektronicznej, naprawdę wysyła powiadomienie do serwerów Google GCM. Jest to usługa świadczona przez Google bezpłatnie i każda taka osoba trzecia musi wdrożyć kanał komunikacji z serwerami Google przy użyciu ich protokołu GCN. Nawiasem mówiąc, protokół jest właściwie tylko odpowiedzią HTTP sformatowaną w JSON. Szczegółowe informacje można znaleźć na stronie developers.google.com/cloud-messaging .
Kyselejsyreček
10

Możesz wdrożyć powiadomienie push na Androidzie z długim połączeniem tcp z odpytywaniem. Ale to wymagałoby utrzymania dodatkowego gniazda => rozładowania baterii. Lub możesz otworzyć połączenie w regularnych odstępach czasu za pomocą Menedżera alarmów.

Google prawdopodobnie otwiera jedno gniazdo dla wszystkich powiadomień push C2DM, stąd jego bardziej wydajna bateria.

Shreesh
źródło
więc potwierdzono, że klient odpytuje podczas połączenia TCP, prawda? wiesz jak często sonduje dane? czy to na przykład co 5 sekund. czy jest szybki jak bicie serca?
j2emanue
3

Z dniem 10 kwietnia 2018 r. Google wycofało GCM. Interfejsy API serwera i klienta GCM są przestarzałe i zostaną usunięte już 11 kwietnia 2019 r. Migruj aplikacje GCM do Firebase Cloud Messaging (FCM), która dziedziczy niezawodną i skalowalną infrastrukturę GCM oraz wiele nowych funkcji.

https://firebase.google.com/docs/cloud-messaging/

użytkownik1767754
źródło
1

Tak, masz rację. Google miał usługę (usługa GTalk) i ta usługa w niektórych okresach zwróciła się do serwerów Google.

Jurij
źródło
Nie wiem. Właśnie przeczytałem, jak działa C2DM. Teraz coś może się zmienić.
Yury,
-3

Na urządzeniach z Androidem po otrzymaniu powiadomień push obraz aplikacji nadawcy i komunikat pojawiają się na pasku stanu. Dokładnie, gdy klient stuknie powiadomienie, ląduje w aplikacji.

Robert Manus
źródło
to długo działające połączenie TCP w tle, nie zostało to wyjaśnione w odpowiedzi, proszę trzymać się tego, o co pyta pytanie :)
Nishchal Gautam