在WNS中使用原始推送通知

时间:2014-12-24 22:23:16

标签: c# notifications push-notification windows-8.1 background-task

我一直在尝试在我的Windows和Windows Phone 8.1应用程序上实现原始推送通知的BackgroundTask,但它似乎不起作用。我已经成功地设置了基于推送通知的推送通知,但据我所知,Raw通知会静默地将数据推送到应用程序,这取决于应用程序显示Toast通知或更新应用程序的磁贴。

我查看了BackgroundTask示例并完全按照它进行了操作(https://code.msdn.microsoft.com/windowsapps/Background-Task-Sample-9209ade9)。

以下是我采取的步骤

  1. 在与我的其他项目(称为NotificationServer)相同的解决方案中创建Windows运行时组件项目
  2. 将该类重命名为RawTask.cs并实施IBackgroundTask及其Run方法
  3. 创建了一种创建Toast通知的方法

    private void SendNotification(string text)         {             XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);

            XmlNodeList elements = toastXml.GetElementsByTagName("text");
            foreach (IXmlNode node in elements)
            {
                node.InnerText = text;
            }
    
            ToastNotification notification = new ToastNotification(toastXml);
            ToastNotificationManager.CreateToastNotifier().Show(notification);
        }
    
  4. 为Run方法添加了代码

    BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

            RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
            string content = notification.Content;
    
            // ...
            SendNotification("test");
    
            // ...
    
            _deferral.Complete();
    
  5. 将我的应用清单更新为Toast Capable = YESLock Screen Notifications = Badge

  6. Supported Task Type = Push NotificationEntry Point = NotificationServer.RawTask

  7. 添加了背景任务声明
  8. 添加了注册后台任务的代码

    public static BackgroundTaskRegistration RegisterBackgroundTask(string taskEntryPoint,                                                                 string taskName,                                                                 IBackgroundTrigger触发器,                                                                 IBackgroundCondition条件)         {             //             //检查此后台任务的现有注册。             //

            foreach (var cur in BackgroundTaskRegistration.AllTasks)
            {
    
                if (cur.Value.Name == taskName)
                {
                    // 
                    // The task is already registered.
                    // 
    
                    return (BackgroundTaskRegistration)(cur.Value);
                }
            }
    
    
            //
            // Register the background task.
            //
    
            var builder = new BackgroundTaskBuilder();
    
            builder.Name = taskName;
            builder.TaskEntryPoint = taskEntryPoint;
            builder.SetTrigger(trigger);
    
            if (condition != null)
            {
    
                builder.AddCondition(condition);
            }
    
            BackgroundTaskRegistration task = builder.Register();
    
            return task;
        }
    
  9. 执行
    var reg = RegisterBackgroundTask("NotificationServer.RawTask", "RawNotifications", new PushNotificationTrigger(), null);
    

    我在这里缺少什么,我的应用程序似乎没有响应Push Notification事件。我确保我的应用程序与商店中的应用程序相关联,并且正在使用正确的客户端密钥和应用程序ID发送推送。

1 个答案:

答案 0 :(得分:-1)

推送通知有四种类型:

  1. 平铺更新
  2. 徽章更新
  3. Toast通知
  4. 原始通知
  5. 所有Windows运行时应用都可以在前台使用前三个推送通知。只有锁屏应用才能从WNS接收原始推送通知。 所以,你必须使你的应用程序成为锁屏应用程序。

    您可以按this topic进行操作。