2015-07-08 6 views
0

В настоящее время я работаю над компонентом Push Notification Windows 8.1. Я прочитал разные ссылки и обнаружил, что сначала нам нужно зарегистрировать приложение и получить всю информацию, такую ​​как SID и Client Secret, и отправить в нашу серверную команду, чтобы они могли отправлять push-уведомления.Как отображать push-уведомление для пользователя в Windows 8.1?

После этого я внедрил следующий код на моей стороне, чтобы получить channelUri и дату истечения срока действия этого Uri от WNS.

PushNotificationChannel channel = null; 
     try 
     { 
      channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); 
      if (channel != null) 
      { 
       var notificationUri = channel.Uri; 
       var expiration_time = channel.ExpirationTime; 
      } 
      channel.PushNotificationReceived += channel_PushNotificationReceived; 
     } 
     catch (Exception ex) 
     { 
      if (ex != null) 
      { 
       System.Diagnostics.Debug.WriteLine(ex.HResult); 
      } 
     } 

Я получил все значения отлично, и моя команда сервера добавила логику для отправки мне push-уведомления. Теперь проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как отобразить полученное push-уведомление, отправленное сервером этому пользователю. Кроме того, можно ли отображать уведомление, что приложение не работает или находится в фоновом режиме?

ответ

0

Задачи фона решили мою проблему.

Прежде всего, необходимо создать WindowsRuntimeComponent проект и добавить код ниже

public sealed class PushNotification:IBackgroundTask 
{ 
    public void Run(IBackgroundTaskInstance taskInstance) 
    { 
     RawNotification notification = (RawNotification)taskInstance.TriggerDetails as RawNotification; 
     if (notification != null) 
     { 
      ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01; 
      XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate); 
      var textElemets = toastXml.GetElementsByTagName("text"); 
      textElemets[0].AppendChild(toastXml.CreateTextNode(notification.Content)); 
      var imageElement = toastXml.GetElementsByTagName("image"); 
      imageElement[0].Attributes[1].NodeValue = "ms-appx:///Assets/50.png"; 
      ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml)); 
     } 

    } 
} 

Затем зарегистрировать фоновую задачу в любой страницы (я добавил в домашней странице), используя ниже код

private async void RegisterBackgroundTask() 
    { 

     await BackgroundExecutionManager.RequestAccessAsync(); 

     try 
     { 

      foreach (var task in BackgroundTaskRegistration.AllTasks) 
      { 
       try 
       { 
        task.Value.Unregister(false); 
       } 
       catch 
       { 
        // 
       } 
      } 
      BackgroundTaskBuilder builder = new BackgroundTaskBuilder(); 
      builder.Name = "Push Notifcation Task"; 
      builder.TaskEntryPoint = typeof(PushNotification).FullName; 
      builder.SetTrigger(new PushNotificationTrigger()); 
      builder.Register(); 
     } 
     catch(Exception e) 
     { 
      if(e != null) 
      { 
       System.Diagnostics.Debug.WriteLine(e.HResult); 
       System.Diagnostics.Debug.WriteLine(e.InnerException); 
      } 
     } 
    } 

Пожалуйста, не забудьте добавить эту фоновое задание в раздел Declarations в . Package.appmanifest файл и имя Entry Point должны соответствовать wi th builder.TaskEntryPoint = typeof(PushNotification).FullName; иначе вы получите исключение.

Надеюсь, это поможет кому-то.