Заметки из Зазеркалья

28.09.2020

Запуск мобильных приложений 1С из внешних источников

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Реализовано в версии мобильной платформы 8.3.18.47

На текущий момент единственный способ запустить мобильное приложение, созданное на мобильной платформе 1С (или мобильный клиент 1С), не нажимая непосредственно на иконку приложения – через PUSH или локальное уведомление.

В версии мобильной платформы 8.3.18 появится возможность запускать мобильное приложение "1С:Предприятия" (приложение, созданное на мобильной платформе 1С, или мобильный клиент 1С) из другого мобильного приложения или с использованием некоторого URL.

Эта возможность может потребоваться для решения различных задач интеграции мобильных приложений (как внешних приложений и сервисов с мобильными приложениями 1С, так и мобильных приложений 1С между собой).

В частности, появятся новые возможности:

  • Вызов конкретной функции мобильного приложения из другого приложения.

  • Возможность использовать некоторый URL для того, чтобы открыть мобильное приложение на конкретном объекте или функции.

Примеры сценариев использования новой функциональности:

  • Пользователю пришло письмо по электронной почте (SMS, сообщение в мессенджере) c акцией по промокоду. Пользователь нажимает на ссылку «Воспользоваться», открывается мобильное приложение 1С, поле с промокодом автоматически заполняется.

  • Пользователю присылается в Документообороте (например, в письме, или через Систему взаимодействия) ссылка на документ в Клиенте ЭДО. При нажатии на ссылку запускается мобильное приложение "Клиент ЭДО" и открывается требуемый объект.

Для реализации возможности вызова мобильного приложения из другого приложения, используются глубинные ссылки (deep linking) и механизм глубинного связывания. Глубинная ссылка - это URL, который указывает на какой-то ресурс на сайте или в приложении. А глубинное связывание - это механизм, который позволит мобильной операционной системе связать URL и мобильное приложение, установленное на устройстве.

Глубинная ссылка может быть сформирована двумя способами:

  • С использованием собственной схемы (например, myfuncapp://). В этом случае URL для вызова будет иметь вид myfuncapp://comand?params.

  • С использованием схемы HTTP(S). Этот способ предполагает, что URL глубинной ссылки принадлежит схемам http:// или https://. Работа глубинного связывания в этом случае возможна только с использованием реального веб-сайта, доступ к которому должен быть у разработчика мобильного приложения (или, более глобально, всей схемы интеграции приложения и сайта). Этот доступ необходим для того, чтобы разместить в определенном каталоге сайта (из глубинной ссылки) определенные файлы.

В модуле приложения добавлена возможность реализации нового обработчика:

ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке,
  СтандартнаяОбработка)
В случае перехода по глубинной ссылке в мобильном приложении будет вызван этот обработчик.

Пример использования механизма

Предположим, мы хотим, чтобы наше мобильное приложение могло запускаться извне с помощью навигационных ссылок, созданных с использованием схемы myapp, а также с помощью ссылок, начинающихся с https://my.site.com/path/for/service.
Для этого нам необходимо сделать следующее:
  1. Создать сайт my.site.com со всей вложенной структурой my.site.com/path/for/service и сделать его доступным по протоколу https. Кроме того, на сайте должны быть размещены  определенные файлы (как было описано выше, подробнее – в документации).
  2. В нашей конфигурации необходимо реализовать обработчик события ОбработкаПереходаПоНавигационнойСсылке(). Этот обработчик в качестве параметров получит полную информацию о том URL, нажатие на который вызвало переход в наше мобильное приложение.
  3. В Конфигураторе надо указать, на какие схемы или фрагменты URL «подписывается» конфигурация (через новое свойство «Навигационные ссылки мобильного приложения»).
    img-01.png
  4. В сборщике мобильных приложений нужно указать, какая конфигурация собираемого мобильного приложения будет обрабатывать какую схему или URL. Также с помощью сборщика собираемое мобильное приложение получает все настройки, которые нужны для реализации реакции приложения на глубинные ссылки.
На мобильном устройстве в ходе работы нашего приложения произойдёт следующая последовательность событий:
  • После установки на мобильное устройство приложение регистрирует в мобильной операционной системе глубинные ссылки, которое оно (приложение) может обрабатывать.

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

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

  • В мобильном приложении срабатывает обработчик события ОбработкаПереходаПоНавигационнойСсылке, который и получает на вход глубинную ссылку, которая привела к запуску мобильного приложения.

Запуск мобильного приложения 1С в Android через механизм намерений (intent)

При запуске мобильного приложения 1С через URL мы можем передавать дополнительные параметры только в строковом виде. К тому же существует ограничение на длину URL (оно зависит от конкретной версии ОС).
В ОС Android мы дополнительно поддержали возможность запуска мобильных приложений 1С из других приложений через механизм намерений (intent).  Это позволяет передавать в приложение различные типы данных (например, массивы), что увеличивает объем передаваемой в приложение информации.
В качестве иллюстрации приведем код на 1С (аналогичный код может быть написан на любом языке, поддерживаемом в Android):

Запуск = Новый ЗапускПриложенияМобильногоУстройства("android.intent.action.VIEW",
"myappfunc://testPath?key1=" + ЧисловойПараметр); 

Запуск.ДополнительныеДанные.Добавить("key2", СтроковыйПараметр);

Если Запуск.ПоддерживаетсяЗапуск() Тогда

    Запуск.Запустить(Ложь);

 КонецЕсли;
При использовании этой функциональности надо учитывать следующее:
  • В настоящий момент поддерживается только действие android.intent.action.VIEW.
  • Схема myappfunc:// должна быть указана как поддерживаемая для ОС Android в собираемом мобильном приложении.
В этом примере вызываемое мобильное приложение передается два параметра:
  1. Числовой параметр с идентификатором key1 передается непосредственно в URL глубинной ссылки.
  2. Строковый параметр key2 передается путем явного указания параметра в списке дополнительных данных объекта, описывающего вызов намерения.
Для реакции вызываемого мобильного приложения на этот вызов в модуле клиентского приложения должен быть описан обработчик следующего вида:

Процедура ОбработкаПереходаПоНавигационнойСсылке(ДанныеПереходаПоНавигационнойСсылке,
  СтандартнаяОбработка)

  БазоваяСсылка = ДанныеПереходаПоНавигационнойСсылке.БазоваяНавигационнаяСсылка;

  Путь = ДанныеПереходаПоНавигационнойСсылке.ОтносительнаяНавигационнаяСсылка;

  ДопДанные = 

 ДанныеПереходаПоНавигационнойСсылке.ДополнительныеДанныеПереходаВМобильноеПриложение;   

  Параметр1 = 

  ДанныеПереходаПоНавигационнойСсылке.ПараметрыНавигационнойСсылки.Получить("key1");

  Параметр2 = ДопДанные.Получить("key2");

  Сообщение = "Произошел запуск по ссылке:" + Символы.ПС +

                          "Базовая ссылка: " + БазоваяСсылка + Символы.ПС +

                          "Относительный путь: " + Путь + Символы.ПС +

                          "Параметр 1: " + Параметр1 + Символы.ПС +

                          "Параметр 2: " + Параметр2;

  Сообщить(Сообщение);

  СтандартнаяОбработка = Ложь;

КонецПроцедуры


Теги: мобильная платформа  мобильный клиент  8.3.18 

Рассказать друзьям: