aboutsummaryrefslogtreecommitdiffstats
path: root/src/cloudmessagingfirebase/qcloudmessagingfirebaserest.cpp
diff options
context:
space:
mode:
authorAri Salmi <snowgrains@snowgrains.com>2017-07-15 00:37:31 +0300
committerSamuli Piippo <samuli.piippo@qt.io>2017-11-30 09:58:46 +0000
commitd683d8b556f924a67aaa0012c417f9346b46ec1a (patch)
tree02936aa4c1d890299d7787de683b584c16f4d259 /src/cloudmessagingfirebase/qcloudmessagingfirebaserest.cpp
parent8737866cee70b782ce862a450d0f8db1917be0df (diff)
Initial import
Change-Id: I6a868ab4b9f418114e52f57c5b9db2b54f350a4f Reviewed-by: Samuli Piippo <samuli.piippo@qt.io>
Diffstat (limited to 'src/cloudmessagingfirebase/qcloudmessagingfirebaserest.cpp')
-rw-r--r--src/cloudmessagingfirebase/qcloudmessagingfirebaserest.cpp119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/cloudmessagingfirebase/qcloudmessagingfirebaserest.cpp b/src/cloudmessagingfirebase/qcloudmessagingfirebaserest.cpp
new file mode 100644
index 0000000..df27b6a
--- /dev/null
+++ b/src/cloudmessagingfirebase/qcloudmessagingfirebaserest.cpp
@@ -0,0 +1,119 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCloudMessaging module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3-COMM$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCloudMessaging/QtCloudMessaging>
+#include "qtcloudmessagingglobal.h"
+#include "qcloudmessagingfirebaserest.h"
+
+#include <QByteArray>
+
+/* REST API INTERFACE */
+const QString SERVER_ADDRESS = QStringLiteral("https://fcm.googleapis.com/fcm/send");
+
+/*!
+ * \brief FirebaseRestServer::sendToDevice
+ * \param token
+ * \param data
+ * \return
+ */
+bool FirebaseRestServer::sendToDevice(const QString &token, const QByteArray &data)
+{
+ QString data_to_send = "{\"to\":\"" + token + "\",\"data\":" + QString::fromUtf8(data) + "}";
+ QString url = SERVER_ADDRESS;
+ QUrl uri(url);
+ m_auth_key = "key=" + m_auth_key;
+ QNetworkRequest request(uri);
+ QString authHeader = QString::fromLatin1("Authorization");
+ request.setHeader(QNetworkRequest::ContentTypeHeader, QString::fromLatin1("application/json"));
+ request.setRawHeader(authHeader.toLocal8Bit(), m_auth_key.toLocal8Bit());
+
+ return sendMessage(POST_MSG,
+ REQ_SEND_BROADCAST_DATA_TO_CHANNEL,
+ request,
+ data_to_send.toUtf8(),
+ true,
+ QString());
+}
+
+/*!
+ * \brief FirebaseRestServer::sendBroadcast
+ * \param channel
+ * \param data
+ * \return
+ */
+bool FirebaseRestServer::sendBroadcast(const QString &channel, const QByteArray &data)
+{
+ QString mod_data = QString::fromUtf8(data);
+ if (mod_data[0] == '{')
+ mod_data.remove(0, 1);
+ if (mod_data[mod_data.length() - 1] == '}')
+ mod_data.remove(mod_data.length() - 1, 1);
+
+ QString data_to_send = "{\"to\":\"/topics/" + channel + "\"," + mod_data + "}";
+
+ QString url = SERVER_ADDRESS;
+ QUrl uri(url);
+ QString auth = "key=" + m_auth_key;
+ QNetworkRequest request(uri);
+ QString authHeader = QString::fromLatin1("Authorization");
+ request.setHeader(QNetworkRequest::ContentTypeHeader, QString::fromLatin1("application/json"));
+ request.setRawHeader(authHeader.toLocal8Bit(), auth.toLocal8Bit());
+
+ return sendMessage(POST_MSG,
+ REQ_SEND_BROADCAST_DATA_TO_CHANNEL,
+ request,
+ data_to_send.toUtf8(),
+ true,
+ QString());
+
+}
+
+/*!
+ * \brief FirebaseRestServer::xmlHttpRequestReply
+ * \param reply
+ */
+void FirebaseRestServer::xmlHttpRequestReply(QNetworkReply *reply)
+{
+ getNetworkManager()->disconnect(SIGNAL(finished(QNetworkReply *)));
+ QString m_msg_uuid = reply->property("uuid").toString();
+ int req_id = reply->property("req_id").toInt();
+
+ if (reply->error()) {
+ emit xmlHttpRequestError(reply->errorString());
+
+ }
+
+ // Ok message, lets proceed.
+
+ QByteArray data(reply->readAll());
+
+ emit xmlHttpRequestReplyData(data);
+
+ reply->deleteLater();
+ clearMessage(m_msg_uuid);
+}