Як працює технологія push-сповіщення на Android?


218

Як Google реалізував їх функцію push-сповіщення? Чи працює це шляхом опитування, яке виконується службою, що працює у фоновому режимі чи по-іншому?


24
Мені це звучить як справжнє запитання. Мені було цікаво відповісти на це, і Google привів мене сюди. Знову ще одне питання щодо якості закрите.
Тіно Макларен

1
Я також хочу це знати і планував написати запитання, але це вже є, тому це, безумовно, гарне питання.
Ігор Чордаш

Відповіді:


170

З того, що я чув на конференції розробників Android в Ізраїлі:

Існує просто розетка TCP, що очікує в режимі прийняття на хмарному сервері Google. З'єднання TCP було ініційовано програмою Google Play. Ось чому Google Play повинен бути встановлений на пристрої, щоб зробити Google Cloud Messaging (GCM) (раніше Android Cloud to Device Service Messaging Service - C2DM ).

Коли цей клієнтський сокет TCP отримує якесь повідомлення, повідомлення містить інформацію, таку як назва пакету програми, до якої слід звертатися, і звичайно - самі дані. Ці дані аналізуються та упаковуються в наміри, які транслюються і в кінцевому підсумку отримуються додатком.

Розетка TCP залишається відкритою навіть тоді, коли стан радіо пристрою переходить у режим «непрацюючого». Щоб отримати наміри, програми не повинні працювати.

Більше інформації на http://developer.android.com/google/gcm/gcm.html


1
Але я думаю, що він працює і на емуляторі. Що мені спадає на думку, це те, що пристрій постійно оновлює сервер з його поточним шляхом (IP). Коли сервер google повинен надсилати сповіщення, він бере свій поточний шлях і передає повідомлення на цей шлях. Я прав певний?
Хавар Раза

2
@Khawar Raza: коли IP-пристрій з певних причин змінився, пристрій відключається від сервера. коли це відбувається - замість нового з'єднання astemblish на основі пристрою новий IP.
Тал Канель

1
@Khawar Raza: емулятор працює навіть без google play. Я здогадуюсь, що він ініціює цей сокет, вбудований всередину, замість google play
Tal Kanel

2
Я бачу. Це було б дуже цікаво насправді, мені цікаво, чи це правда.
you786

2
Тож це все ще опитування, але хороша сторона полягає в тому, що голосування проводиться централізовано Google Play.
Accollativo

143

Android зберігає одне активне з'єднання з серверами Google, але він не використовує багато енергії або даних, оскільки по ньому не надсилається трафік, поки щось не надішле повідомлення Google Cloud Messaging (GCM) в додаток на вашому телефоні. На телефоні є лише одне з'єднання, яке використовується всіма програмами: установка нового додатка, який використовує GCM, не додає додаткового навантаження.

Першим кроком у GCM є те, що сторонній сервер (наприклад, сервер електронної пошти) надсилає запит на сервер GCM Google. Потім цей сервер надсилає повідомлення на ваш пристрій через відкрите з'єднання. Система Android розглядає повідомлення, щоб визначити, для чого це додаток, і запускає цю програму. Додаток повинен зареєструватися на Android для використання GCM, і він повинен мати відповідний дозвіл. Коли програма запуститься, вона може створити сповіщення одразу з даними повідомлення. Повідомлення GCM мають дуже обмежений розмір, тому програма може замість цього відкрити звичайне з'єднання із стороннім сервером для отримання додаткової інформації (наприклад, завантаження заголовків нових електронних листів).

Перевага використання push-сповіщень полягає в тому, що додатки не повинні запускатися через регулярні проміжки часу, щоб перевіряти наявність нових даних, економлячи і живлення, і дані. Перевагою централізованого механізму, такого як GCM, є те, що пристрою потрібне лише одне відкрите мережеве з'єднання, а система Android GCM - єдине, що потрібно продовжувати працювати, а не кожен додаток повинен працювати у фоновому режимі, щоб зберегти власну мережу підключення до власного сервера.

Взяв це з: Джерело Також дивіться тут .


1
Просто коментар про з'єднання GCM. Це єдине з'єднання - це опитування.
wmac

1
Для мене важливою частиною було те, що сторонній сервер, наприклад сервер електронної пошти, дійсно надсилає повідомлення-повідомлення на сервери Google GCM. Це послуга, яку Google надає безкоштовно, і будь-яка така сторона повинна впроваджувати канал зв'язку із серверами Google, використовуючи свій протокол GCN. До речі, протокол - це просто відповідь HTTP у форматі JSON. Детальну інформацію див. У розділі developers.google.com/cloud-messaging .
Kyselejsyreček

10

Ви можете реалізувати push-сповіщення на android самостійно за допомогою тривалого підключення tcp для опитування. Але це передбачає підтримання додаткового розетки => розряджання акумулятора. Або ви можете відкривати з'єднання через рівні проміжки часу за допомогою диспетчера сигналів.

Google, ймовірно, відкриває один розетку для всіх натискань на C2DM, отже, його ефективніше акумулятор.


тож його підтверджено, що клієнт опитується уздовж з'єднання tcp? чи знаєте ви, як часто це опитування даних? наприклад, це кожні 5 секунд чи це швидко, як серцебиття?
j2emanue

3

Станом на 10 квітня 2018 року Google припинив GCM. API сервера і клієнтські API застаріли і будуть видалені, як тільки 11 квітня 2019 року. Перемістіть додатки GCM до Firebase Cloud Messaging (FCM), який успадковує надійну та масштабовану інфраструктуру GCM, а також багато нових функцій.

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


1

Так, ви праві. У Google була послуга (GTalk Service), і ця послуга запитувала сервери Google у певні періоди часу.


Я не знаю. Я щойно прочитав, як працює C2DM. Тепер щось може змінитися.
Юрій

-3

На пристроях Android, коли ви отримуєте push-сповіщення, на панелі стану відображаються зображення програми та повідомлення відправника. Коли клієнт натискає повідомлення, він / вона потрапляє на додаток.


це тривале з'єднання TCP на задньому плані, це не пояснено у відповіді, будь ласка, дотримуйтесь того, що запитує питання :)
Nishchal Gautam
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.