Push повідомлення з використанням firebase cloud message

Використовуємо нову технологію FCM, відправляємо пуші на пристрої на базі Android, ініціюємо виклик сервера клієнтом з самого сервера.

Сьогодні розповім про те, як можна швидко і легко відправити довільне push повідомлення з сервера на мобільний пристрій на базі Android (на iOS немає можливості спробувати, на Windows Phone цей метод працювати не буде, принаймні поки що).

Ось така ось невелика завдання, яке треба вирішити.

Про те, як розгорнути мобільну платформу для розробника на своєму пристрої писати не буду, інформації багато (я особисто слухав безкоштовний курс вельмишановного DitriX).

Ну, приступимо. Відкриємо конфігурацію Сервера і створимо в ній загальну форму, з якої будемо відправляти пуші клієнту. На формі створимо одну команду, яка і буде відправляти повідомлення. Тепер розберемося, яким об'єктом на рівні платформи представлено push повідомлення. СП підкаже нам, що це ДоставляемоеУведомленіе. Його ініціалізація досить проста, об'єкт доступний скрізь, крім Веб-клієнта, що нас цілком влаштовує. Помістимо наступний код в обробник натискання команди загальної форми. Контекст виконання в даному випадку не важливий. Відразу обмовлюся, що далі по тексту не буде якихось яких перевірок на коректність даних, це і так все зрозуміло.

Push повідомлення з використанням firebase cloud message

Майстер створення проектів попросити придумати проекту якесь ім'я (воно буде потрібно тільки для того, щоб відрізняти проекти в самій консолі) і погодитися з умовами гугла. Після створення проекту вже можна подивитися необхідний нам НомерПріложеніяGoogleCloud. Для цього перейдемо в панель адміністрування проекту, а потім в настройки.

Push повідомлення з використанням firebase cloud message

Спробуємо тепер отримати ІдентіфікаторПодпісчікаДоставляемихУведомленій, який доступний через менеджера доставляються повідомлень, але згадаємо, що це все є лише на мобільному клієнті. Тому треба вирішити, як ми будемо передавати отриманий ІдентіфікаторПодпісчікаДоставляемихУведомленій на Сервер. Способів насправді досить, але я пропоную використовувати http-сервіс. Природно він повинен бути створений на Сервері. Отже, створимо http-сервіс, з кореневим URL testpush і одним методом типу GET, в модуль якого помістимо наступний код

Що тут відбувається? Так як ми плануємо, що цей сервіс буде викликатися з МУ, то очікуємо від МУ 1 параметр reginfo (можна його зробити обов'язковими, або взагалі використовувати POST і передавати все в тілі, але зараз не про це) - це серіалізовані об'єкт ІдентіфікаторПодпісчікаДоставляемихУведомленій. Помістимо все це в Сховище значення і запишемо в константу, попередньо створивши її. Тепер нарешті на сервері у нас буде потрібний нам параметр для відправки, але поки у нас до сих пір нічого відправляти, та й нема звідки. Займемося цим питанням і почнемо робити конфігурацію для МУ. Так як об'єкт ІдентіфікаторПодпісчікаДоставляемихУведомленій має мінливу природу і реккомендую його періодично оновлювати то вчинимо так. У модулі керованого застосування помістимо наступний код (конфігурація для МУ)

Для того, щоб IDПодпісчіка завжди був актуальним на Сервері, підключимо обробник очікування, який буде отримувати "свіжий" ІдентіфікаторПодпісчікаДоставляемихУведомленій і відправляти його на Сервер, крім того отримання і відправку будемо викликати при самому старті системи. Всі ці операції можна виконувати у фоновому режимі, щоб це було непомітно для користувача. Важливим моментом є те, що при виклику методу ДоставляемиеУведомленія.ПолучітьІдентіфікаторПодпісчікаУведомленій відбуватиметься звернення до серверів Google, тому на МУ повинен бути доступний Інтернет. Варто зауважити, що у мене не вийшло отримати таким чином IDПодпісчіка на вірутальних пристрої, все вивалювалося в помилку неправильного параметра НомерПроекта (може це якось пов'язано з обмеженням безкоштовного функціоналу Genymotion), але на реальному пристрої все прекрасно відпрацьовує. У загальних модулях помістимо наступний код.

Тепер у нас все готово щоб на Сервері нарешті опинився ІдентіфікаторПодпісчікаДоставляемихУведомленій, запускаємо мобільний додаток, вказуємо наш номер проекту, перезапускаємо додаток і вуаля, на Сервері константа IDПодпісчіка тепер зберігає щось типу

Сервер вже знає практично все, щоб відправити пуш, тому повернемося до нього. У загальній формі додамо наступний код

Отримуємо з константи сховище значення, а з нього вже нашу серіалізовані рядок і десеріалізуем її.

Push повідомлення з використанням firebase cloud message

Перед нами відкриється сторінка Firebase Cloud Messaging, там багато чого цікаво, але нам треба перейти в консоль.

Push повідомлення з використанням firebase cloud message

Додамо новий проект, вказавши ім'я, яке ми вказували при створенні проекту в консолі разработічка гугл. Після введення перших символів майстер створення запропонувати вибрати цей проект. Погоджуємося, також вибираємо країну і натискаємо Додати FireBase. Псоле цього повертаємося в консоль розробника гугл (тепер панель управління консолі прийме інший вигляд ніж раніше) і йдемо в розділ Облікові дані. Тут нас буде цікавити ключі API, а саме ключ сервера.

Де Тема, ТекстСообщенія, Дані, КлючСервера - це реквізити форми, а функція ПолучітьIDПодпісчіка повертає значення однойменної константи.

Настав час першого тесту. Запускаємо програму на МУ, блокуємо екран або звертаємо додаток, відкриваємо в режимі Підприємство конфігурацію Сервер і тиснемо Надіслати.

Push повідомлення з використанням firebase cloud message

Ура, МУ продзижчав / пропищав або щось в цьому роді, в загальному, все вийшло, повідомлення доставлено.

Push повідомлення з використанням firebase cloud message

Залишився ще один невеликий нюанс. Поки толку від такого повідомлення трохи, додаток нічого не робить при отриманні пуша. Виправимо цей момент. У конфігурації МУ, в модулі керованого застосування в подія ПріСтартеСістеми додамо наступний код

Тепер після відправки повідомлення з сервера можна виконати будь-які дії на клієнта. В даному випадку ми просто покажемо текст повідомлення.

Push повідомлення з використанням firebase cloud message

Поки руки не дійшли до повної реалізації http сервера (щоб весь ід передавати), зробив ось таку функцію для створення ВД на сервері по рядку

Але на етапі отримання виключених

Ключик пробував і "Ключ API 1" і серверний - все одно реакція одна.

Може ви зможете підказати, куди копати.

14. Микола Бєляєв (freez1301) 150 04.07.17 11:36 Зараз в темі


ніби як тільки для APNS працює ця штука, а Ви ключ гугл намагаєтеся передати.

15. Семен Павлюков (7OH) 31 04.07.17 12:28 Зараз в темі

(14) Спасибо большое за наводку - і дійсно адже - написано в мануалі.
Тепер уже краще - помилка виглядає інакше
"Відправка повідомлення 1 через GCM завершилася помилкою: ключ відправника не підходить для одержувача"
Ну тут мабуть все ж таки доведеться передавати ВД цілком з сериализацией.

Созданіе06.04.17 14:08

Обновленіе06.04.17 14:08

Код откритНе вказано

Push повідомлення з використанням firebase cloud message

Push повідомлення з використанням firebase cloud message

Push повідомлення з використанням firebase cloud message

Push повідомлення з використанням firebase cloud message