FAQ
最新更新:2023-02-27

哪些平台支援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.檢查網頁通知欄權限開啓情況
image.png
2.檢查瀏覽器應用程式通知權限開啓情況
Windows 通知設定:

  • 關閉焦點輔助,詳情參考 微軟官方文檔
  • 檢查設定>通知和操作> 打開從應用程式和其他發件人獲取通知。確保您的站點和瀏覽器也已啓用。本文中的更多詳細信息參考 微軟官方文檔


macOS 通知設定:

  • 在“係統偏好設定”>“通知”>“Chrome”或所選瀏覽器中,確保“允許通知”已打開。
  • 在“係統偏好設定”>“通知”>“焦點”>“請勿打擾和睡眠”中,確保此模式未打開或您在允許通知的時間內。
  • macOS 在右上角菜單 > 嚮上滾動中也有臨時的“請勿打擾”通知設定。


3.瀏覽器廠商不穩定,切換Engagelab 通道優先下發
image.png

{ "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" } }
          {
    "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瀏覽器權限,註意允許開關是否開啓,正常情況如圖:
9004867709_96109683317_0631CB28-AA8C-4DAE-9E31-64DFAD260D96.png
第二步:點選檢查推播服務狀態與瀏覽器通知權限,正常情況如圖:
image.png
第三步:點選 Safari 瀏覽器 - 偏好設定
image.png
點選網站-點選通知,查看通知中心網站是否允許,正常情況如圖:
9004867709_96109614465_4CFFC6A4-8426-4B27-8EB1-6DDC4DB66B3E.png

特別註意:
1、點選停止推播,將會收不到 Engagelab 推播訊息,需要刷新頁面
2、一個域名配置了多個html頁面,請不要移除通知中心的網站權限,移除後html頁面都將收不到通知(需用戶找到主頁面,重新獲取網站通知權限)

為什麼不同瀏覽器,regid 會相同?

答:同一個應用程式配置的集成域名,同一個用戶 userStr,就會生成同一個 rid,與是否同一個瀏覽器無關
檢查是否是同一個用戶的方法如下:查看 html 源碼,找到初始化函數查看。
image.png

關於 user_str 用戶唯一標識說明

  1. 初始化時必須填寫唯一的字串用來生成唯一的 UID,該 UID 是推送的身份識別碼,與設備無關。
  2. 當用戶使用同一 user_str 會被識別為同一用戶,在不同瀏覽器或設備上訂閱,會被替換為最新訂閱信息作為消息發送。例如 用戶 A 先後在瀏覽器 a1 a2 a3 用同一 user_str 訂閱,理論上只有最後訂閱的 a3 能收到消息,防止同一用戶收到多條消息及消息多發。後台對同一 UID 永遠只保存最新訂閱信息。
  3. 消息訂閱可以被取消,SDK 有提供取消訂閱接口。該取消訂閱接口,只會取消 UID 與訂閱信息的綁定關係,不會修改瀏覽器的通知權限。
  4. 理論上 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();
    
            
    此代碼塊在浮窗中顯示
在文档中心打开