将模板通知发送到磁贴和烤面包一次

时间:2015-06-25 07:35:23

标签: c# windows-phone-8 push-notification azure-notificationhub

我为我的WindowsPhone客户端注册了两个不同的模板(一个用于tile更新,一个用于toast)。

是否有可能只发送一个通知,我的WindowsPhone客户端会收到Toast通知和磁贴更新?

我发现forum thread on msdn有以下消息(在答案中):

  

如果你调用方法SendTemplateNotificationAsync({“的属性   模板“},”en-us“))像这样,它将以toast和tile为目标   两个通知设备A.

但那对我不起作用。我的客户端只获取tile更新而不是toast通知。

我还在xml(tile和toast)中尝试了一个模板。 Found here。但这也不会起作用(只能在客户端上看到吐司)。

我知道,我可以使用其他代码(例如" toast"" tile")并发送通知,如下面的代码段。但我认为这是一个丑陋的解决方案:

await hubClient.SendTemplateNotificationAsync(content, tags + " && toast");
await hubClient.SendTemplateNotificationAsync(content, tags + " && tile");

感谢任何帮助。感谢

修改:我的模板和我的通知属性:

属性:

var content = new Dictionary<string, string>
{
    {"title_en", "English title"},
    {"message_en", "English content"},
    {"title_de", "Deutscher Titel"},
    {"message_de", "Deutscher Inhalt"},
    {"url", url},
    {"count", count.ToString()}
};

Toast-Template(WindowsPhone)

String.Format("<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
    "<wp:Notification xmlns:wp=\"WPNotification\">" +
    "<wp:Toast>" +
    "<wp:Text1>$(title_{0})</wp:Text1>" +
    "<wp:Text2>$(message_{0})</wp:Text2>" +
    "<wp:Param>$(url)</wp:Param>" +
    "</wp:Toast>" +
    "</wp:Notification>", language);

平铺模板(WindowsPhone)

String.Format("<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
    "<wp:Notification xmlns:wp=\"WPNotification\">" +
    "<wp:Tile Template=\"IconicTile\">" +
    "<wp:SmallIconImage>Small.png</wp:SmallIconImage>" +
    "<wp:IconImage>Large.png</wp:IconImage>" +
    "<wp:WideContent1>$(title_{0})</wp:WideContent1>" +
    "<wp:WideContent2>$(message_{0})</wp:WideContent2>" +
    "<wp:WideContent3 Action=\"Clear\"></wp:WideContent3>" +
    "<wp:Count>$(count)</wp:Count>" +
    "<wp:Title>AppName</wp:Title>" +
    "</wp:Tile>" +
    "</wp:Notification>", language)

1 个答案:

答案 0 :(得分:1)

await hubClient.SendTemplateNotificationAsync(content, tags + " && toast");
await hubClient.SendTemplateNotificationAsync(content, tags + " && tile");

这不是一个丑陋的解决方案,实际上背后有一个原因。选择

template/registration always based on tags not based on payload keys.所以实际上您已将模板注册到不同的标签集,例如=&gt;

device A - toast template,  tags: {"en-us", "toast"}
device A - tile template , tags : {"en-us", "tile"}

在这种情况下,设备磁贴模板已在tags : {"en-us", "tile"}注册,而Toast为tags: {"en-us", "toast"},这两个注册不同,因此您无法在单个请求中发送它们。

IMO you can't have the both notification with this single call =&gt; SendTemplateNotificationAsync({“properties of template”}, “en-us”))&#39;因为再次IMO(因为我之前无法解决)通知中心无法决定他必须向设备发送哪个模板(磁贴,吐司)。因为每个人都注册了上面提到的不同标签。

此外,为什么它不是一个丑陋的解决方案,因为它让您可以更好地控制通知,因为您知道吐司和平铺通知有不同的目的,它们同时不提供任何额外的价值。

平铺通知 =&gt;它用于可以持续一段时间并且不会更快过时的信息。与计数器,背面图像,一些新的更新等一样,此信息也不需要立即用户立即关注。

Toast Notification =&gt;它用于发送非常即时的信息(希望你理解我的意思)。像一些新消息来了,你已经发布了一个新的更新等。

如果你一直同时发送两个通知,那么在这种情况下,它确实没有增加额外的价值。