我有数千个要导入到FCM的OneSignal 网络推送通知令牌。有办法吗?
我看到了这个端点,它需要OneSignal给我的https://fcm.googleapis.com/fcm/send/...key...
端点,但是我不知道要为auth
和p256dh
输入什么。
答案 0 :(得分:3)
是的,可以这样做。首先,您需要联系OneSignal支持人员,并获取应用程序的公共和私有VAPID密钥。信息中心中的每个应用都有不同的设置。
接下来,您需要对OneSignal进行API调用,以便将用户导出为CSV文件。
您可以在文档中找到API网址,并使用curl或使用您喜欢的语言。我使用Node + Axios拨打电话。该API调用将为您提供下载CSV的链接。
这里是文档https://documentation.onesignal.com/reference#csv-export
您要确保在请求中添加“ extra_fields”参数,并添加“ web_auth”和“ web_p256”字段。 CSV将为您提供另一个难题,即标识符列中的端点URL。
一旦掌握了所有这些信息,就可以使用诸如web-push之类的Node库来发送推送
https://github.com/web-push-libs/web-push
希望有帮助!
编辑
正如Cedric所说,实际的推送有效负载要稍微复杂一点,因为您需要遵守OneSignal Service工作程序的数据处理。
您可以看到格式从第here行313开始
如果您正在使用web-push之类的节点库来发送推送有效载荷,则对于标准推送给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)
答案 1 :(得分:1)
比丹的答案要复杂得多。如果您的用户未订阅您自己的服务工作者,那么它将无法正常工作。发生“未知”错误时,操作系统将发送其默认通知,即使您传递了不同的有效负载,它也会向用户发送“您有新更新”作为通知。您还需要传递:"custom": { "i": uuidv1() }
到您的有效负载才能正常工作。 (不要忘了先通过npm安装uuid并调用它)。查看this链接,您将确定需要传递哪些其他有效载荷道具。