2016-01-19 122 views
4

我正在使用Web推送通知和Chrome,它們工作得很好。但現在我想在我的通知中提供自定義消息。我可以讓我的服務人員致電我的網站獲取內容,如https://simple-push-demo.appspot.com/所示 - 如果我希望每個收件人都能看到相同的消息,那麼這很好。使用Web推送通知從GCM獲取自定義消息

有什麼辦法可以得到GCM返回的收件人的registration_idmessage_id?如果我能得到其中任何一種,並將它們包含在服務的回調中,我可以自定義響應。

此外,有關何時可以在GCM調用中包含有效載荷的任何信息?

回答

5

registration_idmessage_id場沒有暴露,但如果用戶事先驗證到您的應用程序,任何fetch()從服務工作者服務器將包括憑證(和會話信息),你可以用它來識別它們。

如果這不適合您的情況,您可以將用戶/會話信息存儲在IndexedDB中。

有效負載即將推出 - 可能是基於Web Push協議的Chrome 50或51。這有點額外的開銷,並且需要配置(必需的)加密。

+0

我發送2條消息給'用戶A':'m1'和'm2'。在客戶端,我收到2條消息,沒有任何信息。我可以告訴服務器我是'用戶A',但服務器如何知道它是否應該返回'm1'或'm2'的信息? – deathangel908

1

這是可能的,但我不會這樣做,因爲它特定於GCM,而其他瀏覽器使用其他服務。

您可以爲每個用戶創建一個唯一的ID(如我們在Mercurius中所做的)並將其存儲在IndexedDB中,也可以將整個端點URL用作ID。

這裏的片段,以獲得registration_id

self.registration.pushManager.getSubscription() 
.then(function(subscription) { 
    if (subscription) { 
    var endpoint = subscription.endpoint; 
    var endpointParts = endpoint.split('/'); 
    var gcmRegistrationID = endpointParts[endpointParts.length - 1]; 

    console.log(gcmRegistrationID); 
    } 
}); 

P.S:它返回一個承諾,所以一定要確保你的服務人員等待的承諾得到解決。