Qt Cloud Messaging API доступен для встраиваемых систем

Cloud, Messaging, QML

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

Virtual hosting with 10 percent discount
Virtual hosting with 10 percent discount
EVILEG offers reliable hosting with a 10% discount for virtual hosting and 5% for VPS
II

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 Как лечить это?

  • #
  • June 3, 2019, 9:59 a.m.

У меня тоже такая проблема возникла, никак не могу найти решение. Может подскажет кто?

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Looking for a Job?
14,000.00 руб. - 40,000.00 руб.
Разработчик Qt
Annino, Moscow Oblast, Russia
5,000.00 руб. - 15,000.00 руб.
Дизайнер
Moskovskiy, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

A
Aug. 22, 2019, 11:24 p.m.
Aleksandr73

Qt - Test 001. Signals and slots

  • Result:47points,
  • Rating points-6
Aug. 21, 2019, 10:23 a.m.
Andrej Ermoshin

C++ - Test 002. Constants

  • Result:58points,
  • Rating points-2
Aug. 21, 2019, 10:15 a.m.
Andrej Ermoshin

C++ - Test 001. The first program and data types

  • Result:86points,
  • Rating points6
Last comments
Aug. 19, 2019, 7:41 a.m.
Andrej Jankovich

это проблема дистрибутива, попробуйте установить через пакетный менеджер snap Суть проблемы: libQt5Core которая лежит в дистрибутиве требует версию glibc >= 2.25 у вас видимо …
b
Aug. 18, 2019, 6:09 a.m.
bbb116

cqtdeployer /home/aleks/CQtDeployer/bin/cqtdeployer: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.25' not found (required by /home/aleks/CQtDeployer/lib/libQt5Core.so.5) linux mint …
D
Aug. 17, 2019, 9:04 a.m.
Damir

github ChekableTView Правой групповая смена значения при перетаскивании левой как обычно.
Aug. 16, 2019, 1:03 p.m.
Evgenij Legotskoj

Потому, что в минуте 60 секунд
Aug. 16, 2019, 12:16 p.m.
Dmitrij

а почему делитель 60000, а не 1000?
Now discuss on the forum
Aug. 24, 2019, 7:21 a.m.
Evgenij Legotskoj

Не помню, давно уже с QML не работал, по-моему, обычно пишет в консоль, что не находит файл. В любом случае какую-то ошибку в консоль выкидывает. Но если честно, если у вас проект будет ак…
BG
Aug. 24, 2019, 4:27 a.m.
Brjus Gliff

Спасибо, вначале в документации было не понятно что к чему, теперь разобрался
I
Aug. 21, 2019, 8:36 a.m.
Intruder

Александр, мне не нужно перебирать. Вы говорите правильно, сначала я написал избыточный код просто не подумав. Задача такая, мне нужно просто переложить из QMap в атрибуты xml тега все, что там …
Aug. 21, 2019, 3:16 a.m.
nayk1982

Если Вы разрабатываете какую-то универсальную утилиту, которая вообще не привязана к логике, тогда как вариант: 1. Получить список таблиц через QSqlDatabase::tables 2. Для каждой табли…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB