哪些平台支援WebPush?
按操作係統分類的瀏覽器支援
註:隱身模式、私人瀏覽模式和訪客瀏覽器模式不支援網路推播。
瀏覽器 | Windows PC | macOS | Android | iOS (iPhone, iPad) |
---|---|---|---|---|
Chrome | Yes | Yes | Yes | No |
Firefox | Yes | Yes | Yes | No |
Safari | No | Yes | No | No |
Microsoft Edge | Yes | Yes | No | No |
Opera | Yes | Yes | Yes | No |
註 1: Microsoft Edge(2019年更新)、Opera、三星瀏覽器、Yandex 和 UC 瀏覽器等都是基於 Chromium 的瀏覽器,在 Engagelab 中會被標記為 Chrome。
註 2: Internet Explorer 不再接受功能更新。微軟已將瀏覽器開發轉嚮 Edge 平台。
按瀏覽器版本支援
瀏覽器 | Windows | macOS | Android |
---|---|---|---|
Chrome | Chrome 42+ | Chrome 42+ | Chrome 105+ |
Firefox | Firefox v44+ | Firefox v44+ | Firefox v104+ |
Apple Safari | / | Safari V11.1+ | / |
Opera | Opera v29+ | Opera v29+ | Opera mobile v64+ |
Microsoft Edge | Edge v17+ | Edge v17+ | / |
如果關閉瀏覽器,用戶能收到通知嗎?
- 走 engagelab 通道時,需要打開網站時才可以收到通知。
- 走係統通道時,可以在關閉瀏覽器時收到通知,其中不同平台上的行為不同,詳情參見下錶:
瀏覽器 | Windows | macOS |
---|---|---|
Chrome | 是,需瀏覽器進程在後台 | 是,需瀏覽器進程在後台 |
Firefox | 是,需瀏覽器進程在後台 | 是,需瀏覽器進程在後台 |
Safari | / | 是 |
Opera | 是,需瀏覽器進程在後台 | 是,需瀏覽器進程在後台 |
Microsoft Edge | 是,需瀏覽器進程在後台 | 是,需瀏覽器進程在後台 |
在 Windows 上,所有視窗都關閉,瀏覽器若仍在後台運行,即可以收到係統通知,若瀏覽器進程已經被關閉,則不會收到係統通知。
在 Mac OS X 上,即使所有視窗都被關閉,大部分瀏覽器進程仍會在後台運行,即可以收到係統通知,若瀏覽器進程被強製退出,則不會收到係統通知。Safari 無需運行即可接收通知,因為它們會直接傳送到操作係統,用戶需要先註冊 Safari 通知,後續即使 Safari 完全關閉也能收到通知。
通知的有效期為 3 天,3 天後即永久丟失。 例如,假設用戶應該收到 Firefox 推播通知,但 Firefox 已關閉,如果用戶在 3 天內打開 Firefox,則用戶將僅收到最後一條未過期的推播通知;如果用戶在 3 天後打開 Firefox,將不會收到 3 天前傳送的推播通知。
通知收不到排查方式
1.檢查網頁通知欄權限開啓情況
2.檢查瀏覽器應用程式通知權限開啓情況
Windows 通知設定:
macOS 通知設定:
- 在“係統偏好設定”>“通知”>“Chrome”或所選瀏覽器中,確保“允許通知”已打開。
- 在“係統偏好設定”>“通知”>“焦點”>“請勿打擾和睡眠”中,確保此模式未打開或您在允許通知的時間內。
- macOS 在右上角菜單 > 嚮上滾動中也有臨時的“請勿打擾”通知設定。
3.瀏覽器廠商不穩定,切換Engagelab 通道優先下發
{
"from":"web_push",
"to":{
"registration_id":[
"xxx"
]
},
"body":{
"platform":"web",
"notification":{
"web":{
"title":"web_push",
"alert":"Hi,MTPush !",
"url":"http://www.google.com",
"extras":{
"web-key1":"web-value1"
}
}
},
"options":{
"time_to_live":30,
"third_party_channel":{
"w3push":{
"distribution":"mtpush"
}
}
},
"request_id":"12345678",
"custom_args":"business info"
}
}
safari 瀏覽器無法彈出通知?
第一步:請檢查Safari瀏覽器權限,註意允許開關是否開啓,正常情況如圖:
第二步:點選檢查推播服務狀態與瀏覽器通知權限,正常情況如圖:
第三步:點選 Safari 瀏覽器 - 偏好設定
點選網站-點選通知,查看通知中心網站是否允許,正常情況如圖:
特別註意:
1、點選停止推播,將會收不到 Engagelab 推播訊息,需要刷新頁面
2、一個域名配置了多個html頁面,請不要移除通知中心的網站權限,移除後html頁面都將收不到通知(需用戶找到主頁面,重新獲取網站通知權限)
為什麼不同瀏覽器,regid 會相同?
答:同一個應用程式配置的集成域名,同一個用戶 userStr,就會生成同一個 rid,與是否同一個瀏覽器無關
檢查是否是同一個用戶的方法如下:查看 html 源碼,找到初始化函數查看。
關於 user_str 用戶唯一標識說明
- 初始化時必須填寫唯一的字串用來生成唯一的 UID,該 UID 是推送的身份識別碼,與設備無關。
- 當用戶使用同一 user_str 會被識別為同一用戶,在不同瀏覽器或設備上訂閱,會被替換為最新訂閱信息作為消息發送。例如 用戶 A 先後在瀏覽器 a1 a2 a3 用同一 user_str 訂閱,理論上只有最後訂閱的 a3 能收到消息,防止同一用戶收到多條消息及消息多發。後台對同一 UID 永遠只保存最新訂閱信息。
- 消息訂閱可以被取消,SDK 有提供取消訂閱接口。該取消訂閱接口,只會取消 UID 與訂閱信息的綁定關係,不會修改瀏覽器的通知權限。
- 理論上 user_str 應與實際用戶一一對應,在某些特定情況,用戶可能是訪客模式,開發者需要顯式根據自身實際情況生成唯一的 user_str,SDK 不會自動做默認處理,避免開發者在未處理好 user_str 與用戶實際關係時,流程上未出現報錯,導致統計數據與預期情況不符。當用戶是以訪客模式時,開發者可以參考以下函數生成唯一 user_str,該函數以用戶瀏覽器為維度作為唯一身份識別碼,注意該處理方式會導致,同一用戶換瀏覽器,換設備或清除緩存時,會重新生成新 user_str。
示例函数:function randomUid() { const keyStr = 'mtWebPushRandomUid'; let uid = window.localStorage.getItem(keyStr); if (!uid) { uid = new Date().getTime().toString(36) + Math.floor(Math.random() * 10000000).toString(36); window.localStorage.setItem(keyStr, uid); } return uid; } var user_str = randomUid();
function randomUid() { const keyStr = 'mtWebPushRandomUid'; let uid = window.localStorage.getItem(keyStr); if (!uid) { uid = new Date().getTime().toString(36) + Math.floor(Math.random() * 10000000).toString(36); window.localStorage.setItem(keyStr, uid); } return uid; } var user_str = randomUid();
此代碼塊在浮窗中顯示