2015-12-14 3 views
1

Я пытаюсь настроить приложение на получение тостов с помощью push-уведомлений с сервера.Понимание тостов push-уведомлений и как отображать на них текст и запускать приложение, нажимая на них. Windows Phone 8.1

Поскольку этот сервер в перевалено кем-то другим, и он не просил токен к БСС, я последовал примеру и я посылаю уведомлений с помощью «локальный веб-страницу»

protected void ButtonSendToast_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      // Get the URI that the Microsoft Push Notification Service returns to the push client when creating a notification channel. 
      // Normally, a web service would listen for URIs coming from the web client and maintain a list of URIs to send 
      // notifications out to. 
      string subscriptionUri = TextBoxUri.Text.ToString(); 


      HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(subscriptionUri) as HttpWebRequest; 

      // Create an HTTPWebRequest that posts the toast notification to the Microsoft Push Notification Service. 
      // HTTP POST is the only method allowed to send the notification. 
      sendNotificationRequest.Method = "POST"; 

      // The optional custom header X-MessageID uniquely identifies a notification message. 
      // If it is present, the same value is returned in the notification response. It must be a string that contains a UUID. 
      // sendNotificationRequest.Headers.Add("X-MessageID", "<UUID>"); 

      // Create the toast message. 
      string toastMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + 
      "<wp:Notification xmlns:wp=\"WPNotification\">" + 
       "<wp:Toast>" + 
        "<wp:Text1>" + TextBoxTitle.Text.ToString() + "</wp:Text1>" + 
        "<wp:Text2>" + TextBoxSubTitle.Text.ToString() + "</wp:Text2>" + 
        "<wp:Param>/Page2.xaml?NavigatedFrom=Toast Notification</wp:Param>" + 
       "</wp:Toast> " + 
      "</wp:Notification>"; 

      // Set the notification payload to send. 
      byte[] notificationMessage = Encoding.Default.GetBytes(toastMessage); 

      // Set the web request content length. 
      sendNotificationRequest.Headers.Add("Authorization", String.Format("Bearer {0}", "EgAdAQMAAAAEgAAAC4AATIYp8fmpjFpbdnRTjf2qfP/GqZ8Bbb62bH6N+0MhSztcV/wXfv9aVjiwbVgF5EX0fgBXC6LvJCpl1+ze7ts9h5je4e1QekryEFqfWl36BtTBnmWqBFk0WmwxpdIgGqhVjAtRdnJ3ODnFSBCfd7dq8nFiFTFDxPcTXhdDbu9W3BKMAFoAjAAAAAAAHFAXTMH+bVbB/m1W60gEAA8AMTkwLjE5My42OS4yMzMAAAAAAF0AbXMtYXBwOi8vcy0xLTE1LTItMTU5OTEyNjk1NS0zODAwNDMxNzQ0LTk2OTg4NTEzNi0xNjkxMDU1MjI4LTcwOTcyNTQ0NC00MDYxNzA4MDczLTI0Mzg0MzM1MzQA")); 
      sendNotificationRequest.ContentLength = notificationMessage.Length; 
      sendNotificationRequest.ContentType = "text/xml"; 
      sendNotificationRequest.Headers.Add("X-WNS-Type", "wns/toast"); 


      using (Stream requestStream = sendNotificationRequest.GetRequestStream()) 
      { 
       requestStream.Write(notificationMessage, 0, notificationMessage.Length); 
      } 

      // Send the notification and get the response. 
      HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse(); 
      string notificationStatus = response.Headers["X-NotificationStatus"]; 
      string notificationChannelStatus = response.Headers["X-SubscriptionStatus"]; 
      string deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"]; 

      // Display the response from the Microsoft Push Notification Service. 
      // Normally, error handling code would be here. In the real world, because data connections are not always available, 
      // notifications may need to be throttled back if the device cannot be reached. 
      TextBoxResponse.Text = notificationStatus + " | " + deviceConnectionStatus + " | " + notificationChannelStatus; 
     } 
     catch (Exception ex) 
     { 
      TextBoxResponse.Text = "Exception caught sending update: " + ex.ToString(); 
     } 

    } 

Теперь, мое приложение, я просил Урьте канал и обработчик, который вызывается, когда этот канал получает толчок

PushNotificationChannel channel = null; 

      try 
      { 
       channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); 
       Debug.WriteLine(channel.Uri); 
       if (channel.Uri != null) 
       { 
        var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; 
        localSettings.Values.Remove("PushToken"); 
        localSettings.Values["PushToken"] = channel.Uri; 

        channel.PushNotificationReceived += channel_PushNotificationReceived; 

       } 
      } 

      catch (Exception ex) 
      { 
       Debug.WriteLine(ex.ToString()); 
      } 
} 

async void channel_PushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs e) 
    { 
     String notificationContent = String.Empty; 

     notificationContent = e.ToastNotification.Content.GetXml(); 
     Debug.WriteLine(notificationContent); 
    } 

до сих пор так хорошо: я получаю уведомление, когда мое приложение работает, и когда мое приложение закрыто. Но он только говорит «Новое уведомление», и ничего не происходит, когда я нажимаю на него.

Я попытался добавить событие

e.ToastNotification.Activated += ToastNotification_Activated; 

Но это не работает, и после прочтения, как 20 документов я очень смущен о шаблонах тоста и как я могу использовать его, чтобы показать то, что я получаю от сервер

Итак, каков реальный способ сделать это, отобразить в тосте некоторые данные, полученные в результате нажатия, и заставить приложение «запускать/перейти на определенную страницу», когда пользователь нажимает на Это?

+0

вы нашли решение запроса о переход на конкретную страницу в Push Push от пользователя? –

ответ

0

Для приложения, чтобы перейти на определенную страницу

Начиная с Windows 8/8.1, приложения всегда предполагается обрабатывать активаций в ответ на пользователь нажимает на уведомление тоста из этого приложения - приложение должно реагировать на выполняя навигацию и отображая пользовательский интерфейс, специфичный для тоста. Это достигается посредством строки активации, которую вы включаете в полезную нагрузку для тоста, которая затем передается вашему приложению в качестве аргумента в событии активации.

Для перехода на определенную страницу вам необходимо переопределить событие OnActivated в App.Xaml.cs и обработать параметр string.

Для отображения тоста Если вы хотите отобразить текст в виде плиток, попробуйте оповещения о значке или только данные, полученные через тост, затем обработайте его на странице после навигации из onactivated event. Также Check this link. Он отображает стандартные шаблоны для разных уведомлений. Надеюсь, поможет.

0

Вы получите «Новое уведомление», когда система не узнает вашу полезную нагрузку уведомления для тостов. Это потому, что вы использовали MPNS quickstart, а не WNS quickstart и получили большую часть материала, перемещенного в WNS, за исключением формата вашего тоста. Вы хотите, чтобы ваше содержание тоста выглядеть примерно так:

<toast launch=""> 
    <visual lang="en-US"> 
    <binding template="ToastImageAndText01"> 
     <image id="1" src="World" /> 
     <text id="1">Hello</text> 
    </binding> 
    </visual> 
</toast> 

Вот WNS Краткое руководство: https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh868252.aspx

Как тост схемы WNS: https://msdn.microsoft.com/en-us/library/windows/apps/br230849.aspx

 Смежные вопросы

  • Нет связанных вопросов^_^