5

更新:情節變濃。我改變了我的頻道名稱,它突然工作(這意味着它不是我的推送服務的問題,因爲我從Microsoft推送通知服務器獲得相同的HTTP響應)。Windows Phone 7推送通知不顯示在我的電話上

但是,對我而言,這不是一個解決方案。我如何能夠測試這一點,並知道我的用戶正在得到他們的推送通知,如果我得到相同的響應時,它不工作,因爲我現在這樣做?

[原帖]

我一直試圖讓推送到我的Windows Phone 7設備的通知,但我有非常大的問題,我無法找到任何答案。我將從C#代碼開始。

我使用以下C#代碼設置了推送通知。

private HttpNotificationChannel channel; 
private static string PUSH_CHANNEL = "MySpecialPushChannel"; 
private Uri PushUri = null; 
private bool IsPushRegistered = false; 

public void StartPushSubscription() 
{ 
    try 
    { 
     channel = HttpNotificationChannel.Find(PUSH_CHANNEL); 
    } 
    catch 
    {} 

    if (channel != null) 
    {    
     PushUri = channel.ChannelUri; 
     if (!channel.IsShellTileBound) 
      channel.BindToShellTile(); 
    } 
    else 
    { 
     channel = new HttpNotificationChannel(PUSH_CHANNEL); 
     channel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(channel_ChannelUriUpdated); 
     channel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(channel_HttpNotificationReceived); 
     channel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(channel_ErrorOccurred); 

     try 
     { 
      channel.Open(); 
      channel.BindToShellTile(); 
     } 
     catch (Exception err) 
     { 
      channel = null; 
      IsPushRegistered = false; 
      // Code to try again 
     } 
    } 
} 

void channel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e) 
{ 
    PushUri = e.ChannelUri; 
    IsPushRegistered = true; 
} 

我按照標準的WP7推結構:

  1. 找到HttpNotificationChannel(或啓動一個新的)
  2. 註冊事件處理程序來獲取推送通知URI回
  3. 開放通道
  4. 綁定到瓦片
  5. 處理通道Uri(我們發送給我們的服務等待t當我們發送推送通知時,他很高興的一天

好的...迄今爲止這麼好。沒有錯誤,我得到我的Uri,把它發送給我的服務就好了。我將我的應用程序綁定到開始屏幕,我的服務向Uri發送一個推送請求(只發送計數,以便我在右上角獲得一個小推數)。我得到一個HTTP 200狀態有以下幾點:

DeviceConnectionStatus =>連接

NotificationStatus =>收到

SubscriptionStatus =>活動

然後什麼都沒有。沒有推送狀態顯示在我的應用程序。我現在已經在我的設備,模擬器,另一臺設備上以及多臺服務器上嘗試過了,結果總是一樣的。一切看起來都在起作用,除非它不起作用。

+0

如何格式化發送的通知?我希望看到您使用的XML和標題。 – 2011-05-12 17:46:33

+0

我在這裏使用PHP WP7 push notifcation系統:http://phpwindowsphonepush.codeplex.com/ 但是這不是一種沒有意義的觀點嗎?我的意思是......如果我從Microsoft推送通知服務器獲得成功消息,這是否意味着推送請求成功?或者有沒有「你做錯了什麼,但我們會給你一個成功的消息」的答覆版本? – MatthiasS 2011-05-12 18:03:00

+0

不熟悉PHP,但看看這裏的C#實現:http://dotnet.dzone.com/articles/sending-tile-push至少當我嘗試傳遞一個圖像,如果它不符合規則(80KB/15秒),狀態將被接收,但通知將失敗。 – 2011-05-12 19:01:28

回答

3

但是,對我而言,這不是一個解決方案。我如何能夠測試這一點,並知道我的用戶正在得到他們的推送通知,如果我得到相同的響應時,它不工作,因爲我現在這樣做?

答案是,你不能。這是WP7處理通知的限制。

對於像Tile和Toast這樣的結構化通知,如果您獲得了Connected/Active/Received/200響應,那麼您可以知道MPNS接受了您的通知請求。但是,這並不意味着您已發送有效的XML負載。

,處理解析XML是推送客戶端組件,接受推送通知和交易他們到相應的應用程序,顯示敬酒在手機上運行的進程,等等

如果您發送無效的XML,絕對沒有跡象表明你已經這樣做了。至多,如果您嘗試再次將通知發送到同一個推送渠道URI,您將得到一個404響應。顯然,爲特定應用程序獲取無效XML負載會使該應用程序的推送通道關閉,要求您再次執行整個過程。

我在與我們的服務器團隊進行調試時發現了這一情況,並試圖讓手機顯示備用活動磁貼。我可以爲您提供的唯一建議是對您的XML進行四次檢查。

由於您可以在應用程序處於活動狀態時發送/接收Toast通知,因此您的推送通知通道的錯誤事件處理程序中將出現Toast通知具有無效XML的錯誤。


如果從微軟的人在讀這,提供推送通知系統上可能的錯誤狀態更徹底的文檔。我們還需要Tile通知的事件處理程序,或者至少允許我們在應用程序處於前臺時接收磁貼通知並觸發通知通道錯誤事件,以便我們知道我們的XML有效內容是無效的。

尤其是如果您的Web服務不是使用WCF,.NET,Azure等構建的,那麼使用WP7上的推送通知就像是漫無目的。

文檔的異常信息讀「InvalidOperationException(Failed to open channel)」應該寫着:「當通知通道無法打開,拋出此異常再次嘗試打開該通知通道」 (reference

0

您是否從每個設備獲取URL?你需要從推送通知服務隊爲您的設備連接各設備每次獲得一個網址,

當它需要找到每個客戶端檢索URL的方式,

一旦你做到這一點,你的仍然沒有收到推送通知,然後我會寫信給微軟,看他們是否能看到任何與推送通知有關的信息