【问题标题】:Can I import OneSignal tokens to FCM?我可以将 OneSignal 令牌导入 FCM 吗?
【发布时间】:2018-12-09 17:54:36
【问题描述】:

我有数千个 OneSignal 网络推送 通知令牌要导入到 FCM。有没有办法做到这一点?

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

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

【问题讨论】:

  • 能否请您用 iOS 或 Android 标记问题,谢谢。
  • 我实际上指的是网络推送通知,抱歉我应该提到
  • 啊,感谢您更新问题!
  • 嘿,你有没有想过这个问题?遇到同样的问题
  • @jiroch 将我的程序放在答案中

标签: firebase firebase-cloud-messaging onesignal


【解决方案1】:

所以是的,这是可以做到的。首先,您需要联系 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)

【讨论】:

    【解决方案2】:

    这比丹的回答要复杂得多。如果您的用户不订阅您自己的 service worker,它将无法工作。当发生“未知”错误时,操作系统将发送其默认通知,即使您传递了不同的有效负载,它也会将“您有新的更新”作为通知发送给用户。您还需要将:"custom": { "i": uuidv1() } 传递给您的有效负载以使其工作。 (别忘了先通过 npm 安装 uuid 并调用它)。查看this 链接,您将了解需要传递哪些其他有效载荷道具。

    【讨论】:

    • 是的,这涉及到更多。幸运的是,格式非常简单。我在下面的答案中添加了一些示例代码。
    猜你喜欢
    • 1970-01-01
    • 2021-01-02
    • 2018-08-02
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多