使用QML发送OneSignal通知

时间:2019-05-09 19:53:34

标签: qt qml http-post onesignal v-play

我正在将OneSignal集成到用Felgo构建的应用程序中,在构建用于测试目的的应用程序时,我能够从OneSignal仪表板手动发送通知,但是显然,我希望这些通知在自动运行时自动发送应用中发生了一个事件。

我真的很努力地了解如何使它正常工作,我已经阅读了以下两篇文章:

然后我认为将这些结合在一起将是我的解决之道?类似于:

AppButton {
    id: button
    onClicked: {
        //other onClicked actions,
        HttpRequest
        .post("https://onesignal.com/api/v1/notifications")
        .set('Content-Type', 'application/json')
        .send({ title: "post title", body: "post body" })
        .then(function(res) {
            console.log(res.status);
            console.log(JSON.stringify(res.header, null, 4));
            console.log(JSON.stringify(res.body, null, 4));
        })
        .catch(function(err) {
            console.log(err.message)
            console.log(err.response)
        });
    }
}

但是我到底要如何发送到特定的tags以获得针对性的通知?

在上面的Felgo OneSignal链接中,他们表明我可以通过以下方式测试curl的推送通知:

curl --include \
    --request POST \
    --header "Content-Type: application/json" \
    --header "Authorization: Basic <ONESIGNAL-REST-API-KEY>" \
    --data-binary '{
     "app_id": "<ONESIGNAL-APP-ID>",
     "contents": { "en": "Message" },
     "tags": [{"key": "userId", "relation": "=", "value": "1"}]
    }' \
    https://onesignal.com/api/v1/notifications

但是出于测试目的,我该如何分配特定标签并在我的应用程序中按下按钮(或其他事件)时触发通知?

我了解实现通知所需的所有信息,但是我无法理解它! :(

任何帮助都将受到极大的赞赏,即使在阅读文档时,我也在苦苦挣扎。

1 个答案:

答案 0 :(得分:1)

我已经使用下面的代码来完成这项工作,显示的是在应用中的其他位置按下AppButton时发送的信号的最终结果。

我没有自己的Web服务来通过它来承载我的通知,但是出于安全原因,我的REST密钥不应放在我的代码中。

为解决这个问题,我将One Signal Rest API密钥添加到了Firebase数据库的一个分支中(我也在我的应用程序中使用了该分支),该分支只能由授权用户访问,然后将其下载到实例上。发出请求,之后将其更改为其他字符串。

property var osKey

firebaseDb.getValue("keys/OSkey", {
                         }, function(success, key, value) {
                             if(success){
                             osKey = value;
                             HttpRequest
                               .post("https://onesignal.com/api/v1/notifications")
                               .set('Content-Type', 'application/json')
                               .set("Authorization", "Basic " + osKey)
                               .send({
                                   "app_id": "<MY_APP_ID>",
                                   "contents": { "en": "MESSAGE" },
                                   "tags":  [
                                   // the specific tags I want to send too
                                       {"key": "groupAdmin", "relation": "=", "value": "1"},
                                       {"key": "group", "relation": "=", "value": groupName}
                                   ]
                               })
                               .then(function(res) {
                                  console.log(res.status);
                                  console.log(JSON.stringify(res.header, null, 4));
                                  console.log(JSON.stringify(res.body, null, 4));
                               })
                               .catch(function(err) {
                                  console.log(err.message)
                                  console.log(err.response)
                               });
                            }
                         })
            osKey = "Nothing to see here"

为了证券起见,我知道这可能仍然不是最安全的,并且再次重申-如果有人可以告诉我如何改善这一点,那将是巨大的帮助!

谢谢