2012-07-16 12 views
156

W jaki sposób Google wdrożyło funkcję powiadamiania push? Czy działa poprzez odpytywanie wykonane przez usługę działającą w tle lub w inny sposób?Jak działa technologia powiadomień push na Androida?

+13

Brzmi jak prawdziwe pytanie do mnie. Zastanawiałem się nad odpowiedzią na to pytanie, a Google sprowadziło mnie tutaj. Kolejne pytanie jakościowe zostało zamknięte. –

+1

Też chcę to wiedzieć i planowałem napisać pytanie, ale jest już to, więc jest to zdecydowanie dobre pytanie. – PSIXO

Odpowiedz

126

Z tego co słyszałem podczas Android Developers Conference w Izraelu

Jest po prostu gniazdo TCP czeka w accept mode na serwer 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 umożliwić pracę Google Cloud Messaging (GCM) (dawniej Android Cloud to Device Messaging Service - C2DM).

Gdy to gniazdo klienta TCP otrzymuje pewną wiadomość, wiadomość zawiera informacje, takie jak nazwa pakietu aplikacji, do której ma adresować, i oczywiście same dane. Te dane są analizowane i pakowane do postaci intent, która jest nadawana i ostatecznie odbierana przez aplikację.

Gniazdo TCP pozostaje otwarte nawet wtedy, gdy stan radiowy urządzenia zmienia się w tryb "bezczynności". Aplikacje nie muszą być uruchomione, aby otrzymać intencje.

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

+1

Ale myślę, że działa również na emulatorze. To, co przychodzi mi do głowy, to to, że urządzenie aktualizuje serwer swoją bieżącą ścieżką (IP). Gdy serwer google musi wysłać powiadomienie, pobiera bieżącą ścieżkę i przekazuje wiadomość do tej ścieżki. Czy mam w pewnym stopniu rację? –

+2

@Khawar Raza: gdy adres IP urządzenia zmieni się z jakiegoś powodu, urządzenie rozłączy się z serwerem. kiedy to się dzieje - zamiast tego nowe połączenie działa w oparciu o nowy adres IP urządzenia. –

+1

@Khawar Raza: emulator działa nawet bez Google Play. Domyślam się, że to gniazdo zostało wbudowane wewnętrznie, zamiast google play –

0

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

+0

Czy usługa gtalkservice nadal istnieje i działa? –

+0

Nie wiem. Właśnie przeczytałem, jak działa C2DM. Teraz coś może się zmienić. – Yury

7

można wdrożyć powiadomienia push na Androidzie się z połączenia TCP długo wyborczym. Ale to wymagałoby utrzymania dodatkowego gniazda => wyczerpania baterii. Możesz również otworzyć połączenie w regularnych odstępach czasu za pomocą Menedżera alarmów.

Google prawdopodobnie otworzy jedno gniazdo dla wszystkich powiadomień push C2DM, stąd jego większa wydajność.

120

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

Pierwszym krokiem w GCM jest wysłanie przez serwer zewnętrzny (taki jak serwer poczty e-mail) żądania do serwera Google GCM. Serwer ten następnie wysyła wiadomość do twojego urządzenia, przez to otwarte połączenie. System Android sprawdza komunikat, aby określić, dla której aplikacji jest uruchamiany i uruchamia tę aplikację. Aplikacja musi zarejestrować się w systemie Android, aby korzystać z GCM, i musi mieć odpowiednie uprawnienia. Po uruchomieniu aplikacji może natychmiast 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 w celu sprawdzenia nowych danych, oszczędzając zarówno moc, 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 działać, a nie każda aplikacja musi pozostać uruchomiona w tle, aby zachować własną sieć połączenie z własnym serwerem.

Służy do tego od: Source Zobacz także here.

+1

Tylko komentarz o połączeniu GCM. To pojedyncze połączenie jest połączeniem odpytywania. – wmac

+1

Najważniejsze dla mnie było to, że serwer innej firmy, np. serwer e-mail naprawdę wysyła wiadomość z powiadomieniem na serwery Google GCM. Jest to usługa świadczona przez Google bezpłatnie, a każda taka strona trzecia musi wdrożyć kanał komunikacyjny 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. Zobacz https://developers.google.com/cloud-messaging/, aby uzyskać szczegółowe informacje. –

Powiązane problemy