2017-10-12 178 views
0

我在與UWP推送通知如下問題。UWP推在前臺和後臺

場景:

  1. 前景註冊了推送通知後臺任務,但也希望被通知了進入的推動,因此它得到一個通道,與當時的通道鉤到該通道上的事件更新服務器。

  2. 推送通知進來

  3. 後臺任務啓動並執行它的工作。它還檢查通道URI是否已更改,如果已更改,則使用新的uri更新服務器。

結果:因爲後臺任務更新與前臺應用程序在聽什麼不同的通道URI的服務器在通道上

前臺應用程序不再接收傳入的推動。

什麼是前臺應用程序繼續監聽推送通知後的URI可能改變的正確方法?


澄清更新問題:

步驟1前景的應用程序代碼:

var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); 
channel.PushNotificationReceived += OnPushNotificationReceived; 
//<update server with channel.Uri 

步驟2後臺任務啓動並還檢查了新的頻道uri:

var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); 
//update server with channel uri 

問題

如果步驟2信道URI更改則即使處理程序步驟1永遠不會被再次調用。

回答

0

因爲後臺任務使用與前臺應用程序正在監聽的不同通道uri更新服務器。

號你的理解是不正確的。我們首先檢查如何發送推送通知的步驟:

  1. 您的應用程序從通用Windows平臺請求推送通知通道。
  2. Windows要求WNS創建通知通道。該通道以統一資源標識符(URI)的形式返回給主叫設備。
  3. 通知通道URI由Windows返回給您的應用程序。
  4. 您的應用將URI發送到您自己的雲服務。然後,您將URI存儲在您自己的雲服務中,以便在發送通知時可以訪問URI。
  5. 當您的雲服務有更新要發送時,它會使用通道URI通知WNS。這通過通過安全套接字層(SSL)發佈HTTP POST請求來完成,包括通知有效載荷。這一步需要認證。
  6. WNS收到請求並將通知路由到適當的設備。

enter image description here

然後,如果你瞭解這些步驟,你會發現,發送通知到相應的設備的關鍵點是,你需要申請通知通道。無論通道URI是否更新,此通道URI對於每個設備都是唯一的。因此,即使您的UWP應用程序的後臺任務已更新您雲服務上的頻道URI,也不會影響設備接收通知。只要您使用此通道URI發送通知時確保通道URI是最新的,那麼您的設備將始終收到通知(除了一些特殊情況,例如設備已關閉電源或設備處於電池節電器等)。

請閱讀Windows Push Notification Services (WNS) overview更詳細的信息。

在uri潛在改變之後,前臺應用程序繼續偵聽推送通知的正確方法是什麼?

你說什麼是不正確的。 「聽推送通知」和「潛在改變的uri」之間沒有關係。

如果你想要做一些操作時,設備接收通知,您可以使用Notification listener收到通知時執行特定操作。

+0

謝謝謝謝謝謝謝。我們的應用程序正在執行此操作我們沒有收到推動的問題。讓我澄清我的問題。 在前臺應用程序,我們呼籲: PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); 然後: channel.PushNotificationReceived + = OnPushNotificationReceived; 問題是當通道URI發生變化(並且我們用新的通道URI更新服務器)時,我們的前臺應用程序中的事件回調將永遠不會再次觸發 –

+0

@JustinHorst爲什麼不使用[通知偵聽器](https:// docs .microsoft.com/EN-US /窗/ UWP /控制和圖案/瓦和-通知/通知監聽)?如果您使用通知偵聽器,則不需要考慮通道URI是否已更新。 –

+0

謝 - 如果我理解正確通知監聽器需要我們去所有的用戶通知的訪問,我們不需要,我們僅需要被通知當原始通知來爲我們的應用程序 –