我有一个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消息。
我的问题是:
launch
参数和message
与我们在创建本地祝酒词时的方式相似。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");
答案 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
。