使用 QML 发送 OneSignal 通知
sending OneSignal notification with QML
我正在将 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
link 中,它们表明我可以通过以下方式使用 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
但除了测试目的之外,我将如何分配特定标签并在我的应用程序中按下按钮(或其他事件)时触发通知?
我了解实施通知所需的所有信息 - 但我无法开始理解它! :(
任何帮助将不胜感激,即使在阅读我正在努力的文档时也是如此。
我已经使用下面的代码完成了这项工作,显示的是当在我的应用程序的其他地方按下 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"
为了安全起见,我明白这可能仍然不是最安全的,而且再次重申 - 如果有人能告诉我如何改进它,那将是一个巨大的帮助!
谢谢
我正在将 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
link 中,它们表明我可以通过以下方式使用 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
但除了测试目的之外,我将如何分配特定标签并在我的应用程序中按下按钮(或其他事件)时触发通知?
我了解实施通知所需的所有信息 - 但我无法开始理解它! :(
任何帮助将不胜感激,即使在阅读我正在努力的文档时也是如此。
我已经使用下面的代码完成了这项工作,显示的是当在我的应用程序的其他地方按下 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"
为了安全起见,我明白这可能仍然不是最安全的,而且再次重申 - 如果有人能告诉我如何改进它,那将是一个巨大的帮助!
谢谢