Статьи

31 день Windows 8 для HTML5 | День № 10: Уведомления о тостах

XAMLCallout

Эта статья является Днем № 10 из цикла под названием « 31 день Windows 8» . Каждая из статей этой серии будет опубликована как для HTML5 / JS, так и для XAML / C # . Вы можете найти дополнительные ресурсы, загрузки и исходный код на нашем сайте .


Вчера мы потратили некоторое время на просмотр Live Tiles и на то, как сообщить пользователям о важной информации из вашего приложения. Сегодня мы рассмотрим другой тип уведомлений пользователя: уведомления о тостах .

Если вы раньше не работали с уведомлениями о тостах, это слово может показаться вам немного глупым. Слово «тост» в данном случае происходит от изображения тоста, выходящего из тостера. Вкусно. Наши уведомления появляются аналогичным образом, появляясь перед нашим пользователем, чтобы сообщить им, когда произошло что-то интересное.

Основное различие между уведомлениями Toast и уведомлениями Live Tile заключается в том, что сообщения Toast будут отображаться на экране пользователя независимо от того, какое приложение они в данный момент используют. По умолчанию в верхнем правом углу. Живые плитки должны просматриваться на стартовом экране пользователя.

Тосты кричат: «ТЫ ДОЛЖЕН ЗНАТЬ ЭТУ ИНФОРМАЦИЮ ПРЯМО СЕЙЧАС!» где живые плитки значительно более пассивны. Обязательно учитывайте это при отправке тостовых сообщений. Если вы рассылаете им спам с несущественной чепухой, они отключат вашу возможность отправлять уведомления или, что еще хуже, удалят ваше приложение. Прежде чем углубляться в это, убедитесь, что вы потратили немного времени, чтобы прочитать руководство Microsoft по уведомлениям о тостах .

Для справки вот несколько примеров уведомлений о тостах.

Как и в случае с живыми плитками, есть целый каталог типов уведомлений о тостах, которые вы можете использовать , но мы скоро к ним вернемся.

Включение уведомлений о тостах в вашем приложении

Наш первый шаг к совершенству с помощью уведомлений Toast — это включение их в манифест нашего приложения. Откройте файл package.appxmanifest на вкладке «Интерфейс приложения» и выберите «Да» в раскрывающемся списке «Поддержка Toast».

образ

Когда вы пройдете эту статью, будет очень заманчиво создать файл логотипа Badge и загрузить его в свое приложение, но для этого урока это не так. Вот почему:

Если вы загружаете логотип значка, вы должны включить уведомления экрана блокировки. Однако, если включены уведомления экрана блокировки, у вас должна быть фоновая задача. Мы не рассматриваем фоновые задачи еще два дня, а обновления экрана блокировки — завтра. Просто будьте терпеливы.:)

Сегодня мы сфокусированы на уведомлении пользователя с помощью сообщения Toast. Давайте вернемся к этому.

Запуск тост-уведомления из вашего приложения

Вчера статья 9-го дня была посвящена живым плиткам , и если вы прочитаете это, запуск уведомлений о тостах покажется * невероятно * знакомым, и я не буду вдаваться в подробности здесь. Так же, как живые плитки, существует XML-схема, представляющая тост, который мы хотим отправить, обратите внимание, <тост> .

<toast>
    <visual>
        <binding template="ToastImageAndText01">
            <image id="1" src="image1" alt="image1"/>
            <text id="1">bodyText</text>
        </binding>  
    </visual>
</toast>

Как и в случае с Live Tiles, мы делаем то же самое или очень похоже на тост. 

  • Получить экземпляр уведомления WinRT
  • Из уведомлений получите свой шаблон
  • Из этого шаблона получите его содержимое, то есть XML, который мы показали выше
  • Выберите и обновите соответственно
  • (необязательно) установите продолжительность
  • (необязательно) установить аудио
  • (необязательно) установить любые параметры запуска приложения
  • Создать новое уведомление плитки
  • Отправить обновление плитки
    var notifications = Windows.UI.Notifications;
    
    var template = notifications.ToastTemplateType.toastImageAndText02;
    var toastXml = notifications.ToastNotificationManager.getTemplateContent(template);
    
    var toastTextElements = toastXml.getElementsByTagName("text");
    toastTextElements[0].innerText = "31 Days of Windows 8";
    toastTextElements[1].innerText = _toastMessage.value; //taking from screen
    
    var toastImageElements = toastXml.getElementsByTagName("image");
    toastImageElements[0].setAttribute("src", "ms-appx:///images/clarkHeadShot.jpg");
    toastImageElements[0].setAttribute("alt", "Clark's Head");
    
    var toast = new notifications.ToastNotification(toastXml);
    var toastNotifier = notifications.ToastNotificationManager.createToastNotifier();
    toastNotifier.show(toast);

Как вы можете видеть, это страшно похоже на Live Tiles. Я устанавливаю два свойства текста и одно свойство изображения. Для изображения вы заметите, что на этот раз я добавил дополнительную строку со ссылкой на атрибут «alt». Если вы раньше занимались веб-разработкой, вы, вероятно, уже знаете, что это такое, но это важная часть истории доступности в Windows 8. Она предоставляет текстовое представление изображения для тех пользователей, которые не могут видеть свой экран. ,

Наконец, мы создаем новый объект ToastNotification и показываем (toast) его на экране. Это простая история создания всплывающих уведомлений в Windows 8. А вот как выглядит точная плитка на моем компьютере:

 образ

Но подождите, это еще не все! Если вы создали проект и запустили всплывающее сообщение, вы, возможно, заметили, что к нему есть аудиоклип. Это звук уведомления по умолчанию, но у вас есть варианты. Есть также некоторые другие интересные вещи, которые вы можете сделать с тостами.

Настройка звука для уведомления о тосте (и не только!)

Все в создании уведомления о тосте остается неизменным, но мы можем добавить несколько дополнительных узлов в наш XML, чтобы выбрать другой звуковой звук, установить длительность сообщения и даже продиктовать страницу для запуска при нажатии на уведомление (с параметрами запроса также!)

Во-первых, у меня есть плохие новости. Вы не можете использовать свой собственный аудио файл. Я знаю, что вы надеялись порадовать своего пользователя звуком тостера, но это просто невозможно. Вместо этого вы можете выбрать из списка 9 аудиофайлов, 4 из которых представляют собой циклические звуки, которые можно использовать в качестве мелодий звонка или будильника.  Вы можете увидеть полный список аудиофайлов и описания, доступные для уведомлений о тостах здесь .

Чтобы установить звук, сначала нужно открыть XML, который мы создали. По умолчанию ни у одного из шаблонов Toast не определен аудио узел , поэтому нам нужно его создать. Сначала нам нужно погрузиться в узел <toast> нашего шаблона, а затем мы можем установить наши параметры. В приведенном ниже примере кода я исключил код для создания уведомления Toast (просто посмотрите выше) и просто добавил часть, где мы изменили бы шаблон, чтобы добавить наш аудиоклип.

....

var toastNode = toastXml.selectSingleNode("/toast");

var audio = toastXml.createElement("audio");
audio.setAttribute("src", "ms-winsoundevent:Notification.IM");
toastNode.appendChild(audio);

....

Вы также можете установить продолжительность, как долго он будет оставаться на экране для части тоста.

....

var toastNode = toastXml.selectSingleNode("/toast");
toastNode.setAttribute("duration", "long");

....

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


  • Длинные сообщения Toast предназначены для таких вещей, как VOIP-звонки и будильники, а не для уведомлений по электронной почте.
    Используйте это экономно.

  • Все доступные варианты зацикливания звука будут работать только в том случае, если вы установили длительность Long.

  • Параметры зацикливания звука будут работать только в том случае, если для атрибута «loop» также установлено значение true.

Несоблюдение этих правил приведет к воспроизведению звука Notification.Default .

Кроме того, вы можете захотеть использовать SILENCE для вашего тостового сообщения вместо любой из опций аудио. Вы можете сделать это. В этом случае вы по-прежнему указываете audioNode , но вы устанавливаете для нового атрибута silent значение true, например:

var audio = toastXml.createElement("audio");
audio.setAttribute("silent", "true");

Это приведет к тихому, но в остальном нормальному уведомлению о тосте для вашего пользователя. Наконец, есть атрибут « запуск ». В рамках этого мы можем передать любую текстовую строку, которая нам нравится, и она будет передана нам в качестве параметра страницы, когда пользователь нажимает на тост-сообщение. Эти данные должны позволить вам определить, на какую страницу направлять их, с какими данными их заполнять. Не помещайте в параметр «запуск» ничего, что не нужно для поездки.

....

var toastXml = notifications.ToastNotificationManager.getTemplateContent(template);

...

toastXml.selectSingleNode("/toast").setAttribute("launch", '{
                "type":"toast",
                "args1":"31days",
                "args2":"#10"}' );

....

Резюме

Вот и все для всплывающих уведомлений в Windows 8. Очень похоже на Live Tiles, всплывающие сообщения — отличный способ привлечь внимание пользователя, независимо от того, чем он сейчас занимается. Некоторые из вас, вероятно, задаются вопросом, как мы производим эти обновления из фоновой задачи, и для вас мы просим терпения. Мы хотели убедиться, что дали исчерпывающий обзор каждого из этих типов уведомлений, прежде чем углубиться в фоновые задачи. Вы только два дня от этой темы, я обещаю.

Если вы хотите загрузить полное кодовое решение для этой статьи, щелкните значок ниже:

downloadHTMLdownloadTheTools

Завтра мы рассмотрим нашу последнюю тему в мире уведомлений, Экран блокировки. Увидимся позже!