2016-12-26 121 views
0

我試圖訂閱PushManager來發送推送通知,但我在調用訂閱時總是收到錯誤。無法訂閱推送通知

這是我的訂閱調用

registration.pushManager.subscribe({ userVisibleOnly: true }) 
    .then(function (subscription) { /* ... */}) 
    .catch(function (err) { /* ... */}) 

沒有什麼奇怪的,你可以看到,而且呼叫總是拋出

拋出:DOMException:註冊失敗 - 推送服務錯誤

我我不確定這是爲什麼。 我已經檢查到目前爲止

  • 我在manifest.json一個gcm_sender_id屬性。
  • 通知允許在客戶端授予。
  • registration.pushManager.getSubscription()總是得到null並訂閱總是拋出上述錯誤。

我還應該看什麼?任何幫助成功訂閱推送通知是受歡迎的,順便說一下,我使用的是Chrome 55,如果您需要更多信息,請告訴我。

編輯:所有註冊碼爲hereregisterServiceWorker函數。

感謝。

回答

2

假設你已經註冊的服務人員正確,使用類似:

navigator.serviceWorker.register('/serviceworker.js', { 
       scope: '/' 
      }); 

我建議像我一樣,而不是使用的window.location.origin喜歡你,你使用相對路徑爲您服務工作者在你的代碼中做了這樣的事情,最好將服務工程文件保存在根目錄

使用此方法訂閱推送並獲取端點。

navigator.serviceWorker.ready 
      .then(function(serviceWorkerRegistration) { 
       return serviceWorkerRegistration.pushManager.subscribe({ 
        userVisibleOnly: true 
       }); 
      }) 
      .then(function(subscription) {console.log(subscription.endpoint);}); 

如果仍然不工作: - 嘗試從Chrome中註銷現有職工:// serviceworker-內部,並確保您關閉所有選項卡,當你做到這一點。

如果仍然不起作用: - 嘗試通過點擊您在Chrome瀏覽器右上角的姓名來創建新的Chrome配置文件。 (我曾遇到過這種情況)

查詢this代碼供您參考。

+0

我用'window.location.origin',因爲當有人導航到另一個路線時,我得到一個服務工作人員沒有找到錯誤,也許'範圍'選項會解決這個問題。其餘代碼相當於您的答案 –

+0

經過一番搜索後,我找到了我的解決方案。我在我的'manifest.json'文件中使用了錯誤的'gcm_sender_id'。我在Google開發者控制檯中使用了項目ID,當我[通過項目編號改變它](https:// github。com/YerkoPalma/blank-app-shell/commit/34cd59cfb37e6247f3d8bdc69b94e926753052ad#diff-4b1eb3dc48c4e16d49db5b42298fe654),它工作! –

+0

:)對你有好處!但這不應該是問題。只有當您觸發推送而不是您訂閱時,您纔會遇到錯誤的gcm_sender_id問題。我猜測根範圍爲你做了竅門! :) –