我可以将 OneSignal 代币导入 FCM 吗?
Can I import OneSignal tokens to FCM?
我有几千个 OneSignal web push 通知令牌我想导入到 FCM。有办法吗?
我看到这个端点需要 OneSignal 给我的 https://fcm.googleapis.com/fcm/send/...key...
端点,但我不知道要为 auth
和 p256dh
.[=14= 输入什么]
所以是的,这是可以做到的。首先,您需要联系 OneSignal 支持并为您的应用获取 public 和私人 VAPID 密钥。您仪表板中的每个应用都有不同的集合。
接下来您需要 API 调用 OneSignal 以便将用户导出到 CSV 文件中。
您可以在文档中找到 API url 并使用 curl 或使用您喜欢的语言。我使用 Node + Axios 来打电话。 API 调用将为您提供 link 以下载 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 Service worker 数据处理。
您可以看到格式从第 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)
这比 Dan 的回答复杂得多。如果您的用户不订阅您自己的 service worker,它将无法工作。 OS 将在发生 'unknown' 错误时发送其默认通知,即使您传递了不同的负载,它也会将 "You have new updates" 作为通知发送给用户。您还需要将:"custom": { "i": uuidv1() }
传递给您的有效负载才能使其正常工作。 (不要忘记先通过 npm 安装 uuid 并调用它)。查看 this link,您将了解还需要传递哪些有效负载道具。
我有几千个 OneSignal web push 通知令牌我想导入到 FCM。有办法吗?
我看到这个端点需要 OneSignal 给我的 https://fcm.googleapis.com/fcm/send/...key...
端点,但我不知道要为 auth
和 p256dh
.[=14= 输入什么]
所以是的,这是可以做到的。首先,您需要联系 OneSignal 支持并为您的应用获取 public 和私人 VAPID 密钥。您仪表板中的每个应用都有不同的集合。
接下来您需要 API 调用 OneSignal 以便将用户导出到 CSV 文件中。
您可以在文档中找到 API url 并使用 curl 或使用您喜欢的语言。我使用 Node + Axios 来打电话。 API 调用将为您提供 link 以下载 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 Service worker 数据处理。
您可以看到格式从第 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)
这比 Dan 的回答复杂得多。如果您的用户不订阅您自己的 service worker,它将无法工作。 OS 将在发生 'unknown' 错误时发送其默认通知,即使您传递了不同的负载,它也会将 "You have new updates" 作为通知发送给用户。您还需要将:"custom": { "i": uuidv1() }
传递给您的有效负载才能使其正常工作。 (不要忘记先通过 npm 安装 uuid 并调用它)。查看 this link,您将了解还需要传递哪些有效负载道具。