Отправить шаблон-уведомление на плитку и всплывающее уведомление один раз

Я регистрирую два разных шаблона для своих клиентов WindowsPhone (один для обновления плитки и один для тостов).

Есть ли возможность отправить только одно уведомление, и мои клиенты WindowsPhone получат всплывающее уведомление и обновление плитки?

Я нашел ветка форума на msdn со следующим сообщением (в ответе):

Если вы вызовете метод SendTemplateNotificationAsync({"свойства шаблона"}, "en-us")) таким образом, это нацелит всплывающее уведомление и разместит оба уведомления на устройстве A.

Но это не сработает для меня. Мой клиент получает только обновление плитки, а не всплывающее уведомление.

Я также попробовал шаблон как в xml (плитка, так и тост). Найдено здесь. Но это тоже не сработает (на клиенте виден только тост).

Я знаю, что могу работать с дополнительными тегами (такими как «тост» и «плитка») и отправлять уведомления, как в следующем фрагменте кода. Но я думаю, что это уродливое решение:

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-шаблон (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)

person Joehl    schedule 25.06.2015    source источник
comment
На самом деле это должно быть возможно, как указано на форуме msdn. Можете ли вы предоставить свои шаблоны? Вы должны убедиться, что предоставили все параметры при отправке уведомления о шаблоне.   -  person Baris Akar    schedule 25.06.2015
comment
Я добавил шаблоны и свойства для уведомлений. Спасибо   -  person Joehl    schedule 25.06.2015
comment
Используете ли вы две отдельные регистрации для каждого устройства, одну для плитки и одну для тоста? Можете ли вы проверить, действительно ли в вашем центре уведомлений есть две разные регистрации для каждого устройства?   -  person Baris Akar    schedule 25.06.2015
comment
да. Существует две регистрации устройства. С разными регистрационными идентификаторами и одним и тем же pns-дескриптором   -  person Joehl    schedule 26.06.2015
comment
Тогда я понятия не имею, что не так. Вы пытались просто отправить всплывающее уведомление, чтобы убедиться, что всплывающее уведомление работает в целом?   -  person Baris Akar    schedule 26.06.2015
comment
да. Отправка плитки и пуш по отдельности работает. Только когда клиент зарегистрирован с обоими шаблонами, появляется только один...   -  person Joehl    schedule 26.06.2015


Ответы (1)


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

Это не уродливое решение, на самом деле для этого есть причина.

template/registration always based on tags not based on payload keys. так что на самом деле вы зарегистрировали шаблоны с другим набором тегов, например =>

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 => SendTemplateNotificationAsync({“properties of template”}, “en-us”))', потому что снова ИМО (поскольку я не мог это понять некоторое время назад) Центр уведомлений не может решить, какой шаблон (плитка, тост) он должен отправить на устройство. потому что каждый из них зарегистрирован с разными тегами, установленными, как указано выше.

Кроме того, почему это не уродливое решение, потому что оно дает вам больше контроля над вашими уведомлениями, потому что вы знаете, что всплывающие уведомления и уведомления плитки имеют разные цели, они одновременно не дают никакой дополнительной ценности.

Плитка уведомлений => Используется для информации, которая может длиться некоторое время и не устаревает раньше. Как счетчик, Обратное изображение, Некоторые новые обновления и т. д., также эта информация не требует немедленного внимания пользователя.

Всплывающее уведомление => Оно используется для мгновенной отправки информации (надеюсь, вы понимаете, что я имею в виду). Например, пришло какое-то новое сообщение, вы выпустили новое обновление и т. д.

Если вы все время отправляете два уведомления одновременно, то в этом случае это действительно не добавляет дополнительной ценности.

person loop    schedule 25.06.2015
comment
Спасибо. Я так и думал... Я думаю, мне нужно сделать это с тегами. - person Joehl; 25.06.2015