2013-10-03 145 views
3

我想檢查推送通知實施是否正確。Windows Phone 8推送通知推送通道始終創建新通道uri

每當我打開我的應用程序(實際上我只在特定頁面上註冊推送通道,所以每次我從該頁面來回移動時)都會創建一個新的推送通道URI,並將其存儲在我的移動設備中服務數據庫發送推送通知。這對我來說似乎並不正確,因爲每次打開應用程序/頁面時都會生成新的推送通道URI,因此每個使用我的應用程序的設備的通道URI列表只是增長和增長。我假設你創建一個推送頻道,存儲頻道URI並根據需要推送它。我會在這裏記下我正在使用原始推送通知。

我知道推送頻道每隔一段時間就會過期,但對我而言,每當我退出應用程序/頁面時都會發生這種情況,因此當onNavigateTo被調用時,我發現存在的推送頻道以及始終存在的新頻道URI創建。它是否正確?

我的代碼如下:

保護覆蓋無效的OnNavigatedTo(NavigationEventArgs E) { registerPushChannel(); }

private void registerPushChannel() 
    { 
     // The name of our push channel. 
     string channelName = "RawSampleChannel"; 

     // Try to find the push channel. 
     pushChannel = HttpNotificationChannel.Find(channelName); 

     // If the channel was not found, then create a new connection to the push service. 
     if (pushChannel == null) 
     { 
      pushChannel = new HttpNotificationChannel(channelName); 

      // Register for all the events before attempting to open the channel. 
      pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated); 
      pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred); 
      pushChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(PushChannel_HttpNotificationReceived); 

      pushChannel.Open(); 

     } 
     else 
     { 
      // The channel was already open, so just register for all the events. 
      pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated); 
      pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred); 
      pushChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(PushChannel_HttpNotificationReceived); 

      // code which passes the new channel URI back to my web service    

     } 

    } 

protected override void OnNavigatedFrom(NavigationEventArgs e) 
    { 
     pushChannel.Close(); 
    } 

所以要澄清,該應用程序被打開,推註冊頻道和頻道URI是保存在我的Web服務。 Web服務然後將通知發送到通道uri。當我退出應用程序或頁面並返回時,會發現推送頻道,但會創建一個新頻道uri,然後再次保存到我的網絡服務。我的頻道表實際上保持增長和增長。

那麼,這是應該如何處理新的渠道URI不斷產生?這對我來說沒有意義。我不知道如何吐司和磁貼通知工作,但我會假設渠道URI需要是靜態時,應用程序關閉,以保持接收通知,而應用程序關閉,但也許這可能是一個功能bindtotoast和bindtotile等我正在做的是正確的,因爲這是與原始通知。

+0

我正在努力與'PushChannel_ChannelUriUpdated'實際投入。你能舉個例子嗎? – creatiive

回答

7

你主要是做對了。

推送通知是一件有趣的事情。
您創建一個頻道,將其發送到您的服務器,然後服務器可以發送,直到它失敗(頻道Uri過期或出現錯誤)。 此時應用程序需要創建一個新的ChannelUri,然後UPDATE存儲在服務器上的該應用程序/設備的值。服務器將能夠發送通知。

一些要點

  1. 當URI是請求一個仍然是有效的,你會得到相同的一回一個新的通道。
  2. 當你要求一個新的頻道uri並且當前的頻道已經過期時,你通常會得到相同的uri,但頻道將會重新開始播放。
  3. 無法確定某個頻道是否已從應用內過期,而無需運行代碼,如registerPushChannel方法。 (除非您在後端追蹤此內容,並且應用程序查詢後端)
  4. 無法告訴應用程序某個頻道已過期,或者告訴用戶重新打開應用程序以重新建立頻道連接推基礎設施。

嘗試確保頻道始終可用的標準方法是在應用程序啓動時檢查頻道。
這就是你正在做的,你可能只是想確保你正在更新服務器記錄,而不僅僅是增加更多。

+0

甜。感謝那。是的插入我檢查通道Uri爲該用戶不存在。很高興知道我做對了。再次感謝。 – doktorg