Разработка мобильных приложений на платформе 1С открывает широкие возможности для взаимодействия с пользователем. Одной из самых востребованных функций является система уведомлений. Часто разработчики ищут способы оповестить пользователя о событии без использования сложных внешних сервисов (таких как Firebase Cloud Messaging или Apple Push Notification Service). В этой статье мы подробно разберем, как реализовать механизм локальных уведомлений, которые создаются и срабатывают непосредственно на устройстве пользователя.
Прежде всего, проанализируем терминологию, чтобы избежать путаницы. Push-уведомления (удаленные) отправляются с внешнего сервера на мобильное устройство. Для их работы требуется регистрация приложения в кабинетах разработчиков Google и Apple, получение специальных ключей и сертификатов. Локальные уведомления, которые мы рассматриваем, планируются самим кодом приложения. Они идеально подходят для напоминаний, задач или уведомлений о событиях, время которых известно заранее (например, напоминание о встрече или окончании срока действия документа).
Для работы с уведомлениями в 1С используется объект ДоставляемоеУведомление. Рассмотрим базовый пример создания уведомления, который можно использовать в модуле управляемой формы или в общем модуле на стороне клиента. Нам необходимо убедиться, что код выполняется именно в контексте мобильного приложения, для этого будем использовать инструкции препроцессора.
Разберем следующий пример кода:
#Если МобильноеПриложениеКлиент Тогда
// Создаем объект уведомления
Уведомление = Новый ДоставляемоеУведомление;
// Настраиваем основные свойства
Уведомление.Заголовок = "Новое событие";
Уведомление.Текст = "Проверьте данные в документе: " + Объект.Наименование;
// В свойство Данные можно передать любую информацию,
// которую мы захотим извлечь при нажатии на уведомление
Уведомление.Данные = Объект.Ссылка;
// Настройка времени срабатывания (очень важный момент!)
Уведомление.ДатаПоявленияУниверсальноеВремя = УниверсальноеВремя(ТекущаяДата() + 60); // Через 1 минуту
// Настройка звука
Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.ПоУмолчанию;
// Добавляем уведомление в очередь системы
ДоставляемыеУведомления.ДобавитьЛокальноеУведомление(Уведомление);
#КонецЕсли
Часто разработчики сталкиваются с ситуацией: код выполнен без ошибок, но на экране телефона ничего не происходит. Выясним основные причины этой проблемы и способы их решения.
1. Параметры времени. Свойство ДатаПоявленияУниверсальноеВремя ожидает время в формате UTC (универсальное время). Если вы передадите локальное время вашего часового пояса, система может запланировать уведомление на несколько часов позже или раньше. Всегда используйте функцию УниверсальноеВремя() для корректной работы.
2. Состояние приложения. По умолчанию, если приложение открыто и находится в фокусе (активно на экране), операционная система может не показывать всплывающий баннер, считая, что пользователь и так находится в программе. Чтобы проверить работоспособность, выполните код и сразу сверните приложение.
3. Разрешения операционной системы. В современных версиях Android (начиная с 13-й версии) и iOS приложения обязаны запрашивать разрешение на показ уведомлений. Проанализируем, как это работает: при первом запуске или при попытке создания уведомления система должна выдать запрос пользователю. Если пользователь отклонил запрос, уведомления будут блокироваться на уровне ОС. Проверьте настройки разрешений для вашего приложения в меню телефона.
4. Настройки сборки мобильного приложения. Это критически важный момент. При использовании «Сборщика мобильных приложений» необходимо убедиться, что в настройках (вкладка «Возможности») установлена галочка «Уведомления». Если эта опция выключена при сборке .apk или .ipa файла, объект ДоставляемыеУведомления работать не будет.
Для удобства разработки разберем создание универсальной функции, которую можно вызывать из разных частей конфигурации. Это позволит стандартизировать вид уведомлений и упростить отладку.
&НаКлиенте
Процедура ЗапланироватьНапоминание(Заголовок, Текст, СсылкаНаОбъект, СекундДоСтарта)
Уведомление = Новый ДоставляемоеУведомление;
Уведомление.Заголовок = Заголовок;
Уведомление.Текст = Текст;
Уведомление.Данные = СсылкаНаОбъект;
// Планируем срабатывание
Уведомление.ДатаПоявленияУниверсальноеВремя = УниверсальноеВремя(ТекущаяДата() + СекундДоСтарта);
// Устанавливаем иконку приложения (числовой индекс, если поддерживается)
Уведомление.ИнтервалПовтора = 0; // Без повторений
ДоставляемыеУведомления.ДобавитьЛокальноеУведомление(Уведомление);
Сообщить("Уведомление запланировано на: " + (ТекущаяДата() + СекундДоСтарта));
КонецПроцедуры
Просто показать текст в шторке телефона недостаточно. Выясним, как сделать так, чтобы при нажатии на уведомление в 1С открывалась нужная форма документа. Для этого необходимо использовать обработчики событий в Модуле приложения.
Рассмотрим процедуру ПриНажатииНаДоставляемоеУведомление. Именно она вызывается платформой, когда пользователь тапает по сообщению в системной шторке.
Процедура ПриНажатииНаДоставляемоеУведомление(Уведомление)
// Извлекаем данные, которые мы сохранили в свойство .Данные при создании
СсылкаНаДокумент = Уведомление.Данные;
Если ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
// Открываем форму документа пользователю
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);
ОткрытьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы);
КонецЕсли;
КонецПроцедуры
Также существует обработчик ПриПолученииДоставляемогоУведомления. Он срабатывает в тот момент, когда уведомление «прилетает» на устройство. Если приложение в этот момент активно, вы можете программно решить: показывать ли его пользователю или выполнить какое-то фоновое действие без визуального оповещения.
Если ваша задача — просто привлечь внимание пользователя, пока он работает внутри приложения, и вам не нужно выводить сообщение в системную шторку (когда приложение закрыто), рассмотрим более простой метод: ПоказатьОповещениеПользователя. Этот метод работает во всех версиях платформы и не требует специальных разрешений ОС.
ПоказатьОповещениеПользователя(
"Внимание!",
ПолучитьНавигационнуюСсылку(Объект.Ссылка),
"Данные успешно обновлены",
СтатусОповещения.Важное
);
Этот способ выведет всплывающее окно в нижней части экрана. Оно удобно тем, что содержит кликабельную ссылку, которая сразу переведет пользователя к нужному объекту 1С.
Для того чтобы окончательно убедиться в корректности ваших настроек, выполните следующие шаги:
Соблюдение этих простых правил и использование приведенных примеров кода позволит вам создать качественный и удобный интерфейс взаимодействия с пользователем в вашем мобильном решении на базе 1С:Предприятия.