使用Windows 8.1中的启动参数发送推送通知(Toasts)

时间:2015-09-14 12:06:05

标签: windows windows-runtime windows-phone-8.1 windows-8.1 winjs

我有一个WinJS项目,其中运行时组件中的 BackgroundTask 会在我自己发送推送通知(原始通知)时触发网络服务。 并且该背景服务创建一个本地祝酒并在行动通知中心显示它。

 public static void ShowNotification(int notificationId, string ToastTitle, int messageType, string messageDetails)
    {
        string messageText = String.Empty;
        ToastTemplateType toastTemplate = ToastTemplateType.ToastText04;
        XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
        XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");

        toastTextElements[0].AppendChild(toastXml.CreateTextNode(ToastTitle));//Toast notification title
        toastTextElements[1].AppendChild(toastXml.CreateTextNode(messageText));
        toastTextElements[2].AppendChild(toastXml.CreateTextNode(messageDetails));

        var launchAttribute = toastXml.CreateAttribute("launch");
        IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
        ((XmlElement)toastNode).SetAttribute("duration", "short");
        toastNode.Attributes.SetNamedItem(launchAttribute);

        //Launch params
        var toastNavigationUriString = messageDetails;
        var toastElement = ((XmlElement)toastXml.SelectSingleNode("/toast"));
        toastElement.SetAttribute("launch", toastNavigationUriString);

        ToastNotification toast = new ToastNotification(toastXml);
        toast.Tag = notificationId.ToString();
        toast.ExpirationTime = DateTimeOffset.UtcNow.AddDays(3);

        if (true)
        {
            toast.SuppressPopup = false;//to send notification directly to action center without displaying a popup on phone.
        }

        ToastNotificationManager.CreateToastNotifier().Show(toast);
    }

我在JS处理这样的祝酒词:

WinJS.Application.addEventListener("activated", onActivatedHandler, true);

function onActivatedHandler(args) {
    if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
        messageDetails = args.detail.arguments;
        PhonegapService.setNotificationMessage(messageDetails, function () {
            window.location.href = "index.html";
        });
    }
}
在我的网络服务上使用的

XML 格式是:

string rawMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
            "<root>" +
                "<Value1>" + "Hello" + "<Value1>" +
                "<Value2>" + "Raw" + "<Value2>" +
            "</root>";

现在推送通知略有变化。我想直接从我的网络服务发送推送通知( Toasts ),而不是发送Raw消息。

我的问题是:

  1. 如何在网络服务中附加launch参数和message与我们在创建本地祝酒词时的方式相似。
  2. 收到toasts时如何处理点击事件并获取附有该通知的有用信息。
  3. 在这种情况下,

    XML 将是这样的:

    string toast1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?> ";
    
               string toast2 = string.Format(@"<toast>
                           <visual>
                               <binding template=""ToastText04"">
                                   <text id=""1"">{0}</text>
                                   <launch></launch>
                               </binding>
                           </visual>
                       </toast>",message);
               string xml = toast1 + toast2;
    

    更新1

    我在我的网络服务上使用了以下XML。但是我收到的通知格式比我想象的要小:

     string toast1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?> ";
     string message = "some json";
                    string toast2 = string.Format(@"<toast launch= ""{0}"">
                             <visual version=""1"">
                                 <binding template=""ToastText02"">
                                     <text id=""1"">{1}</text>
                                       <text id=""2"">{2}</text>
                                 </binding>
                             </visual>
                         </toast>", message, "Alert", "Test");
    

1 个答案:

答案 0 :(得分:1)

您需要创建一个与以下结构相同的XML(带或不带自定义音频):

<toast launch=\"$param\">
   <audio src=\"ms-appx:///Assets/Sounds/$sound.wav\"/>
   <visual>
       <binding template=\"ToastText04\">
           <text id=\"1\">$title</text>
           <text id=\"2\">$msg</text>
       </binding>
   </visual>
</toast>

请注意,launch<toast>代码的成员。

您可以在激活应用程序时处理与以前相同的点击事件,获得的值为launch