Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Push Notifications in QT
Forum Updated to NodeBB v4.3 + New Features

Push Notifications in QT

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
25 Posts 4 Posters 15.5k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    Robin Hood
    wrote on last edited by
    #13

    Yes I understand. When my application is closed, the messages are only displayed in the message bar. And when I press the message, my application starts, but it does not receive the message itself. What can I do to see the message in my application as well?

    If I receive a message while the application is in the background and I click on it, then "void MessageListener :: OnMessage (const messaging :: Message & message)" will be started, but "message.notification" will be false. Only "message.notification_opened" is true, whereupon the string "launchnotification" is passed, but that is useless.

    void MessageListener::OnMessage(const messaging::Message &message)
    {
        // When messages are received by the server, they are placed into an
        // internal queue, waiting to be consumed. When ProcessMessages is called,
        // this OnMessage function is called once for each queued message.
    
        QVariantMap data;
    
        if (message.notification) {
            if (!message.notification->title.empty()) {
                const QString key = QStringLiteral("nTitle");
                const QString value = QString::fromStdString(message.notification->title.c_str());
                data.insert(key, value);
            }
            if (!message.notification->body.empty()) {
                const QString key = QStringLiteral("nBody");
                const QString value = QString::fromStdString(message.notification->body.c_str());
                data.insert(key, value);
            }
            if (!message.notification->icon.empty()) {
                const QString key = QStringLiteral("nIcon");
                const QString value = QString::fromStdString(message.notification->icon.c_str());
                data.insert(key, value);
            }
            if (!message.notification->tag.empty()) {
                const QString key = QStringLiteral("nTag");
                const QString value = QString::fromStdString(message.notification->tag.c_str());
                data.insert(key, value);
            }
            if (!message.notification->color.empty()) {
                const QString key = QStringLiteral("nColor");
                const QString value = QString::fromStdString(message.notification->color.c_str());
                data.insert(key, value);
            }
            if (!message.notification->sound.empty()) {
                const QString key = QStringLiteral("nSound");
                const QString value = QString::fromStdString(message.notification->sound.c_str());
                data.insert(key, value);
            }
            if (!message.notification->click_action.empty()) {
                const QString key = QStringLiteral("nClickAction");
                const QString value = QString::fromStdString(message.notification->click_action.c_str());
                data.insert(key, value);
            }
        }
    
        if (message.notification_opened) {
            const QString key = QStringLiteral("launchnotification");
            data.insert(key, true);
        }
    
        for (const auto& field : message.data)
        {
            const QString key = QString::fromStdString(field.first);
            const QString value = QString::fromStdString(field.second);
    
            data.insert(key, value);
        }
    
        setData(data);
    }
    

    Although it says, "As a workaround, we override onNewIntent so that the intent is passed to the C ++ Library Service, which forwards the data to the native C ++ messaging library."
    ...?

        /**
           * Workaround for when a message is sent containing both a Data and Notification payload.
           *
           * When the app is in the foreground all data payloads are sent to the method
           * `::firebase::messaging::Listener::OnMessage`. However, when the app is in the background, if a
           * message with both a data and notification payload is receieved the data payload is stored on
           * the notification Intent. NativeActivity does not provide native callbacks for onNewIntent, so
           * it cannot route the data payload that is stored in the Intent to the C++ function OnMessage. As
           * a workaround, we override onNewIntent so that it forwards the intent to the C++ library's
           * service which in turn forwards the data to the native C++ messaging library.
           */
        @Override
        protected void onNewIntent(Intent intent) {
            // If we do not have a 'from' field this intent was not a message and should not be handled. It
            // probably means this intent was fired by tapping on the app icon.
    
            // TODO
            Bundle extras = intent.getExtras();
            String from = extras.getString(EXTRA_FROM);
            String messageId = extras.getString(EXTRA_MESSAGE_ID_KEY);
    
            if (messageId == null) {
                messageId = extras.getString(EXTRA_MESSAGE_ID_KEY_SERVER);
            }
    
            if (from != null && messageId != null) {
                Intent message = new Intent(this, MessageForwardingService.class);
                message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
                message.putExtras(intent);
                startService(message);
            }
            setIntent(intent);
    
        }
    
    1 Reply Last reply
    0
    • K Offline
      K Offline
      kuzulis
      Qt Champions 2020
      wrote on last edited by
      #14

      @Robin-Hood said in Push Notifications in QT:

      but it does not receive the message itself. What can I do to see the message in my application as well?

      Hmm. For me when the OnMessage is called (when I click on the message in messages bar) the ::firebase::messaging::Message contains all required fields like (title, body and so on).

      Do you have an 'google-services.json' and appropriate content in 'build.gradle' files?

      1 Reply Last reply
      0
      • R Offline
        R Offline
        Robin Hood
        wrote on last edited by
        #15

        Yes. So I downloaded google-services.json from Firebase and 'build.gradle' from GitHub from QtFirebase.

        mmh send your content of 'build.gradle' here. Maybe that brings something ...

        1 Reply Last reply
        0
        • K Offline
          K Offline
          kuzulis
          Qt Champions 2020
          wrote on last edited by
          #16

          @Robin-Hood said in Push Notifications in QT:

          mmh send your content of 'build.gradle' here.

          buildscript {
              repositories {
                  jcenter()
                  google()
                  maven { url 'https://maven.google.com' }
              }
          
              dependencies {
                  classpath 'com.android.tools.build:gradle:3.1.3'
                  classpath 'com.google.gms:google-services:4.0.2'
              }
          }
          
          allprojects {
              repositories {
                  jcenter()
                  google()
                  maven { url 'https://maven.google.com' }
          
                  flatDir {
                      dirs "$System.env.GOOGLE_FIREBASE_SDK" + "/libs/android"
                  }
              }
          }
          
          apply plugin: 'com.android.application'
          apply plugin: 'com.google.gms.google-services'
          
          dependencies {
              implementation fileTree(dir: 'libs', include: ['*.jar'])
              implementation 'com.google.android.gms:play-services-base:15.0.1'
              implementation 'com.google.firebase:firebase-core:16.0.1'
              implementation 'com.google.firebase:firebase-messaging:17.1.0'
              implementation 'com.google.firebase.messaging.cpp:firebase_messaging_cpp@aar'
          }
          
          android {
              /*******************************************************
               * The following variables:
               * - androidBuildToolsVersion,
               * - androidCompileSdkVersion
               * - qt5AndroidDir - holds the path to qt android files
               *                   needed to build any Qt application
               *                   on Android.
               *
               * are defined in gradle.properties file. This file is
               * updated by QtCreator and androiddeployqt tools.
               * Changing them manually might break the compilation!
               *******************************************************/
          
              compileSdkVersion androidCompileSdkVersion.toInteger()
          
              buildToolsVersion androidBuildToolsVersion
          
              sourceSets {
                  main {
                      manifest.srcFile 'AndroidManifest.xml'
                      java.srcDirs = [qt5AndroidDir + '/src', 'src', 'java']
                      aidl.srcDirs = [qt5AndroidDir + '/src', 'src', 'aidl']
                      res.srcDirs = [qt5AndroidDir + '/res', 'res']
                      resources.srcDirs = ['src']
                      renderscript.srcDirs = ['src']
                      assets.srcDirs = ['assets']
                      jniLibs.srcDirs = ['libs']
                 }
              }
          
              lintOptions {
                  abortOnError false
              }
          
              applicationVariants.all { variant ->
                  variant.outputs.all {
                      outputFileName = "../" + outputFileName
                  }
              }
          } 
          
          1 Reply Last reply
          1
          • R Offline
            R Offline
            Robin Hood
            wrote on last edited by
            #17

            Unfortunately that did not work. I am now trying to continue my project using qtcloudmessaging
            In the instructions it says under point 5:
            "First install QtCloudMessaging from the command line:
            qmake "CONFIG + = Embedded-Kaltiot Firebase" make make install "

            I do not know how do I install it from the command line. ... I use windows 10

            1 Reply Last reply
            0
            • R Offline
              R Offline
              Robin Hood
              wrote on last edited by
              #18

              So I think I found where it is to install QtCloudMessaging. You can see it in the first picture. I hope that was right.
              But the compiler is still nagging :/

              I have copy the compiler report:

              C:\Users\Robin\QtProjects\build-qtcloudmessaging-Android_f_r_armeabi_v7a_GCC_4_9_Qt_5_11_1_for_Android_armv7-Debug\lib\libQt5CloudMessaging.so konnte nicht gefunden werden
              move libQt5CloudMessaging.so ..\..\lib\ 
              process_begin: CreateProcess(NULL, move libQt5CloudMessaging.so "..\..\lib ", ...) failed.
              make (e=2): Das System kann die angegebene Datei nicht finden.
              
              make[2]: [..\..\lib\libQt5CloudMessaging.so] Error 2 (ignored)
              
              …
              
              C:\Users\Robin\QtProjects\qtcloudmessaging\src\cloudmessagingembeddedkaltiot\qcloudmessagingembeddedkaltiotclient.cpp
              In file included from C:\Users\Robin\QtProjects\qtcloudmessaging\src\cloudmessagingembeddedkaltiot\qcloudmessagingembeddedkaltiotclient.cpp:29:0:
              C:\Users\Robin\QtProjects\qtcloudmessaging\src\cloudmessagingembeddedkaltiot\qcloudmessagingembeddedkaltiotclient.h:32:45: fatal error: QtCloudMessaging/QtCloudMessaging: No such file or directory
              #include <QtCloudMessaging/QtCloudMessaging>
              ^
              compilation terminated.
              make[2]: *** [.obj\qcloudmessagingembeddedkaltiotclient.obj] Error 1
              make[1]: *** [sub-cloudmessagingembeddedkaltiot-make_first] Error 2
              make[2]: Leaving directory `C:/Users/Robin/QtProjects/build-qtcloudmessaging-Android_f_r_armeabi_v7a_GCC_4_9_Qt_5_11_1_for_Android_armv7-Debug/src/cloudmessagingembeddedkaltiot'
              make[1]: Leaving directory `C:/Users/Robin/QtProjects/build-qtcloudmessaging-Android_f_r_armeabi_v7a_GCC_4_9_Qt_5_11_1_for_Android_armv7-Debug/src'
              make: *** [sub-src-make_first] Error 2
              16:12:54: Der Prozess "C:\Users\Robin\android-ndk-r17b\prebuilt\windows-x86_64\bin\make.exe" wurde mit dem Rückgabewert 2 beendet.
              Fehler beim Erstellen/Deployment des Projekts qtcloudmessaging (Kit: Android für armeabi-v7a (GCC 4.9, Qt 5.11.1 for Android armv7))
              Bei der Ausführung von Schritt "Make"
              
              

              If you want to help me, I think it would be easiest if you look at the manual -> qtcloudmessaging
              :)

              Here are three more pictures. Maybe they will help you with troubleshooting:

              1_1537282114782_Screenshot (13).png

              2_1537282114782_Screenshot (14).png

              0_1537282114780_Screenshot (12).png

              jsulmJ 1 Reply Last reply
              0
              • R Robin Hood

                So I think I found where it is to install QtCloudMessaging. You can see it in the first picture. I hope that was right.
                But the compiler is still nagging :/

                I have copy the compiler report:

                C:\Users\Robin\QtProjects\build-qtcloudmessaging-Android_f_r_armeabi_v7a_GCC_4_9_Qt_5_11_1_for_Android_armv7-Debug\lib\libQt5CloudMessaging.so konnte nicht gefunden werden
                move libQt5CloudMessaging.so ..\..\lib\ 
                process_begin: CreateProcess(NULL, move libQt5CloudMessaging.so "..\..\lib ", ...) failed.
                make (e=2): Das System kann die angegebene Datei nicht finden.
                
                make[2]: [..\..\lib\libQt5CloudMessaging.so] Error 2 (ignored)
                
                …
                
                C:\Users\Robin\QtProjects\qtcloudmessaging\src\cloudmessagingembeddedkaltiot\qcloudmessagingembeddedkaltiotclient.cpp
                In file included from C:\Users\Robin\QtProjects\qtcloudmessaging\src\cloudmessagingembeddedkaltiot\qcloudmessagingembeddedkaltiotclient.cpp:29:0:
                C:\Users\Robin\QtProjects\qtcloudmessaging\src\cloudmessagingembeddedkaltiot\qcloudmessagingembeddedkaltiotclient.h:32:45: fatal error: QtCloudMessaging/QtCloudMessaging: No such file or directory
                #include <QtCloudMessaging/QtCloudMessaging>
                ^
                compilation terminated.
                make[2]: *** [.obj\qcloudmessagingembeddedkaltiotclient.obj] Error 1
                make[1]: *** [sub-cloudmessagingembeddedkaltiot-make_first] Error 2
                make[2]: Leaving directory `C:/Users/Robin/QtProjects/build-qtcloudmessaging-Android_f_r_armeabi_v7a_GCC_4_9_Qt_5_11_1_for_Android_armv7-Debug/src/cloudmessagingembeddedkaltiot'
                make[1]: Leaving directory `C:/Users/Robin/QtProjects/build-qtcloudmessaging-Android_f_r_armeabi_v7a_GCC_4_9_Qt_5_11_1_for_Android_armv7-Debug/src'
                make: *** [sub-src-make_first] Error 2
                16:12:54: Der Prozess "C:\Users\Robin\android-ndk-r17b\prebuilt\windows-x86_64\bin\make.exe" wurde mit dem Rückgabewert 2 beendet.
                Fehler beim Erstellen/Deployment des Projekts qtcloudmessaging (Kit: Android für armeabi-v7a (GCC 4.9, Qt 5.11.1 for Android armv7))
                Bei der Ausführung von Schritt "Make"
                
                

                If you want to help me, I think it would be easiest if you look at the manual -> qtcloudmessaging
                :)

                Here are three more pictures. Maybe they will help you with troubleshooting:

                1_1537282114782_Screenshot (13).png

                2_1537282114782_Screenshot (14).png

                0_1537282114780_Screenshot (12).png

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #19

                @Robin-Hood Did you add include/lib locations for qtcloudmessaging in your pro file?

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                R 1 Reply Last reply
                0
                • jsulmJ jsulm

                  @Robin-Hood Did you add include/lib locations for qtcloudmessaging in your pro file?

                  R Offline
                  R Offline
                  Robin Hood
                  wrote on last edited by
                  #20

                  @jsulm

                  I do not know. Where would I have to add that and how would that look exactly?

                  jsulmJ 1 Reply Last reply
                  0
                  • R Robin Hood

                    @jsulm

                    I do not know. Where would I have to add that and how would that look exactly?

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #21

                    @Robin-Hood Take a look at "Linking your application against the shared library" chapter in https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    R 1 Reply Last reply
                    0
                    • jsulmJ jsulm

                      @Robin-Hood Take a look at "Linking your application against the shared library" chapter in https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application

                      R Offline
                      R Offline
                      Robin Hood
                      wrote on last edited by
                      #22

                      @jsulm
                      I do not see any libs I could add. I have done it as it says in the instructions under point 6.
                      Here is the link to the instructions: QtCloudMessaging
                      So I wrote the code to several pro files:
                      QT + = cloud messaging
                      QT + = cloudmessagingfirebase

                      Before that, I added the code in my qmake scribt:
                      "CONFIG + = firebase",
                      as I the instructions under point 1 stands.
                      If you scroll something up, you can see it in the first picture.

                      jsulmJ 1 Reply Last reply
                      0
                      • R Robin Hood

                        @jsulm
                        I do not see any libs I could add. I have done it as it says in the instructions under point 6.
                        Here is the link to the instructions: QtCloudMessaging
                        So I wrote the code to several pro files:
                        QT + = cloud messaging
                        QT + = cloudmessagingfirebase

                        Before that, I added the code in my qmake scribt:
                        "CONFIG + = firebase",
                        as I the instructions under point 1 stands.
                        If you scroll something up, you can see it in the first picture.

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #23

                        @Robin-Hood said in Push Notifications in QT:

                        QT + = cloud messaging

                        it should be

                        QT + = cloudmessaging
                        

                        Shouldn't you do the include like this

                        #include <QtCloudMessaging>
                        

                        ?

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        R 1 Reply Last reply
                        1
                        • jsulmJ jsulm

                          @Robin-Hood said in Push Notifications in QT:

                          QT + = cloud messaging

                          it should be

                          QT + = cloudmessaging
                          

                          Shouldn't you do the include like this

                          #include <QtCloudMessaging>
                          

                          ?

                          R Offline
                          R Offline
                          Robin Hood
                          wrote on last edited by
                          #24

                          @jsulm

                          Yes, I was just prescribed. That's what I wrote in the code. I just downloaded the package from Githup and followed the instructions ...

                          1 Reply Last reply
                          0
                          • R Offline
                            R Offline
                            Robin Hood
                            wrote on last edited by
                            #25

                            Hello,

                            I would like to integrate the existing Qt project QtFirebase Example in another Qt project. I thought about a solution via libs (libaries). When it exists a simple method, for example with libs or other, I'm grateful for comments. Otherwise I know that you can subdivide via subdir, but I would need a step by step statement.

                            To clarify again, my point is to include push notifications in an existing Qt project. I've done the QtFirebase Example and I can get push notifications. Now I would like to integrate this functionality into another project. As mentioned earlier, it would be best if I clicked "Add to Library" within another project and the push notification feature is added.

                            Surely there must be a possibility, I am convinced of that. Request for feedback.

                            1 Reply Last reply
                            0

                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved