Skip to content

qt/qtcloudmessaging

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QT CLOUD MESSAGING API INSTALLATION:

  1. To install with available backend add following to qmake script: qmake "CONFIG += embedded-kaltiot" or qmake "CONFIG += firebase"

    e.g.: qmake "CONFIG += embedded-kaltiot firebase" make qmake_all make make install

Google Firebase requirements: 2. Download and unzip google firebase c++ SDK: https://firebase.google.com/docs/cpp/setup

  1. To use firebase as backend, define the following ENVIRONMENT variable GOOGLE_FIREBASE_SDK = and make it to point to your firebase sdk root

Embedded-Kaltiot requirements: 4. To use in embedded Kaltiot backend: 3.1. Register your app in https://console.torqhub.io/signin

3.2. Download platform SDK from the console download page

3.3. Add environment variable to pointing to downloaded and unzipped SDK root:
    KALTIOT_SDK = ../../../<yourappname>_RasperryPi_SDK_1.0.17
  1. Install first the QtCloudMessaging from command line with:

    qmake "CONFIG += embedded-kaltiot firebase" make make install

  2. Now you can use the QtCloudMessaging in your app with

    Just API wrapper (e.g. creating new service providers) QT += cloudmessaging

    With Firebase backend: QT += cloudmessagingfirebase

    With Embedded devices & Kaltiot QT += cloudmessagingembeddedkaltiot

    See more from the example apps. NOTE: Examples are in Github: https://github.com/snowgrains/qtcloudmessaging-examples

  3. Usage basics:

    main.cpp:

    // Using QCloudMessaging: #include #include <kaltiotdemo.h>

    // Depending on your backend provider, add:

    // For Embedded systems #include

    // for Google firebase #include

    #include #include #include

    int main(int argc, char *argv[]) { QGuiApplication app(argc, argv);

     QQmlApplicationEngine engine;
    
     //*** QTCLOUDMSG DEFINITIONS
     QCloudMessaging *pushServices = new QCloudMessaging();
    
     //***** For Kaltiot Embedded systems
     QCloudMessagingEmbeddedKaltiotProvider *kaltiotPushService = new QCloudMessagingEmbeddedKaltiotProvider()
    
     // Provider based init parameters are given with QVariantMap
     QVariantMap provider_params;
     provider_params["SERVER_API_KEY"] = "Your API key from the Kaltiot console for server communication";
    
     // Creating name for provider which can be used cross your app.
     pushServices->registerProvider("KaltiotService", kaltiotPushService, provider_params);
    
     QVariantMap client_params;
     client_params["address"] = "IOTSensor1";
     client_params["version"] = "1.0";
     client_params["customer_id"] = "Kaltiot";
     clientParams[QStringLiteral("kaltiot_daemon_path")] = QStringLiteral("127.0.0.1:50000");
    
     QVariantList channels;
     channels.append("Temperatures");
     client_params["channels"] = channels;
    
     /*! Connected client for the device.
       \param Service name "KaltiotService"
       \param Client identifier name to be used inside the application
       \param Parameters for the client specific for the provider API
     */
     pushServices->connectClient("KaltiotService", "IOTSensor1", client_params);
    
     //***** OR For Firebase mobile systems:
     QCloudMessagingFirebaseProvider *m_firebaseService = new QCloudMessagingFirebaseProvider();
    
     QVariantMap provider_params;
    
     // Server API key is not recommended to store inside to the application code due security reasons.
     // But if you do, make sure it is inside compiled C file or if you are doing a server side implementation with C++ & Qt.
     // SERVER_API_KEY Is needed to be able to send topic messages from the client without Firebase application server.
    
     provider_params["SERVER_API_KEY"] = "Get your SERVER API KEY from the google firebase console";
    
     // Registering the Google firebase service component.
     pushServices->registerProvider("GoogleFireBase", m_firebaseService, provider_params);
    
     /*! Connected client is needed for mobile device.
       \param Service name "GoogleFireBase"
       \param Client identifier name to be used inside the demo application
       \param Parameters for the client. No params for firebase client.
     */
     pushServices->connectClient("GoogleFireBase", "MobileClient", QVariantMap());
    
     //! Automatically subscribe to listen one example topic
     pushServices->subscribeToChannel("ChatRoom", "GoogleFireBase", "MobileClient");
    
     //*** END OF QTCLOUD MSG DEFINITIONS
    
     // these are needed for keeping the received RID in memory after restart (in Android)
     QCoreApplication::setOrganizationName("MyOrganisation");
     QCoreApplication::setOrganizationDomain("MyOrganisation.com");
     QCoreApplication::setApplicationName("QtCloudMessagingDemo");
    
    
     // To Give QML the push service context:
     engine.rootContext()->setContextProperty("pushServices", pushServices);
    
     engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    
     return app.exec();
    

    }

    main.qml:

    import QtQuick 2.6 import QtQuick.Window 2.2

    Window { visible: true width: 640 height: 480 title: qsTr("Qt Cloud Messaging Demo")

     // NOTIFICATIONS FROM THE ALL PROVIDERS:
     Connections {
        target:pushServices
        onMessageReceived:{
             console.log("Message to " + providerId + " service to " + clientId + " client.")
             console.log("Message: " + message)
    
             var msg_in_json = JSON.parse(decodeURI(message));
    
             // Example to respond to embedded system request:
             if (msg_in_json.command === "REQUESTING_TEMPERATURE")
                 embeddedPublishTemperatureToServer(msg_in_json.serverID, mydevicecommand.getTemperature());
    
             // Or firebase the message itself is a container of the info.
             updateGameNotification(message);
        }
    
        // Own Uuid to be used or broadcasted to server.
        onClientTokenReceived: {
    
             console.log("MY Uuid:"+rid)
    
             // Id this is server code:
             serverUuid = rid;
    
             // Id this is client code:
             clientUuid = rid;
    
        }
     }
     Component.onCompleted {
         // In case android app and firebase sdk gets started fast and token is needed, it can be requested with:
         clientUuid = pushServices.clientToken("GoogleFireBase", "MobileClient");
     }
    
     //***** EMBEDDED DEVICES
    
     // Function to send msg as server with Kaltiot provider to all clients as broadcast
     property string serverUuid: ""
    
     function sendKaltiotEmbeddedServerMessage(command_msg, msg) {
    
         var payload = {command: command_msg, server_id : serverUuid}; // e.g. "REQUESTING_TEMPERATURE"
         var payload_array = [{"payload_type": "STRING","payload": encodeURI(JSON.stringify(payload))}]
         var p = "payload=" + JSON.stringify( payload_array );
    
         pushServices.sendMessage(p, "KaltiotService", "", "", "Temperatures");
     }
    
     // Function to send temperature status message from the embedded client to Kaltiot server:
     property string clientUuid :""
    
     function embeddedPublishTemperatureToServer(serverUuid, temperature) {
         var payload = {command: "TEMPERATURE_INFO", clientId: clientUuid}
         var payload_array = [{"payload_type": "STRING","payload": encodeURI(JSON.stringify(payload))}]
         var p = "payload=" + JSON.stringify( payload_array );
    
         pushServices.sendMessage(p, "KaltiotService", "IOTSensor1", serverUuid,"");
     }
     //***** FIREBASE
     // Function to post msg as a server and broadcast it to all clients in the same room
     function sendFirebaseServerMessage(msg){
         var data = {"data": {"message": {"text": msg } },
                     "notification": {"body": msg, "title": "Qt Cloud Messaging Chat"}}
    
         /*!
          * \brief SendMessage
          * \param msg               Message as text which needs to be modified to the provider specific JSON.
          * \param providerId        Provider name specified at config
          * \param localclientId     clientId spefied at startup
          * \param send_to_device    Device Uuid (rid) to send for one known device
          * \param send_to_channel   Channel name to broadcast message to channel
          * \return
          */
    
         pushServices.sendMessage(JSON.stringify(data), "GoogleFireBase", "MobileClient", "", "ChatRoom");
     }
    

    }

About

Qt API which wraps push services

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published