Чи підтримує Android майже в реальному часі сповіщення?


343

Нещодавно я дізнався про здатність додатків iPhone отримувати майже миттєві сповіщення про сповіщення додатків для додатків .

Це надається у формі push-сповіщень, замовним протоколом, який постійно підтримує з'єднання даних з iPhone та надсилає бінарні пакети на додаток, який надзвичайно швидко вискакує сповіщення , від 0,5 до 5 секунд від серверного додатка, надісланого в телефонний додаток час реакції. Це надсилається як дані - а не як SMS - у дуже маленьких пакетах, що стягуються як частина плану даних, а не як вхідні повідомлення.

Мені хотілося б знати, чи існує Android, чи є подібний інструмент, чи можливо реалізувати щось близьке до цього за допомогою Android API. Для уточнення я визначаю подібне як:

  • Не SMS-повідомлення, а якесь рішення, кероване даними
  • Наскільки це можливо в реальному часі
  • Є масштабованим, тобто, як частина сервера мобільного додатку, я можу повідомити про тисячі прикладних програм за секунди

Я оцінюю, що додаток може базуватися на стилі запиту / відповіді HTTP, але в ідеалі я не хочу, щоб це опитувалося дуже просто для перевірки на повідомлення; крім цього це як крапельне зливання плану даних.


3
Повідомлення для gmail та gchat зазвичай знаходиться в межах цієї межі. Має бути спосіб повторити це у власному додатку.
Дана Здорова

Так, є андроїд-бібліотека, яка робить повідомлення обміну даними дуже просто ... просто включіть у свою програму бібліотеку сповіщень про Droid Jigy, і звідти це приблизно 10 рядків коду ... сподіваюся, це допомагає :)
Corey Harden

Ознайомтеся з Pushy ( pushy.me ) щодо шлюзу сповіщень у реальному часі, який використовує MQTT під кришкою для підвищення надійності. Повне розкриття інформації - я заснував Pushy.
Elad Nava

Відповіді:


215

Поширені запитання щодо хмарних повідомлень Firebase FCM - це нова версія GCM. Він успадковує основну інфраструктуру GCM для надійної доставки повідомлень на Android, iOS та Chrome. Однак вони продовжуватимуть підтримувати GCM, тому що багато розробників сьогодні використовують SDK GCM для обробки сповіщень, а для оновлення клієнтських додатків потрібен час.

Станом на 26 червня 2012 року Google Cloud Messaging є кращим способом надсилання повідомлень до програм, що працюють на пристроях.

Раніше (і тепер застаріло) послугу називали Cloud To Device Messaging .


14
Google надає детальну документацію для впровадження цього додатка для Android на Java за адресою code.google.com/android/c2dm, однак їх зразкового коду для спілкування з серверним аспектом C2DM бракує. Я написав підручник з цього аспекту тут: blog.boxedice.com/2010/10/07/…
DavidM

2
Чи є спосіб пропонувати push-сповіщення користувачам з Android 2.2, але зробити те саме додаток запущеним на старих дистрибутивах, лише без push-сповіщень?
OneWorld

3
@OneWorld: так, так само як і будь-який інший Android техніки зворотної сумісності, використання відображення , щоб вибрати альтернативну стратегію , коли C2DM недоступний, докладніше див: developer.android.com/resources/articles / ...
Лі Райан

1
developer.android.com/videos/index.html#v=PLM4LajwDVc Google I / O 2010 Презентація про Push-сповіщення
vokilam

6
C2DM офіційно застаріла з 26 червня 2012 року, використовуйте [Google Cloud Messaging для Android] ( замість developer.android.com/guide/google/gcm/index.html
Mithun Sreedharan

47

XMPP - хороше рішення. Я використовував це для додатків Android у реальному часі, у реальному часі. XMPP є потужним, дуже розширюваним та легким для інтеграції та використання.

Існує безліч безкоштовних серверів XMPP (хоча з ввічливості ви не повинні їх зловживати), і є сервери з відкритим кодом, які можна запустити на одному з ваших власних вікон. OpenFire - відмінний вибір.

Бібліотека, яку ви хочете, не є Smack, як зазначено вище, це aSmack . Але зауважте, це середовище побудови - вам доведеться будувати бібліотеку.

Це підрахунок, який я зробив на вплив батареї рішення XMPP:

Клієнт Android повинен підтримувати стійке TCP-з'єднання, періодично прокидаючись, щоб надсилати серцебиття на сервер XMPP.
Це явно накладає витрати з точки зору енергоспоживання. Оцінка цієї вартості надається нижче:

  • Використання акумулятора 1400mAh (поставляється в Nexus One та HTC Desire)
  • Непрацюючий пристрій, підключений до мережі 3G, використовує приблизно 5mA
  • Цикл неспання, серцебиття, сну відбувається кожні 5 хвилин, триває три секунди і використовує 300mA
  • Отже, витрата акумулятора на годину становить:
    • 36 секунд 300mA = 3mAh відправлення серцебиття
    • 3600 секунд 5mA = 5mAh на холостому ходу
    • 4:95 + 3 = 7: 95mAh разом
  • Акумулятор потужністю 1400 мАг працює приблизно 11,6 дня в режимі очікування та 7,3 дня під час роботи програми, що становить приблизно 37% скорочення часу автономної роботи.
  • Однак скорочення часу автономної роботи на 37% - це абсолютно гірший випадок на практиці, враховуючи, що пристрої рідко повністю не працюють.

2
Однак у режимі прослуховування телефон триватиме 3 години, коли додатки роблять це, оскільки сотні намірів виконуються, коли телефон прокидається або вмикається дисплей або змінюється стан мережі.
Монсьєр

33

Нещодавно я почав грати з MQTT http://mqtt.org для Android як спосіб робити те, що ви просите (тобто не SMS, а керовані даними, майже негайне надсилання повідомлень, масштабованість, не опитування тощо).

У мене є повідомлення в блозі з довідковою інформацією про це, якщо це корисно http://dalelane.co.uk/blog/?p=938

(Примітка. MQTT - це технологія IBM, і я повинен зазначити, що я працюю для IBM.)


Як це робить mqtt? Повинно десь брати участь в опитуванні? Навіть яблуко має опитуватись, але я думаю, що вони роблять лише одне підключення за один раз, тому не сильно розряджаючи батарею ...
Janusz

3
Це роблять, відкриваючи TCP / IP-з'єднання і залишаючи його відкритим. Він не опитується, хоча йому доводиться періодично надсилати невелике повідомлення з підключення, щоб зберегти його живим.
dalelane

MQTT - це безперечно шлях, якщо надсилання вашого push-повідомлення через Google робить вас незручним. Крім того, у нас є угоди про нерозголошення з нашими клієнтами, які забороняють використовувати хмарні сервіси для обміну даними.
VH-NZZ



8

Якщо ви можете залежати від того, щоб бібліотеки Google були для вас на цільовому ринку, то, можливо, захочете повернути функцію GTalk (зареєструвати ресурс у наявному імені користувача - перехоплюючи його повідомленнями, коли вони надходять із BroadcastReceiver).

Якщо ні, то, я думаю, ви не зможете , тоді ви вкладаєте власні версії XMPP . Це біль, але може бути полегшено, якщо XMPP постачається окремо як окрема бібліотека.

Ви можете також розглянути PubSubHubub , але я не маю уявлення про мережеве використання цього. Я вважаю, що він побудований на вершині XMPP.


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

GTalk видаляється з SDK з 1,0 (iirc).
MrSnowflake

8

Я розглядав це, і PubSubHubBub, рекомендований jamesh, - це не варіант. PubSubHubBub призначений для зв'язку між сервером і сервером

"Я за NAT. Чи можу я підписатись на концентратор? Хаб не може з'єднатися зі мною."

/ Анонім

Ні, PSHB - це протокол сервер-сервер. Якщо ти відстаєш від NAT, ти насправді не сервер. Хоча ми роздували ідеї щодо необов'язкових розширень PSHB для того, щоб виконувати вивішування ("довге опитування") та / або опитування скриньки для таких клієнтів, це не в основній специфікації. Основна специфіка - лише сервер-сервер.

/ Бред Фіцпатрік, Сан-Франциско, Каліфорнія

Джерело: http://moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d (пряме посилання неможливо)

Я дійшов висновку, що найпростішим методом є використання прототипу Comet HTTP. Це і просте, і добре зрозуміле рішення, але його також можна повторно використовувати для веб-додатків.


8

Існує нова робота з відкритим кодом, щоб розробити бібліотеку Java для push-сповіщень на Android, використовуючи сервер комет Meteor як резервний. Ви можете ознайомитись із цим у блозі Deacon Project . Нам потрібні розробники, тому, будь ласка, поширюйте слово!


7

Нещодавно Google (18 травня 2016 р.) Оголосив, що Firebase тепер є єдиною платформою для розробників мобільних пристроїв, включаючи повідомлення в режимі реального часу за допомогою push-notifications.

Зараз компанія пропонує всім користувачам Firebase безкоштовні та необмежені сповіщення з підтримкою iOS, Android та Web.

джерело


6

Я не можу знайти, де я це читаю, але я вважаю, що gmail використовує відкрите TCP-з'єднання, щоб здійснити поштове повідомлення електронної пошти.


Розробник програми для Android, яка, схоже, підтримує цю сторінку в блозі joelapenna.com/blog/2009/07/android-foursquare-and-push .
dalelane

Мені здається, вони теж опитуються. Мобільний пристрій встановлює з'єднання з сервером та повідомляє сервер, що чекає оновлень. Фактичний поштовх ініціюється сервером, що дуже важко для мобільних пристроїв, і більшість часу передбачає підтримку мережевого провайдера (sms / wap push) ...
MrSnowflake

1
"C2DM дозволяє стороннім розробникам користуватися тією ж послугою, що і програми Google." з Android Cloud To Device Messaging
colithium

6

Оскільки GTalkвід SDK пішло, може бути хорошою ідеєю зробити «стандартну» систему push-повідомлень. Таким чином, повинен працювати лише один сервіс, лише одне додаткове з'єднання tcp має бути відкритим. Програми повинні спілкуватися з цією послугою за допомогоюIntents і спочатку потрібно запитувати дозвіл на надсилання та отримання повідомлення від служби. Потім сервіс повинен повідомити користувача про нову програму, яка хоче надсилати та отримувати повідомлення. Потім користувач надає або забороняє дозвіл, тому він залишається під контролем. Після цього додаток зареєструє дію + категорію до служби, тому служба знає, як доставити надіслане повідомлення.

Хороша ідея чи ні?


6

Чому ви не ходите з реалізацією XMPP. На даний момент існує так багато публічних серверів, включаючи gtalk, jabber, citadel тощо. Для Android є одна SDK, також названа SMACK. Це ми не можемо сказати про push сповіщення, але за допомогою XMPP ви можете тримати зв’язок між клієнтом і сервером, що дозволить двостороннє спілкування. Значить, клієнт і сервер Android можуть спілкуватися один з одним. В даний час це задовольнить потребу Push в android. Я реалізував зразок коду, і він справді чудово працює


Хочете надати посилання на зразок коду? Проводили тестування щодо часу роботи акумулятора?
Олексій

Я робив тестування на час автономної роботи - серцебиття, яке потрібно надсилати кожні шість хвилин, скорочує час автономної роботи на 30% в гіршому випадку (тобто пристрій прокидається лише для того, щоб надіслати серцебиття). У кращому випадку (користувач використовує пристрій для перегляду, дзвінків тощо), вплив на час автономної роботи незначний.
плоть

6

Нещодавно я розробив http://pushdroid.org - це єдине додаток, яке слід встановити на телефон так само, як Google реалізував його в 2.2. Це працює з 1.5 і транслюється через наміри.


4

Проблема GCM полягає в тому, що в процесі роботи є багато конфігурації:

  • Ви повинні додати багато додаток до програми Android для вас
  • Потрібно налаштувати зовнішній сервер для зв'язку з сервером GCM
  • Вам доведеться писати тести

Якщо вам подобаються прості речі (як я), спробуйте UrbanAirship . Це (IMHO) найпростіший спосіб використання GCM у вашому додатку, не роблячи великої конфігурації. Це також дає гарний графічний інтерфейс для перевірки правильності доставки ваших повідомлень GCM.

  • Ви можете знайти документи та посібник із початку роботи тут
  • Зразок заявки ви можете знайти тут

Примітка: Я жодним чином не афілююсь з UrbanAirship



2

Вони мають своїх слухачів, яких вам слід використовувати, використовуючи бібліотечні класи у вашому коді. Вам не потрібно турбуватися про натискання. Ви повинні надіслати повідомлення на сервер сервера, він підштовхне повідомлення до пристрою. Вони використовують OAuth. Що стосується протоколів, то існує два способи, що використовують CCS та XMPP. CCS просто використовує XMPP як аутентифікований транспортний рівень, тому ви можете використовувати більшість бібліотек XMPP для управління з'єднанням. Щоб надсилати сповіщення на пристрій, ви можете написати код у програмі Android для надсилання, а також код вашого сервера. надсилання повідомлення буде здійснено лише за вашим кодом. Про відпочинок подбає сервер Google у випадку GCM. Ви можете перевірити деталі за цим посиланням

http://developer.android.com/google/gcm/server.html

Також з питань безпеки

Безпека обміну повідомленнями в хмарі Google https://groups.google.com/forum/#!topic/android-gcm/M-EevBitbhQ

Якщо ваша програма не працює, пристрої також можуть отримувати сповіщення, оскільки вам потрібно написати код для слухачів трансляції. У фоновому режимі він буде прослуховувати сервер і кожного разу, коли будь-який пакет повідомлень буде там, він отримає повідомлення як повідомлення. Android має сервіс, який вам не потрібен. Вам потрібно використовувати лише ті ресурси, використовуючи клас бібліотеки, який полегшує вашу роботу, і дозволяти їм писати, якщо ваша програма не працює, то також отримуйте сповіщення. Очевидно, що знайдеться якийсь слухач, який зробить додаток для отримання. Перевірте розділ "Отримати повідомлення" за цим посиланням

http://developer.android.com/google/gcm/client.html

Він також буде приймати запит від користувачів. Для GCM це зробить. Перевірте "Надіслати повідомлення"

http://developer.android.com/google/gcm/client.html

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