簡體   English   中英

我可以將 OneSignal 令牌導入 FCM 嗎?

[英]Can I import OneSignal tokens to FCM?

我有幾千個 OneSignal web 推送通知令牌要導入 FCM。 有沒有辦法做到這一點?

我看到這個端點需要 OneSignal 給我的https://fcm.googleapis.com/fcm/send/...key...端點,但我不知道要為authp256dh

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

所以可以的。 首先,您需要聯系OneSignal支持人員,並獲取應用程序的公共和私有VAPID密鑰。 信息中心中的每個應用都有不同的設置。

接下來,您需要對OneSignal進行API調用,以便將用戶導出為CSV文件。

您可以在文檔中找到API網址,並使用curl或使用自己喜歡的語言。 我使用Node + Axios撥打電話。 API調用將為您提供下載CSV的鏈接。

這是文檔https://documentation.onesignal.com/reference#csv-export

您要確保在添加了“ web_auth”和“ web_p256”字段的請求中添加“ extra_fields”參數。 CSV將為您提供另一個難題,即標識符列中的端點URL。

掌握了所有這些信息之后,您現在可以使用諸如web-push之類的庫來發送推送

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

希望有幫助!

編輯

正如Cedric所說,實際的推送有效負載要稍微復雜一點,因為您需要遵守OneSignal Service工作程序的數據處理。

您可以在此處從第313行看到格式

如果您正在使用諸如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的答案復雜得多。 如果您的用戶未訂閱您自己的服務工作者,那么它將無法正常工作。 發生“未知”錯誤時,操作系統將發送其默認通知,即使您傳遞了不同的有效負載,它也會向用戶發送“您有新更新”作為通知。 您還需要將: "custom": { "i": uuidv1() }傳遞給您的有效負載才能使其正常工作。 (不要忘了先通過npm安裝uuid並調用它)。 查看鏈接,您將確定需要傳遞哪些其他有效載荷道具。

Dan 的回答解釋了如何使用第三方推送庫,而不是 FCM 本身。

我已將 OneSignal 的公共和私有 VAPID 密鑰導入 Firebase 項目/項目設置/雲消息傳遞/Web 配置/Web 推送證書。

然后在 OneSignal 的 CSV 導出中找到了“標識符”列中的測試令牌,即https://fcm.googleapis.com/fcm/send/SOME_TOKEN

然后嘗試使用以下方式發送通知:

curl --ssl-no-revoke -X POST -H "Authorization: key=SERVER_KEY" -H "Content-Type: application/json" -d "{\"to\": \"SOME_TOKEN\", \"notification\": { \"title\": \"Hello\", \"alert\": \"World\", \"icon\": \"https://example.com/icon.jpg\", \"image\": \"https://example.com/icon.jpg\", \"custom\": { \"i\": \"00000000-0000-4000-8000-000000000000\", \"u\": \"https://example.com\" } }}" "https://fcm.googleapis.com/fcm/send"

但它返回“MismatchSenderId”錯誤。

還嘗試更新推送訂閱以使用導出的列 web_auth 和 web_p256: https://developers.google.com/instance-id/reference/server#update_push_subscriptions但總是收到“請求包含無效參數”錯誤。

我錯過了什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM