| page.title=Уведомления |
| page.tags="notifications","design","L" |
| @jd:body |
| |
| <a class="notice-developers" href="{@docRoot}training/notify-user/index.html"> |
| <div> |
| <h3>Документация для разработчиков</h3> |
| <p>Уведомление пользователя</p> |
| </div> |
| </a> |
| |
| <a class="notice-designers" href="notifications_k.html"> |
| <div> |
| <h3>Уведомления в Android версии 4.4 и ниже</h3> |
| </div> |
| </a> |
| |
| <!-- video box --> |
| <a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY"> |
| <div> |
| <h3>Видеоролик</h3> |
| <p>DevBytes: Уведомления в Android L Developer Preview</p> |
| </div> |
| </a> |
| |
| <style> |
| .col-5, .col-6, .col-7 { |
| margin-left:0px; |
| } |
| </style> |
| |
| <p>Уведомления позволяют извещать пользователя о релевантных и |
| периодически возникающих |
| событиях в приложении, таких как новые сообщения в чате или события в календаре. |
| Систему уведомлений можно рассматривать как канал новостей, извещающий пользователя о важных |
| событиях по мере |
| их возникновения, или как журнал, ведущий хронику событий, пока пользователь не обращает на них |
| внимания, и синхронизируемый должным образом на всех устройствах Android этого пользователя.</p> |
| |
| <h4 id="New"><strong>Новые возможности Android 5.0</strong></h4> |
| |
| <p>В Android 5.0 уведомления были существенно обновлены структурно, |
| визуально, и функционально:</p> |
| |
| <ul> |
| <li>был изменен внешний вид уведомлений в соответствии с новой |
| темой Material Design;</li> |
| <li> теперь уведомления доступны на экране блокировки, в то время как |
| конфиденциальная информация по-прежнему |
| может быть скрыта;</li> |
| <li>уведомления с высоким приоритетом, полученные при включенном устройстве, теперь имеют новый формат и называются |
| уведомлениями Heads-up;</li> |
| <li>уведомления синхронизируются с облаком: если удалить уведомление на одном из устройств |
| Android, оно будет удалено |
| и на остальных устройствах.</li> |
| </ul> |
| |
| <p class="note"><strong>Примечание.</strong> Разработка уведомлений в этой версии |
| Android значительно |
| отличается от их разработки в предыдущих версиях. Информацию о разработке уведомлений в предыдущих |
| версиях можно найти в разделе <a href="./notifications_k.html">Уведомления в Android версии 4.4 и ниже</a>.</p> |
| |
| <h2 id="Anatomy">Структура уведомления</h2> |
| |
| <p>В этом разделе описываются основные компоненты уведомления и их |
| отображение на устройствах различных типов.</p> |
| |
| <h3 id="BaseLayout">Базовая компоновка</h3> |
| |
| <p>Все уведомления имеют, как минимум, базовую компоновку, которую составляют следующие элементы.</p> |
| |
| <ul> |
| <li> <strong>Значок</strong> уведомления. Значок символизирует |
| инициирующее приложение. Он также может |
| указывать на тип уведомления, если приложение генерирует уведомления нескольких |
| типов.</li> |
| <li> <strong>Заголовок</strong> уведомления и дополнительный |
| <strong>текст</strong>.</li> |
| <li> <strong>Временная метка</strong>.</li> |
| </ul> |
| |
| <p>Уведомления, созданные с помощью {@link android.app.Notification.Builder Notification.Builder} |
| для предыдущих версий платформы, выглядят и функционируют в Android |
| 5.0 так же, как и прежде, за исключением незначительных стилистических отличий, вносимых |
| системой. Дополнительную информацию о внешнем виде и функциональности уведомлений в предыдущих версиях |
| Android можно найти в разделе |
| <a href="./notifications_k.html">Уведомления в Android версии 4.4 и ниже</a>.</p></p> |
| |
| |
| <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" /> |
| |
| |
| <div style="clear:both;margin-top:20px"> |
| <p class="img-caption"> |
| Уведомление в базовой компоновке на мобильном устройстве (слева) и то же уведомление на носимом устройстве (справа) |
| с фотографией пользователя и значком уведомления |
| </p> |
| </div> |
| |
| <h3 id="ExpandedLayouts">Расширенная компоновка</h3> |
| |
| |
| <p>Разработчик может выбрать степень подробности уведомлений, генерируемых его |
| приложением. Уведомление может содержать первые |
| несколько строк сообщения или миниатюру изображения. В качестве дополнительной |
| информации можно предоставлять пользователю |
| контекст и, —в некоторых случаях, —давать ему возможность прочитать сообщение |
| целиком. Чтобы переключаться |
| между компактной и расширенной компоновкой, пользователь может применить жест сжатия/масштабирования или |
| провести пальцем по экрану. |
| Для уведомлений о единичных событиях Android предоставляет |
| разработчику приложения три шаблона расширенной компоновки |
| (текст, входящая почта и изображения). Ниже приведены скриншоты уведомлений о единичных |
| событиях на мобильных устройствах (слева) |
| и на носимых устройствах (справа).</p> |
| |
| <img style="margin-top:30px" |
| src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png" |
| alt="" width="700px" height;="284px" /> |
| <img style="margin-top:30px" |
| src="{@docRoot}images/android-5.0/notifications/stack_combo.png" |
| alt="" width="700px" height;="284px" /> |
| <img style="margin-top:30px" |
| src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png" |
| alt="" width="311px" height;="450px" /> |
| |
| <h3 id="actions" style="clear:both; margin-top:40px">Действия</h3> |
| |
| <p>Android поддерживает дополнительные действия, отображаемые в нижней части |
| уведомления. |
| Благодаря этому пользователи могут выполнять операции, типичные для данного |
| уведомления, непосредственно из него, не открывая |
| само приложение. |
| Это ускоряет взаимодействие и, вместе с операцией "провести пальцем, чтобы удалить", позволяет пользователю сосредоточиться на |
| важных для него уведомлениях.</p> |
| |
| |
| <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" /> |
| |
| |
| |
| <p style="clear:both">При определении количества действий в уведомлении следует проявлять |
| благоразумие. Чем больше |
| действий предоставлено пользователю, тем выше когнитивная сложность приложения. Ограничьтесь |
| минимальным количеством |
| действий, предоставив пользователю наиболее важные и |
| значимые.</p> |
| |
| <p>В уведомлениях отдавайте предпочтение действиям</p> |
| |
| <ul> |
| <li> важным, выполняемым наиболее часто и типичным для отображаемого |
| содержимого; |
| <li> позволяющим пользователю быстрее решить задачу. |
| </ul> |
| |
| <p>Избегайте действий</p> |
| |
| <ul> |
| <li> неоднозначных; |
| <li> совпадающих с действиями, выполняемыми для данного уведомления по умолчанию (например, "Прочитать" или |
| "Открыть"). |
| </ul> |
| |
| |
| |
| <p>Следует предоставлять не более трех действий, указав для каждого |
| значок и название. |
| Добавление действий в базовую компоновку делает уведомление расширяемым, |
| даже если |
| оно не имеет расширенной компоновки. Поскольку действия отображаются только у |
| расширенных |
| уведомлений, необходимо, чтобы любое действие, |
| которое пользователь может выполнить из |
| уведомления, было доступно и в соответствующем |
| приложении.</p> |
| |
| <h2 style="clear:left">Уведомления heads-up</h2> |
| <div class="figure" style="width:311px"> |
| <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" /> |
| <p class="img-caption"> |
| Пример уведомления heads-up (входящий телефонный звонок, высокий приоритет), |
| появляющегося поверх |
| приложения с эффектом присутствия |
| </p> |
| </div> |
| |
| <p>Когда поступает уведомление с высоким приоритетом (см. изображение справа), оно в течение короткого времени |
| отображается |
| в расширенной компоновке, позволяя выполнить допустимые действия.</p> |
| <p> Затем уведомление принимает обычный |
| вид. Если для уведомления установлен высокий, максимальный или полноэкранный <a href="#correctly_set_and_manage_notification_priority">приоритет</a> |
| , оно становится уведомлением heads-up.</p> |
| |
| <p><b>Хорошими примерами событий для уведомлений heads-up являются</b></p> |
| |
| <ul> |
| <li> входящий телефонный звонок, во время использования устройства;</li> |
| <li> сигнал будильника во время использования устройства;</li> |
| <li> новое SMS-сообщение;</li> |
| <li> низкий уровень заряда аккумулятора.</li> |
| </ul> |
| |
| <h2 style="clear:both" id="guidelines">Основные рекомендации</h2> |
| |
| |
| <h3 id="MakeItPersonal">Персонализируете уведомление</h3> |
| |
| <p>Уведомление о событии, инициированном другим пользователем (например, сообщение или |
| обновление статуса), должно содержать изображение пользователя, добавленное с помощью |
| {@link android.app.Notification.Builder#setLargeIcon setLargeIcon()}. Кроме того, в метаданные уведомления необходимо включить информацию о |
| пользователе (см. {@link android.app.Notification#EXTRA_PEOPLE}).</p> |
| |
| <p>Главный значок уведомления будет по-прежнему отображаться, чтобы пользователь мог связать |
| его со значком |
| на строке состояния.</p> |
| |
| |
| <img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" /> |
| <p style="margin-top:10px" class="img-caption"> |
| Уведомление, идентифицирующее пользователя-инициатора, и отображающее отправленное содержимое. |
| </p> |
| |
| |
| <h3 id="navigate_to_the_right_place">Выполняйте переход в нужное место</h3> |
| |
| <p>Когда пользователь касается тела уведомления (за пределами кнопок |
| с действиями), должен осуществляться переход в то место приложения, |
| где пользователь сможет просмотреть информацию, о которой извещает уведомление, и действовать в соответствии |
| с нею. В большинстве случаев там будет находиться подробное представление одного элемента данных, например, сообщения, |
| но возможно и |
| сокращенное представление, если накопилось несколько уведомлений. Если приложение переводит |
| пользователя на какой-либо уровень, отличный от верхнего, реализуйте навигацию в стеке переходов назад в приложении, чтобы |
| пользователь мог нажать системную кнопку "Назад" и вернуться на верхний уровень. Дополнительную информацию можно найти в разделе |
| <em>Навигация внутрь приложения с помощью виджетов и уведомлений главного экрана</em> в шаблоне проектирования |
| <a href="{@docRoot}design/patterns/navigation.html#into-your-app">Навигация</a>.</p> |
| |
| <h3 id="correctly_set_and_manage_notification_priority">Правильно выполняйте расстановку приоритетов уведомлений и |
| управление ими |
| </h3> |
| |
| <p>Android поддерживает флаг приоритета для уведомлений. Это флаг позволяет |
| влиять на позицию уведомления среди других уведомлений и |
| гарантировать, |
| что пользователь в первую очередь увидит самые важные уведомления. При отправке уведомления можно выбрать один |
| из |
| следующих уровней приоритета:</p> |
| <table> |
| <tr> |
| <td class="tab0"> |
| <p><strong>Приоритет</strong></p> |
| </td> |
| <td class="tab0"> |
| <p><strong>Использование</strong></p> |
| </td> |
| </tr> |
| <tr> |
| <td class="tab1"> |
| <p><code>MAX</code></p> |
| </td> |
| <td class="tab1"> |
| <p>Применяйте для наиболее важных и неотложных уведомлений, извещающих пользователя |
| о ситуации, |
| критичной по времени или такой, на которую необходимо отреагировать, чтобы продолжить |
| выполнение задачи.</p> |
| </td> |
| </tr> |
| <tr> |
| <td class="tab1"> |
| <p><code>HIGH</code></p> |
| </td> |
| <td class="tab1"> |
| <p>Применяйте, в основном, для передачи важной информации, например, о сообщениях или событиях |
| в чате с содержимым, представляющим особый интерес для пользователя. |
| Уведомления с высоким приоритетом отображаются как уведомления heads-up.</p> |
| </td> |
| </tr> |
| <tr> |
| <td class="tab1"> |
| <p><code>DEFAULT</code></p> |
| </td> |
| <td class="tab1"> |
| <p>Применяйте для всех уведомлений, не входящих ни в одну из описанных здесь категорий.</p> |
| </td> |
| </tr> |
| <tr> |
| <td class="tab1"> |
| <p><code>LOW</code></p> |
| </td> |
| <td class="tab1"> |
| <p>Применяйте для уведомлений, которые должны быть переданы пользователю, но |
| не являются неотложными. Низкоприоритетные уведомления обычно появляются в конце списка, |
| что позволяет использовать их |
| для передачи информации, представляющей всеобщий интерес и не имеющей конкретной направленности. Например, если пользователь подписался |
| на новости, |
| эта информация не должна иметь преимущество перед неотложными или адресными |
| сообщениями.</p> |
| </td> |
| </tr> |
| <tr> |
| <td class="tab1"> |
| <p><code>MIN</code></p> |
| </td> |
| <td class="tab1"> |
| <p>Применяйте для уведомлений, с контекстной или фоновой информацией, такой как прогноз погоды, или с информацией, |
| связанной с местоположением пользователя. |
| Уведомления с минимальным приоритетом не отображаются в строке состояния. Пользователь |
| обнаруживает их при раскрытии панели уведомления.</p> |
| </td> |
| </tr> |
| </table> |
| |
| |
| <h4 id="how_to_choose_an_appropriate_priority"><strong>Как выбрать |
| подходящий |
| приоритет</strong></h4> |
| |
| <p>При выдаче уведомлений с приоритетами <code>DEFAULT</code>, <code>HIGH</code> и <code>MAX</code> существует риск, что деятельность |
| пользователя будет прервана |
| в самом разгаре. Чтобы не раздражать пользователей вашего приложения, применяйте приоритеты этих уровней для |
| уведомлений,</p> |
| |
| <ul> |
| <li> имеющих отношение к другим пользователям;</li> |
| <li> быстро теряющих актуальность;</li> |
| <li> способных немедленно повлиять на поведение пользователя в реальном мире.</li> |
| </ul> |
| |
| <p>Уведомления с приоритетом <code>LOW</code> и <code>MIN</code> могут представлять определенную ценность |
| для пользователя. Значительное количество, если не большинство, уведомлений не требует немедленной |
| реакции пользователя, но, тем не менее, содержит информацию, которую пользователь сочтет |
| ценной, когда решит |
| просмотреть поступившие уведомления. Приоритеты уровней <code>LOW</code> и <code>MIN</code> |
| следует присваивать уведомлениям,</p> |
| |
| <ul> |
| <li> не имеющим прямого отношения к другим пользователям;</li> |
| <li> долго не теряющим актуальность;</li> |
| <li> содержащим информацию, способную заинтересовать пользователя, если он решит |
| просмотреть их в свободное время.</li> |
| </ul> |
| |
| |
| <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" /> |
| |
| |
| <h3 style="clear:both" id="set_a_notification_category">Определите категорию |
| уведомления</h3> |
| |
| <p>Если уведомление попадает в одну из заранее определенных категорий (см. |
| ниже), укажите его |
| категорию. Процессы системного пользовательского интерфейса, например, панель уведомления (или любой |
| другой процесс-слушатель |
| уведомлений) могут воспользоваться этой информацией при классификации и фильтрации уведомлений.</p> |
| <table> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p> |
| </td> |
| <td> |
| <p>Входящий звонок (голосовой или по видеосвязи) или алогичный запрос синхронной |
| связи</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p> |
| </td> |
| <td> |
| <p>Входящее личное сообщение (SMS-сообщение, мгновенное сообщение и т. д.)</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p> |
| </td> |
| <td> |
| <p>Асинхронное массовое сообщение (по электронной почте)</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p> |
| </td> |
| <td> |
| <p>Событие в календаре</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p> |
| </td> |
| <td> |
| <p>Промоакция или реклама</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p> |
| </td> |
| <td> |
| <p>Сигнал будильника или таймера</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p> |
| </td> |
| <td> |
| <p>Информация о ходе выполнения длительной фоновой операции</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p> |
| </td> |
| <td> |
| <p>Новости, поступившие из социальной сети или касающиеся совместного использования ресурсов</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p> |
| </td> |
| <td> |
| <p>Ошибка в фоновой операции или статусе аутентификации</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p> |
| </td> |
| <td> |
| <p>Управление передачей медиаданных для воспроизведения</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p> |
| </td> |
| <td> |
| <p>Обновление статуса системы или устройства. Зарезервировано для использования системой.</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p> |
| </td> |
| <td> |
| <p>Индикация работающей фоновой службы</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p> |
| </td> |
| <td> |
| <p>Конкретная и привязанная ко времени рекомендация относительно одного объекта. Например, приложение |
| новостей может |
| порекомендовать пользователю, какую новость читать следующей.</p> |
| </td> |
| </tr> |
| <tr> |
| <td> |
| <p><code><a |
| href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p> |
| </td> |
| <td> |
| <p>Текущая информация о статусе устройства или контекста</p> |
| </td> |
| </tr> |
| </table> |
| |
| <h3 id="summarize_your_notifications">Суммируйте уведомления</h3> |
| |
| <p>Если при наличии ожидающего уведомления определенного типа приложение пытается отправить новое |
| уведомление того же типа, объедините их в одно сводное уведомление от этого приложения. Не |
| создавайте новый объект.</p> |
| |
| <p>Сводное уведомление формирует сводное описание и дает пользователю возможность |
| понять, сколько |
| имеется ожидающих уведомлений того или иного типа.</p> |
| |
| <div class="col-6"> |
| |
| <p><strong>Неправильно</strong></p> |
| <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" /> |
| </div> |
| |
| <div> |
| <p><strong>Правильно</strong></p> |
| |
| <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" /> |
| </div> |
| |
| <p style="clear:left; padding-top:30px; padding-bottom:20px">Разработчик может сообщить |
| подробности об отдельных уведомлениях, образующих |
| сводное, используя расширенную компоновку для резюме. Такой подход позволит пользователям |
| лучше разобраться, какие |
| уведомления ожидают прочтения, и достаточно ли они интересны, чтобы ознакомиться с ними |
| более подробно в |
| соответствующем приложении.</p> |
| <div class="col-6"> |
| <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" /> |
| <p class="img-caption"> |
| Расширенное и сжатое сводное уведомление (с использованием <code>InboxStyle</code>) |
| </p> |
| </div> |
| |
| <h3 style="clear:both" id="make_notifications_optional">Сделайте уведомления |
| необязательными</h3> |
| |
| <p>В распоряжении пользователей всегда должен быть метод управления уведомлениями. Предоставьте пользователю возможность |
| отключать уведомления, поступающие от вашего приложения, |
| или изменять способы оповещения, такие как звуковой сигнал и |
| вибрация. |
| С этой целью следует предусмотреть пункт настройки уведомлений в настройках приложения.</p> |
| |
| <h3 id="use_distinct_icons">Используйте отчетливые значки</h3> |
| <p>Беглого взгляда на область уведомлений должно быть достаточно, чтобы распознать |
| типы |
| ожидающих уведомлений.</p> |
| |
| <div class="figure"> |
| <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" /> |
| </div> |
| |
| <div><p><strong>Правильно</strong></p> |
| <p>Рассмотрите уже существующие значки уведомлений от приложений Android и создайте |
| собственные, |
| достаточно уникальные.</p> |
| |
| <p><strong>Правильно</strong></p> |
| <p>Придерживайтесь подходящего <a href="/design/style/iconography.html#notification">стиля значков уведомления</a> |
| для мелких значков, и |
| <a href="/design/style/iconography.html#action-bar">стиля строки |
| действий</a> Material Light для значков |
| действий.</p> |
| <p ><strong>Правильно</strong></p> |
| <p >Стремитесь к визуальной простоте значков, избегайте излишних трудноразличимых |
| деталей.</p> |
| |
| <div><p><strong>Неправильно</strong></p> |
| <p>Применяйте к мелким значкам и значкам действий дополнительные альфа-эффекты |
| (постепенное появление/исчезание). |
| К их краям может быть применено сглаживание, но, поскольку в Android эти значки |
| служат масками (то есть, |
| используется только альфа-канал), изображение, как правило, должно отображаться полностью |
| непрозрачным.</p> |
| |
| </div> |
| <p style="clear:both"><strong>Неправильно</strong></p> |
| |
| <p>Чтобы ваше приложение отличалось от других, используйте цвет. Значки уведомлений должны |
| представлять собой изображение белого цвета на прозрачном фоне.</p> |
| |
| |
| <h3 id="pulse_the_notification_led_appropriately">Правильно используйте индикатор |
| уведомлений</h3> |
| |
| <p>На многих устройствах Android имеется светодиодный индикатор уведомлений, |
| информирующий пользователя о |
| событиях, когда экран выключен. Уведомления с приоритетом <code>MAX</code>, |
| <code>HIGH</code> или <code>DEFAULT</code> должны |
| вызывать свечение индикатора, а уведомления с низким приоритетом (<code>LOW</code> и |
| <code>MIN</code>) не должны.</p> |
| |
| <p>Возможности пользователя управлять уведомлениями должны распространяться на светодиодный индикатор. Когда разработчик использует |
| DEFAULT_LIGHTS, |
| индикатор светится белым цветом. Ваши уведомления не должны вызывать свечение другим |
| цветом, если |
| пользователь не указал этого явным образом.</p> |
| |
| <h2 id="building_notifications_that_users_care_about">Создание уведомлений, |
| важных для пользователя</h2> |
| |
| <p>Чтобы пользователям понравилось ваше приложение, необходимо тщательно |
| продумать его уведомления. |
| Уведомления — это голос приложения. Они определяют его |
| индивидуальность. Ненужные или |
| несущественные уведомления раздражают пользователя и заставляют его возмущаться тем, как много |
| внимания требует от него |
| приложение. Поэтому необходимо применять уведомления взвешенно.</p> |
| |
| <h3 id="when_to_display_a_notification">Ситуации, в которых следует показывать уведомления</h3> |
| |
| <p>Чтобы создать приложение, от работы с которым пользователи получат удовольствие, необходимо |
| осознать, что внимание пользователя |
| является ресурсом, требующим бережного обращения. Система уведомлений |
| Android была разработана |
| так, чтобы как можно меньше отвлекать пользователя. |
| Однако |
| вы должны отдавать себе отчет в том, что уведомления прерывают |
| деятельность пользователя. |
| Планируя уведомления, спрашивайте себя, достаточно ли они важны, чтобы |
| послужить основанием для такого прерывания. В случае сомнений предоставьте пользователю возможность запросить |
| в настройках приложения получение уведомления или измените |
| приоритет уведомления на <code>LOW</code> или <code>MIN</code>, чтобы |
| не отвлекать пользователя от |
| текущих занятий.</p> |
| |
| <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" /> |
| <p style="margin-top:10px" class="img-caption"> |
| Примеры уведомлений, быстро теряющих актуальность |
| </p> |
| |
| <p>Хотя правильно работающие приложения ведут себя неназойливо, бывают ситуации, |
| заслуживающие того, чтобы приложение по своей инициативе прервало деятельность пользователя уведомлением.</p> |
| |
| <p>Отправляйте уведомления только в случае <strong>событий, требующих неотложной реакции</strong>, особенно |
| если эти синхронные события <strong>имеют прямое отношение к другим пользователям</strong>. Например, |
| чат |
| представляет собой форму синхронного общения в реальном времени, — другой пользователь |
| с нетерпением ожидает вашего ответа. События в календаре являются еще одним хорошим примером ситуации, в которой следует выдать |
| уведомление и завладеть |
| вниманием пользователя, потому что в приближающееся календарное событие часто |
| вовлечены другие люди.</p> |
| |
| <h3 style="clear:both" id="when_not_to_display_a_notification">Ситуации, |
| в которых не следует показывать уведомления</h3> |
| |
| <div class="figure" style="margin-top:60px"> |
| <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" /> |
| </div> |
| |
| <p>В большинстве остальных случаев уведомления неуместны.</p> |
| |
| <ul> |
| <li> Не следует извещать пользователя о событиях, не имеющих отношения |
| к нему конкретно, или |
| не теряющих актуальность со временем. Например, асинхронные |
| и безадресные новости, |
| циркулирующие в социальных сетях, как правило, не требуют немедленного |
| привлечения внимания. Пользователям, |
| действительно интересующимся таким новостями, предоставьте возможность запросить соответствующие уведомления.</li> |
| <li> Не генерируйте уведомление, если релевантная свежая информация уже находится |
| на экране. Вместо этого |
| воспользуйтесь интерфейсом самого приложения, чтобы донести до пользователя новую информацию |
| непосредственно в контексте. |
| Например, приложение-чат не должно генерировать системные уведомления, |
| пока пользователь активно общается с собеседником.</li> |
| <li> Не отвлекайте пользователя ради низкоуровневых технических действий, такие как сохранение |
| или синхронизация информации или обновление приложения, если приложение или система способны выполнить задачу |
| без вмешательства пользователя.</li> |
| <li> Не отвлекайте пользователя, чтобы проинформировать его об ошибке, если |
| приложение может восстановиться после нее самостоятельно, не требуя от пользователя |
| никаких действий.</li> |
| <li> Не создавайте уведомления, не имеющие осмысленного содержимого и |
| всего лишь рекламирующие ваше |
| приложение. Уведомление должно нести полезную, актуальную и новую информацию. Не следует |
| использовать его |
| исключительно для презентации приложения.</li> |
| <li> Не создавайте избыточные уведомления только для того, чтобы продемонстрировать свой бренд |
| пользователям. |
| Такие уведомления раздражают и отталкивают аудиторию. Лучший |
| способ сообщать |
| новую информацию небольшими порциями и поддерживать связь пользователей |
| с вашим |
| приложением заключается в том, чтобы разработать виджет, который они смогут поместить на |
| главный экран.</li> |
| </ul> |
| |
| <h2 style="clear:left" id="interacting_with_notifications">Взаимодействие с |
| уведомлениями</h2> |
| |
| <p>Уведомления обозначаются значками в строке состояния. Чтобы получить к ним доступ, |
| следует открыть |
| панель уведомлений.</p> |
| |
| <p>Если коснуться уведомления, откроется соответствующее приложение с подробным содержимым, |
| связанным с эти уведомлением. |
| Если провести пальцем по уведомлению влево или вправо, оно будет удалено из панели.</p> |
| |
| <h3 id="ongoing_notifications">Постоянные уведомления</h3> |
| <div class="figure" style="width:311px"> |
| <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" /> |
| <p class="img-caption"> |
| Постоянные уведомления при воспроизведении музыки |
| </p> |
| </div> |
| <p>Постоянные уведомления информируют пользователя о текущих фоновых |
| процессах. |
| Например, плееры сообщают через систему уведомлений информацию о дорожке, |
| воспроизводимой в данный момент, и |
| это продолжается, пока пользователь не остановит воспроизведение. Кроме того, постоянные уведомления могут |
| информировать пользователя |
| о ходе выполнения длительных задач, таких как загрузка файла или кодирование видеоданных. Пользователь не может вручную |
| удалить постоянное уведомление из панели уведомлений.</p> |
| |
| <h3 id="ongoing_notifications">Воспроизведение медиаданных</h3> |
| <p>В Android 5.0 на экране блокировки не отображаются элементы управления воспроизведением от устаревшего |
| класса {@link android.media.RemoteControlClient}. Однако на нем <em>отображаются</em> уведомления, так что теперь каждое |
| уведомление приложения о воспроизведении является для пользователей основным |
| способом управления воспроизведением в заблокированном состоянии. В результате у приложения появляется больше возможностей |
| управлять тем, какие |
| кнопки отображать, и каким образом. При этом с точки зрения пользователя система ведет себя непротиворечиво, |
| независимо от того, заблокирован ли экран.</p> |
| |
| <h3 style="clear:both" |
| id="dialogs_and_toasts_are_for_feedback_not_notification">Диалоговые окна |
| и всплывающие уведомления</h3> |
| |
| <p>Приложение, не отображаемое на экране, не должно генерировать диалоговое окно или всплывающее |
| уведомление. Диалоговое окно или всплывающее уведомление |
| должно появляться исключительно в качестве немедленной реакции на действия пользователя |
| в приложении. |
| Более подробные рекомендации по использованию диалоговых окон и всплывающих уведомлений см. в разделе |
| <a href="/design/patterns/confirming-acknowledging.html">Подтверждение и уведомление</a>.</p> |
| |
| <h3>Упорядочение уведомлений по степени важности</h3> |
| |
| <p>По своей сути уведомления — это новости, и поэтому они принципиально отображаются в |
| обратном хронологическом порядке. |
| При этом обязательно принимается во внимание |
| <a href="#correctly_set_and_manage_notification_priority">приоритет</a>, установленный приложением.</p> |
| |
| <p>Уведомления являются важной составляющей экрана блокировки и отображаются на видном месте |
| каждый |
| раз, когда включается дисплей устройства. На экране блокировки мало свободного места, поэтому |
| исключительно важно |
| выявлять неотложные или наиболее релевантные уведомления. По этой |
| причине Android применяет |
| сложный алгоритм сортировки уведомлений, в котором учитываются</p> |
| |
| <ul> |
| <li> временная метка и приоритет, установленный приложением;</li> |
| <li> тот факт, что уведомление только что оповестило пользователя звуковым сигналом |
| или вибрацией (иными словами, |
| если телефон издает звуки, и пользователь хочет узнать, в чем |
| дело, то на экране блокировки |
| должен находиться ответ, понятный с первого взгляда);</li> |
| <li> пользователи, связанные с уведомлением при помощи {@link android.app.Notification#EXTRA_PEOPLE}, |
| и, в частности, присутствие их в списке помеченных контактов.</li> |
| </ul> |
| |
| <p>Чтобы воспользоваться преимуществами этой сортировки наилучшим образом, думайте в первую очередь о создании |
| удобных условий для |
| пользователя, и не нацеливайтесь на конкретное место в рейтинге.</p> |
| |
| <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" /> |
| |
| <p class="img-caption" style="margin-top:10px">Уведомления от Gmail имеют |
| приоритет DEFAULT, поэтому они |
| обычно оказываются ниже уведомлений от приложений мгновенного обмена сообщениями, таких как Hangouts, но |
| поднимаются в списке |
| на некоторое время, когда поступают новые сообщения. |
| </p> |
| |
| |
| <h3>Уведомления на экране блокировки</h3> |
| |
| <p>Поскольку уведомления видны на экране блокировки, защита конфиденциальной информации пользователей приобретает |
| особо |
| важное значение. Уведомления нередко содержат частную информацию, и они |
| не должны быть доступны |
| каждому, кто взял в руки устройство и включил дисплей.</p> |
| |
| <ul> |
| <li> У устройств, экран блокировки которых защищен (при помощи PIN-кода, графического ключа или пароля), интерфейс имеет |
| общедоступную и закрытую части. Элементы общедоступного интерфейса отображаются на защищенном экране блокировки и |
| следовательно, видны всем. Закрытый интерфейс находится "позади" экрана блокировки и |
| доступен только пользователю, выполнившему вход в устройство.</li> |
| </ul> |
| |
| <h3>Возможности пользователя контролировать информацию, отображаемую на экране блокировки</h3> |
| <div class="figure" style="width:311px"> |
| <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" /> |
| <p class="img-caption"> |
| Уведомления на экране блокировки с содержимым, отображаемым после того, как пользователь разблокирует устройство. |
| </p> |
| </div> |
| |
| <p>При настройке защиты экрана блокировки пользователь может предпочесть, |
| чтобы конфиденциальные данные не отображались на защищенном экране блокировки. В этом случае системный пользовательский интерфейс |
| учитывает <em>уровень видимости</em> уведомления, чтобы выяснить, какую информацию |
| можно отображать без риска.</p> |
| <p> Чтобы установить уровень видимости, вызовите |
| <code><a |
| href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code> |
| и укажите одно из следующих значений:</p> |
| |
| <ul> |
| <li><code><a |
| href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>. |
| Содержимое уведомления отображается полностью. |
| Это значение принимается системой по умолчанию, если уровень видимости не указан.</li> |
| <li><code><a |
| href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>. |
| На экране блокировки отображается основная информация о наличии уведомления, включая его |
| значок и название приложения, отправившего его. Прочие данные уведомления скрыты. |
| Здесь уместно дать разработчику пару рекомендаций. |
| <ul> |
| <li> Если вы хотите реализовать отдельную общедоступную версию уведомления, |
| которую система будет отображать на экране блокировки, создайте замещающий |
| объект Notification в поле<code><a |
| href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code>. |
| |
| <li> Этот параметр предоставляет приложению возможность создавать "цензурированную" версию |
| содержимого, достаточно информативную, но скрывающую личную информацию. Рассмотрим в качестве примера приложение для отправки |
| SMS-сообщений. Его уведомления содержат текст SMS-сообщения и имя и контактный значок отправителя. |
| Такое уведомление должно иметь атрибут <code>VISIBILITY_PRIVATE</code>, но его версия <code>publicVersion</code> может |
| содержать полезную информацию, например, "3 новых сообщения", без уточняющих |
| подробностей. |
| </ul> |
| </li> |
| <li><code><a |
| href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>. Отображается минимум информации, |
| даже без значка уведомления.</li> |
| </ul> |
| <h2 style="clear:both" id="notifications_on_android_wear">Уведомления на |
| Android Wear</h2> |
| |
| <p>По умолчанию уведомления и их <em>действия</em> передаются на носимые устройства. |
| Разработчики могут управлять тем, какие уведомления следует передавать с |
| телефона на часы, |
| и наоборот. У разработчиков также есть возможность управлять передачей действий. Если |
| приложение включает в себя |
| действия, которые невозможно выполнить одним касанием, нужно либо скрывать их |
| в уведомлениях, отображаемых на носимом |
| устройстве, либо обеспечить их привязку к приложению под управлением Android Wear, позволив пользователю |
| совершать действие |
| на часах.</p> |
| |
| <h4>Передача уведомлений и действий на другое устройство</h4> |
| |
| <p>Подключенное устройство, например, телефон, может передавать уведомления на носимое устройство, |
| чтобы они отображались и на нем. Аналогичным образом можно передавать действия, чтобы пользователь мог реагировать |
| на уведомления непосредственно на носимом устройстве.</p> |
| |
| <p><strong>Передавайте</strong></p> |
| |
| <ul> |
| <li> новые мгновенные сообщения;</li> |
| <li> действия, выполняемые одним касанием, например, "+1", "Лайк", "Сердечко".</li> |
| </ul> |
| |
| <img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" /> |
| |
| <p><strong>Не передавайте</strong></p> |
| |
| <ul> |
| <li> уведомления о новых подкастах;</li> |
| <li> действия, соответствующие функциям, недоступным на часах.</li> |
| </ul> |
| |
| |
| |
| <p><h4>Уникальные действия, определяемые для носимых устройств</h4></p> |
| |
| <p>Некоторые действия можно выполнить только на носимых устройствах, например:</p> |
| |
| <ul> |
| <li> выбор из списка шаблонных ответов, например, "Скоро вернусь"</li> |
| <li> действие "Открыть на телефоне";</li> |
| <li> действия "Прокомментировать" или "Ответить", открывающие окно речевого ввода;</li> |
| <li> действия, запускающие приложения, специфичные для Android Wear.</li> |
| </ul> |
| |
| <img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" /> |