Проблеми з хмарними повідомленнями для вбудованих пристроїв надихнули команди Kaltiot & SnowGrains на створення крос-платформного Qt API, який дозволяє легко надсилати повідомлення з вбудованих пристроїв. API називається Qt Cloud Messaging API , і він побудований з гнучкістю та розширюваністю.
Ми також вирішили націлюватися на інші області Qt і зробити API, що легко розширюється для будь-якого постачальника послуг, а не тільки для вбудованих. Це дозволяє розробникам використовувати той же API для розробки мобільних та настільних програм.
В даний час існує величезна кількість постачальників push-повідомлень для мобільних та веб-розробок. Тим не менш, в таких галузях, як автоматизація, автомобілебудування, робототехніка та інших пристроях, що вбудовуються, насправді немає постачальників послуг такого типу. Потреба зростає швидкими темпами, оскільки вбудовані та IoT пристрої все більше і більше відправляють повідомлення з пристроїв власників, постачальників автосервісів, телеметрії, хмар та інших.
API-інтерфейс Qt Cloud Messaging простий у засвоєнні та використанні.
Давайте поглянемо на те, як використовувати API для вбудовуваних систем та мобільних платформ Android. Ми інтегрували SDK Kaltiot Smart IoT і Firebase C++ SDK у бекенд, а за допомогою Qt Cloud Messaging API ми можемо легко створити, наприклад, програму чату поверх нього.
Як використовувати Qt Cloud Messaging API для вбудованих пристроїв:
По-перше, клонуйте репозиторій qtcloudmessaging: git clone https://codereview.qt-project.org/qt/qtcloudmessaging
Постачальник послуг
Попередні вимоги:
- Отримати SDK Kaltiot для вашого вбудованого пристрою (наприклад, Linux або Raspberry Pi SDK) https://console.torqhub.io
- Отримати ключ API для надсилання каналів та/або створення серверної реалізації
- Додати наступний рядок в .pro файл програми: QT + = cloudmessagingembeddedkaltiot
- Визначити шлях KALTIOT_SDK до вашого application.pro
- Додати наступні включення до main.cpp
#include <QtCloudMessaging> #include <QtCloudMessagingEmbeddedKaltiot>
- Додати наступні конфігурації QtCloudMessaging до main.cpp
// Создайте экземпляр CloudMessaging библиотеки QCloudMessaging *pushServices = new QCloudMessaging(); // Добавить поставщика для встраиваемых систем Kaltiot QCloudMessagingEmbeddedKaltiotProvider *kaltiotPushService = new QCloudMessagingEmbeddedKaltiotProvider() // Параметры инициализации, основанные на поставщике, предоставляются с помощью QVariantMap QVariantMap provider_params; provider_params[“API_KEY”] = “Your API key from the Kaltiot console for server communication”; // Создание имени поставщика, которое может быть использовано через ваше приложение. pushServices->registerProvider(“KaltiotService”, kaltiotPushService, provider_params); QVariantMap client_params; client_params[“address”] = “IOTSensor1”; client_params[“version”] = “1.0”; client_params[“customer_id”] = “Kaltiot”; // Создание каналов по умолчанию для прослушивания QVariantList channels; channels.append(“weather_broadcast_channel”); client_params[“channels”] = channels; // Подключение клиента IoT-датчика к системе pushServices->connectClient(“KaltiotService”, “IOTSensor1”, client_params); //! Автоматически подписаться на прослушивание еще одного канала, например, WindInfo. pushServices->subsribeToChannel(“WindInfo”, ” KaltiotService “, ” IOTSensor1″);
- Забезпечити контекст обміну хмарними повідомленнями з QML у main.cpp
//! Предоставление контекста QML engine.rootContext()->setContextProperty(“pushServices”, pushServices);
QML частина:
main.qml зловити повідомлення, що надходять від сервісу Kaltiot.
Щоб отримати повідомлення в QML:
- Отримання повідомлень
Connections{ target : pushServices onMessageReceived:{ //! Message is received as string and needs parsing to JSON console.log(message) } }
- Надсилання повідомлень
//! Отправка широковещательного сообщения, например, от метеостанции: //! Структура сообщения для встраиваемых устройств проста: //! определить полезную нагрузку json: //! { //! “payload_type”:”STRING”, //! “payload”: encodeURI(JSON.stringify(payload)) //! } //! Полезная нагрузка - это ваше приложение. Например: var payload = { msgType:”NEW_WEATHER_INFO”, city: “Oulu”, forecast: “full sunlight for whole next week” } //! Капсулируйте полезную нагрузку для сообщения и отправляйте ее через API QtCloudMessaging: var payload_array = [{“payload_type”:”STRING”,”payload”: encodeURI(JSON.stringify(payload))}] pushServices.sendMessage(JSON.stringify(data), ”KaltiotService”, ”IOTSensor1”, ””, ”weather_broadcast_channel”);
Використання Qt Cloud Messaging API для мобільної розробки Android/iOS з постачальником послуг Firebase від Google
Попередні вимоги:
- Створити новий проект у консолі Google Firebase: https://firebase.google.com/
-
Завантажити SDK Google Firebase C++ та додати конфігураційний файл Firebase для Android Gradle:
DISTFILES += \android/google-services.json -
Додати наступний рядок в .pro файл програми: QT + = cloudmessagingfirebase
Визначити шлях Firebase Google у файлі application.pro за допомогою GOOGLE_FIREBASE_SDK - Додати наступні включення до свого файлу main.cpp
#include <QtCloudMessaging> #include <QtCloudMessagingFirebase>
- Додати наступне налаштування QtCloudMessaging у main.cpp:
// Создайте экземпляр CloudMessaging библиотеки QCloudMessaging *pushServices = new QCloudMessaging(); QCloudMessagingFirebaseProvider *firebaseService = new QCloudMessagingFirebaseProvider(); QVariantMap provider_params; // Ключ API сервера не рекомендуется хранить внутри кода приложения из соображений безопасности. // Но если вы это делаете или если вы выполняете реализацию сервера с помощью C++ и Qt, убедитесь, что он находится внутри скомпилированного файла C. // SERVER_API_KEY необходимо иметь возможность отправлять сообщения темы с клиента без сервера приложений Firebase. provider_params[“SERVER_API_KEY”] = “Get your SERVER API KEY from the google firebase console”; // Регистрация компонента службы firebase Google. pushServices->registerProvider(“GoogleFireBase”, firebaseService, provider_params); /*! Для мобильного устройства необходим подключенный клиент. \param Service name “GoogleFireBase” \param Client identifier name to be used inside the application \param Parameters for the client. No params for firebase client. */ pushServices->connectClient(“GoogleFireBase”, “MobileClient”, QVariantMap()); //! Автоматически подписаться на прослушивание одной темы pushServices->subsribeToChannel(“ChatRoom”, “GoogleFireBase”, “MobileClient”);
- Забезпечити контекст обміну хмарними повідомленнями з QML у main.cpp
//! Предоставление контекста QML engine.rootContext()->setContextProperty(“pushServices”, pushServices);
QML частина:
в main.qml зловити повідомлення, що надходять із google firebase
- Отримання повідомлень:
Connections{ target : pushServices onMessageReceived:{ //! Сообщение принимается как строка и требует синтаксического анализа для JSON console.log(message) } }
- Відправлення повідомлень:
//! Для firebase структура сообщения должна иметь данные как целое сообщение. //! Уведомления отображаются в центре уведомлений Android/iOS. function sendMessage(notification_titile, notification_msg, msg){ var data = { “data”:{ “message”: {“text”:msg } }, “notification” : { “body” : notification_msg, “title” : notification_titile } } //! Дайте идентификатор поставщика данных и поставщика услуг, а также имя клиента, определенное в коде C++. pushServices.sendMessage(JSON.stringify(data),”GoogleFireBase”,”MobileClient”,””,”ChatRoom”); }
Ви можете погратися з Firebase Qt Cloud Messaging API+ зі зразка https://github.com/snowgrains/qtcloudmessaging-examples
API-інтерфейс Qt Cloud Messaging надає крос-платформний API, який дозволяє нам включати нових постачальників та підтримувати API розробки таким самим.
API Qt Cloud Messaging розроблено так, щоб бути легко доступним для будь-якого постачальника послуг. Погляньте на нього на https://codereview.qt-project.org/qt/qtcloudmessaging і зробіть свій власний внесок у бекенд у спільноті.
Kaltiot розробляє та обслуговує хмарні сервіси IoT з 2008 року. Їй довіряє Microsoft. Через Kaltiot проходить 10М повідомлень щогодини.
SnowGrains надає повні програмні рішення.
Стаття написана: Ari Salmi | Вівторок, Січень 2, 2018р.
https://blog.qt.io/blog/2018/01/02/qt-cloud-messaging-api-available-embedded-systems/
Пытался по этому мануалу все сделать, ошибка возникла на 2 шаге, QT += cloudmessagingfirebase
Project ERROR: Unknown module(s) in QT: cloudmessagingfirebase
Как лечить это?
У меня тоже такая проблема возникла, никак не могу найти решение. Может подскажет кто?
Тема так и не развилась?
Очень хочется попробовать сконнектить qt-десктоп с андройдом через firebase.