代码之家  ›  专栏  ›  技术社区  ›  Tallboy

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

  •  2
  • Tallboy  · 技术社区  · 6 年前

    我有几千个一号信号 网络推送 我要导入到FCM的通知令牌。有办法吗?

    我看到这个端点需要 https://fcm.googleapis.com/fcm/send/...key... 一个信号给我的终点,但我不知道该放什么。 auth p256dh .

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Cedric Hadjian    6 年前

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

        2
  •  3
  •   Dan    6 年前

    所以可以这样做。首先,您需要联系OneSignal支持部门,并获取应用程序的公共和私有vapid密钥。仪表板中的每个应用程序都有不同的设置。

    接下来,您需要对OneSignal进行API调用,以便将用户导出到CSV文件中。

    您可以在文档中找到API URL,并使用curl或您最喜欢的语言。我使用node+axios进行调用。API调用将为您提供下载csv的链接。

    这是文件 https://documentation.onesignal.com/reference#csv-export

    您需要确保在添加了“web_auth”和“web_p256”字段的情况下,将“extra_fields”参数添加到您的请求中。csv将为您提供另一块拼图,即其标识符列中的端点URL。

    一旦您拥有了所有这些信息,现在就可以使用一个库(如Web push for node)发送推送。

    https://github.com/web-push-libs/web-push

    希望有帮助!

    编辑

    正如Cedric所说,实际的push有效负载稍微复杂一点,因为您需要遵守OneSignal服务工作者的数据处理。

    您可以看到从第313行开始的格式设置。 here

    如果你使用的是像 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)