我可以将OneSignal令牌导入FCM吗?

时间:2018-12-09 17:54:36

标签: firebase firebase-cloud-messaging onesignal

我有数千个要导入到FCM的OneSignal 网络推送通知令牌。有办法吗?

我看到了这个端点,它需要OneSignal给我的https://fcm.googleapis.com/fcm/send/...key...端点,但是我不知道要为authp256dh输入什么。

https://developers.google.com/instance-id/reference/server#create_registration_tokens_for_apns_tokens

2 个答案:

答案 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链接,您将确定需要传递哪些其他有效载荷道具。