Qt Cloud Messaging API für eingebettete Systeme verfügbar

Probleme mit Cloud-Messaging für eingebettete Geräte inspirierten die Teams von Kaltiot und SnowGrains dazu, eine plattformübergreifende Qt-API zu erstellen, die das Senden von Nachrichten von eingebetteten Geräten erleichtert. Die API heißt Qt Cloud Messaging API und wurde im Hinblick auf Flexibilität und Erweiterbarkeit entwickelt.


Wir haben uns auch entschieden, auf andere Bereiche von Qt abzuzielen und die API für jeden Dienstanbieter leicht erweiterbar zu machen, nicht nur für integrierbare. Dadurch können Entwickler dieselbe API verwenden, um mobile und Desktop-Anwendungen zu entwickeln.

Derzeit gibt es eine Vielzahl von Push-Nachrichten-Anbietern für die Mobil- und Webentwicklung. Branchen wie Automatisierung, Automobil, Robotik und andere eingebettete Geräte verfügen jedoch nicht wirklich über diese Art von Dienstleistern. Der Bedarf wächst rasant, da eingebettete und IoT-Geräte immer mehr Nachrichten von Eigentümergeräten, Autodienstanbietern, Telemetrie, der Cloud und mehr senden.

Die Qt Cloud Messaging API ist einfach zu erlernen und zu verwenden.

Werfen wir einen Blick auf die Verwendung der Android Embedded- und Mobile-APIs. Wir haben das Kaltiot Smart IoT SDK und das Firebase C++ SDK in das Backend integriert und können mit Hilfe der Qt Cloud Messaging API beispielsweise problemlos eine Chat-Anwendung darauf aufbauen.

So verwenden Sie die Qt Cloud Messaging-API für eingebettete Geräte:

Klonen Sie zuerst das qtcloudmessaging-Repository: git clone https://codereview.qt-project.org/qt/qtcloudmessaging

Dienstleister

Voraussetzungen:

  • Beziehen Sie das Kaltiot SDK für Ihr eingebettetes Gerät (z. B. Linux oder Raspberry Pi SDK) von https://console.torqhub.io
  • Holen Sie sich einen API-Schlüssel, um Kanäle zu senden und/oder eine Serverimplementierung zu erstellen
  • Fügen Sie der .pro-Datei der Anwendung die folgende Zeile hinzu: QT += cloudmessagingembeddedkaltiot
  • Definieren Sie den KALTIOT_SDK-Pfad zu Ihrer application.pro
  • Fügen Sie das folgende Include zu main.cpp hinzu
#include <QtCloudMessaging>
 
#include <QtCloudMessagingEmbeddedKaltiot>
  • Fügen Sie main.cpp die folgenden QtCloudMessaging-Konfigurationen hinzu
// Создайте экземпляр 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″);
  • Bereitstellung von Cloud-Messaging-Kontext mit QML in main.cpp
//! Предоставление контекста QML 
engine.rootContext()->setContextProperty(“pushServices”, pushServices);

QML-Teil:

in main.qml, um Nachrichten abzufangen, die vom Kaltiot-Dienst kommen.

So erhalten Sie eine Nachricht in QML:

  • Nachrichten empfangen
Connections{
target : pushServices
onMessageReceived:{

      //! Message is received as string and needs parsing to JSON

console.log(message)
}
}
  • Nachrichten senden
//! Отправка широковещательного сообщения, например, от метеостанции:
//! Структура сообщения для встраиваемых устройств проста:
//! определить полезную нагрузку 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”);

Verwendung der Qt Cloud Messaging API für die mobile Android/iOS-Entwicklung mit dem Firebase-Dienstanbieter von Google

Voraussetzungen:

  • Erstellen Sie ein neues Projekt in der Google Firebase Console: https://firebase.google.com/
  • Laden Sie das Google Firebase C++ SDK herunter und fügen Sie die Firebase Android Gradle-Konfigurationsdatei hinzu:
    DISTFILES += \android/google-services.json
  • Fügen Sie der .pro-Datei der Anwendung die folgende Zeile hinzu: QT += cloudmessagingfirebase
    Definieren Sie den Google Firebase-Pfad in der Datei „application.pro“ mit GOOGLE_FIREBASE_SDK
  • Fügen Sie das folgende Include zu Ihrer main.cpp-Datei hinzu
#include <QtCloudMessaging>

#include <QtCloudMessagingFirebase>
  • Fügen Sie die folgende QtCloudMessaging-Einstellung zu main.cpp hinzu:
// Создайте экземпляр 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”);
  • Bereitstellung von Cloud-Messaging-Kontext mit QML in main.cpp
//! Предоставление контекста QML
engine.rootContext()->setContextProperty(“pushServices”, pushServices);

QML-Teil:

in main.qml Nachrichten von Google Firebase abfangen

  • Nachrichten empfangen:
Connections{
target : pushServices
onMessageReceived:{
//! Сообщение принимается как строка и требует синтаксического анализа для JSON

console.log(message)
}
}
  • Nachrichten senden:
//! Для 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”);
}

Sie können mit der Firebase Qt Cloud Messaging API + aus dem Beispiel herumspielen https://github.com/snowgrains/qtcloudmessaging-examples

Die Qt Cloud Messaging API bietet eine plattformübergreifende API, die es uns ermöglicht, neue Anbieter zu aktivieren und die Entwicklungs-API gleich zu halten.

Die Qt Cloud Messaging API ist so konzipiert, dass sie für jeden Dienstanbieter leicht zugänglich ist. Schau es dir an https://codereview.qt-project.org/qt/qtcloudmessaging und leisten Sie Ihren eigenen Beitrag zum Backend in der Community.

Kaltiot entwickelt und wartet seit 2008 IoT-Cloud-Dienste. Ihr wird von Microsoft vertraut. Jede Stunde durchlaufen 10 Millionen Nachrichten Kaltiot.

SnowGrains bietet komplette Softwarelösungen.

Artikel geschrieben von: Ari Salmi | Dienstag, 2. Januar 2018

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

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

zloi
  • 3. Juni 2019 09:59

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

A
  • 17. August 2020 00:39

Тема так и не развилась?
Очень хочется попробовать сконнектить qt-десктоп с андройдом через firebase.

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken