所以是的,这是可以做到的。首先,您需要联系 OneSignal 支持并为您的应用获取公共和私有 VAPID 密钥。仪表板中的每个应用都有不同的集合。
接下来,您需要对 OneSignal 进行 API 调用,以便将用户导出到 CSV 文件中。
您可以在文档中找到 API url 并使用 curl 或使用您喜欢的语言。我使用 Node + Axios 拨打电话。 API 调用将为您提供下载 CSV 的链接。
这里是文档https://documentation.onesignal.com/reference#csv-export
您要确保将“extra_fields”参数添加到您的请求中,并添加“web_auth”和“web_p256”字段。 CSV 将为您提供另一个难题,即标识符列中的端点 url。
获得所有这些信息后,您现在可以使用库(例如 Node 的 web-push)发送推送
https://github.com/web-push-libs/web-push
希望有帮助!
编辑
正如 Cedric 所说,实际推送负载稍微复杂一些,因为您需要遵守 OneSignal 服务工作者数据处理。
你可以看到从第 313 行开始的格式here
如果您使用像 web-push 这样的库来为 Node 发送推送负载,您的负载将被格式化为类似这样的格式,以便标准推送到 OneSignal 服务工作者。
const uuidv1 = require('uuid/v1')
const webpush = require('web-push')
let subscription = {
endpoint: 'USER ENDPOINT URL',
keys: {
auth: 'USER AUTH KEY',
p256dh: 'USER P256 KEY'
}
}
let vapid = { private: 'VAPID PRIVATE KEY', public: 'VAPID PUBLIC KEY' }
// Format Message for OneSignal Service Worker
let notification = JSON.stringify({
custom: {
i: uuidv1(), //Generate UUID for the OneSignal Service worker to consume
u: 'CLICK URL'
},
title: 'TOP TITLE',
alert: 'MESSAGE BODY',
icon: 'ICON IMAGE URL'
})
webpush.setVapidDetails('mailto: sendError@YourEmail.com', vapid.public, vapid.private)
webpush.sendNotification(subscription, notification)