Проблемы с облачными сообщениями для встраиваемых устройств вдохновили команды 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.