1

我正在Windows Phone 8.1(不是silverlight)中開發一個應用程序,它使用WNS來接收原始推送通知。當我通過Visual Studio運行我的應用程序(通過物理設備,而不是在模擬器)時,我總是收到推送通知(前臺應用程序,後臺,手機鎖定...),所以我認爲我的代碼接收推送是正確的。在Windows Phone 8.1中沒有收到WNS

我的問題是當我運行我的應用程序沒有使用Visual Studio。如果我按下設備上的「應用程序圖標」來初始化應用程序並將其保留在前臺,我會收到推送通知。但是,如果我轉到電話菜單或鎖定設備(不殺死應用程序),我不會收到推送通知,但服務器說WNS已成功發送。如果我再次將應用程序放到前臺,我再次收到推送通知...

因此,總結:通過Visual Studio的Init應用程序,我總是收到WNS通知。通過設備啓動應用程序,只接收前臺應用程序的WNS。服務器始終成功發送WNS。

這裏是我的代碼,即可獲得WNS:

public static void OnPushNotificationReceived(PushNotificationChannel channel, PushNotificationReceivedEventArgs e) 
{ 
    Debug.WriteLine("Received WNS notification"); 

    string notificationContent = String.Empty; 
    switch (e.NotificationType) 
    { 
     case PushNotificationType.Badge: 
      Debug.WriteLine("Badge notifications not allowed"); 
      return; 
     case PushNotificationType.Tile: 
      Debug.WriteLine("Tile notifications not allowed"); 
      return; 
     case PushNotificationType.Toast: 
      Debug.WriteLine("Toast notifications not allowed"); 
      return; 
     case PushNotificationType.Raw: 
      notificationContent = e.RawNotification.Content; 
      break; 
    } 

    processWnsNotification(notificationContent); 
} 

//Show local toast notification 
private static void processWnsNotification(string notification) 
{ 
    ToastTemplateType toastTemplateXml = ToastTemplateType.ToastText01; 
    XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplateXml); 

    XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text"); 
    toastTextElements[0].AppendChild(toastXml.CreateTextNode("New message")); 

    ToastNotification toast = new ToastNotification(toastXml); 

    if(toastNotifier == null) 
    { 
     toastNotifier = ToastNotificationManager.CreateToastNotifier(); 
    } 
    toastNotifier.Show(toast); 
} 

任何人都知道發生了什麼或什麼,我做錯了什麼? 我認爲這可能是一個配置問題......但我一直在挖掘財產和配置文件沒有成功。

非常感謝! 豪爾赫。

回答

1

這是預期的行爲,並且有很好的文檔記錄,只有當您的應用沒有被暫停或者有background task可以處理原始通知時,您的應用纔會收到原始推送通知。

當Visual Studio打開時會收到它們,因爲當調試器連接時,應用程序不會掛起。要調試暫停應用程序,請轉至View->Toolbars並啓用Debug Location工具欄,然後啓動您的應用程序,並從Lifecycle Events框中選擇Suspend選項。你會注意到你的代碼沒有執行(用斷點測試)。

通知可能由您的服務器發送,但不會被您的手機接收。你可能不檢查你的推送請求的響應,但應該有一些跡象表明客戶端不可用或者類似的東西(一個狀態碼可能會指出)。

+0

謝謝!這是問題所在。我不知道如何使用生命週期事件框,它非常有用! – kemmitorz

相關問題