Техническое описание мини-аппов
Дополнительная документация
Общая информация — в документе описано, что такое мини-аппы, и как они выглядят в клиентском приложении VK Teams.
Создание мини-аппа — в документе описано создание мини-аппа в VK Teams с использованием библиотеки VK Teams Bridge.
Библиотека VK Teams Bridge — в документе описаны методы взаимодействия мини-аппа с нативным клиентом VK Teams.
Регистрация мини-аппа — в документе описана регистрация мини-аппа при помощи Метабота VK Teams.
Публикация мини-аппа в панель сервисов VK Teams — в документе описаны способы публикации мини-аппа для отображения в в панели сервисов VK Teams.
FAQ — в разделе собраны часты вопросы при работе с мини-аппами.
Архитектура и описание системы — в документе представлена информация о сервисах VK Teams, обеспечивающих функциональность мини-аппов. Не является частью публичной документации, обратитесь к представителю VK Tech, чтобы ознакомиться с документом.
Общие сведения
Мини-апп является веб-приложением, которое открывается в VK Teams при помощи встроенного браузера:
- В веб-версии для его отображения используется компонент Sandboxed iframe.
- В десктоп- и мобильных приложениях — WebView.
Разработка мини-аппа
VK Teams не содержит инструментов для веб-разработки, поэтому предполагается самостоятельная разработка веб-приложений для интеграции.
Разработчик вправе использовать любые технологии веб-разработки.
Ниже в документации описаны некоторые особенности и ограничения работы мини-аппов в клиентских приложениях VK Teams, а также инструкции по регистрации мини-аппа, включая SDK для взаимодействия мини-аппа и клиентского приложения.
Обязательным условием для работоспособности мини-аппа в VK Teams является подключение библиотеки VK Teams Bridge для взаимодействия с клиентским приложением.
Выполнение запросов
Чтобы упростить аутентификацию и авторизацию клиента, а также чтобы обеспечить безопасность и повысить производительность, загрузка мини-аппа и выполнение Same Origin запросов к API происходит через сервер VK Teams. Взаимодействие сервера VK Teams и сервера мини-аппа осуществляется через интернет, только если сервер мини-аппа не размещен в локальной сети сервера VK Teams администратором кластера.
Для взаимной аутентификации сервера VK Teams и сервера мини-аппа используются SSL-сертификаты. При установлении SSL-соединения от сервера VK Teams к серверу мини-аппа сервер VK Teams проверяет, что полученная цепочка сертификатов ведет к корневому сертификату, указанному при создании (редактировании) мини-аппа. В свою очередь, сервер VK Teams также использует клиентский SSL-сертификат для предоставления серверу мини-аппа возможности удостовериться в подлинности источника запроса. Корневой клиентский сертификат VK Teams может быть получен от администратора кластера.
Схема загрузки и выполнения сетевых запросов мини-аппами представлена ниже:
Выполнение запросов к сторонним API
Также есть возможность выполнять API-запросы к сторонним API напрямую из клиента мини-аппа. Это делается путём добавления разрешённых хостов в настройки мини-аппа.
Для этого владелец мини-аппа должен перейти в Метабота и выполнить следующие шаги:
- Отправить боту команду /myapps.
- Выбрать мини-апп для настройки.
- Выбрать опцию «Set allowed cross-origin API hosts» и следовать инструкциям Метабота.
Авторизация в мини-аппе через сторонних провайдеров
При необходимости авторизации пользователя внутри мини-аппа методом OAuth2.0 следует воспользоваться PKCE-flow.
Инициализация процесса авторизации и возврат мини-аппу кода авторизации выполняется через библиотеку VK Teams Bridge при помощи запроса OpenAuthModal.
Интерфейс мини-аппа
В качестве UI-фреймворка для мини-аппа может быть использована любая дизайн-система.
Рекомендации к интерфейсу мини-аппа:
-
Адаптивная вёрстка
Мини-апп может использоваться в клиентских приложениях любых платформ — десктоп- , веб- и мобильные приложения. Мы рекомендуем разрабатывать адаптивную вёрстку мини-аппа для любых экранов для наиболее комфортного использования у пользователей.
-
Переключение светлой и тёмной темы
Клиентские приложения VK Teams имеют два режима оформления: светлый и тёмный, а также несколько цветовых тем. Мини-апп может получить данные о выбранной теме в клиентском приложении для того, чтобы сменить тему внутри мини-аппа. Например, применить светлый или тёмный режим. Для этого стоит использовать запрос GetThemeSettings и подписку ThemeSettings, которые оповещают Web-приложение о выбранной в приложении теме оформления.
Хранение информации мини-аппа
Из соображений безопасности, а также в связи с техническими ограничениями некоторых платформ (веб) в части удаления cookie-файлов при завершении сессии пользователя cookie-файлы сохраняться не будут.
Мини-апп может сохранять данные в формате ключ-значение на устройстве пользователя при помощи библиотеки VK Teams Bridge, используя запросы StoragePut, StorageGet, StorageClear, StorageDelete.
Персистентное хранилище мини-аппа расположено в клиентском приложении для всех операционных систем и имеет ограничение на максимальный размер для одного мини-аппа 10 МБ. Уровень защищённости данных в хранилище такой же, как для всех данных приложения VK Teams. В персистентном хранилище также можно хранить и файлы, если позволяет ограничение по размеру хранилища.
Хранилище мини-аппа очищается, если пользователь вышел из своего аккаунта.
Отладка мини-аппа в VK Teams
Для отладки мини-аппа внутри клиентского приложения VK Teams можно использовать Chrome DevTools. Это можно сделать в десктоп-приложении VK Teams (Windows, macOS, Linux).
Для этого :
-
Укажите в переменных окружения QTWEBENGINE_CHROMIUM_FLAGS=--remote-debugging-port=NNN, где NNN — номер порта.
-
Откройте конфигурационный файл app.ini, который находится в папке с установленным приложением:
Для macOS: ~/Library/Application Support/VK Teams/app.ini
Для ОС Windows: c:\Users%USERNAME%\AppData\Roaming\VK Teams\:
Для ОС Linux: /home/%user%/.config/VK Teams
и внесите туда изменения:
-
Запустите приложение через терминал:
Шапка приложения должна стать оранжевой.
-
Перейдите по адресу http://127.0.0.1:NNN в браузере на базе chromium (например, Google Chrome). После этого станет доступна отладка.
Поддержка обновлений мини-аппа в запущенном клиентском приложении
После интеграции мини-аппа, может возникнуть необходимость обновления клиентского кода (исполняемого внутри webview-компоненты). Для того, чтобы иметь возможность обновлять код, серверу мини-аппа необходимо поддерживать выдачу заголовка Last Modified .
Если при повторном входе в мини-апп сервер миниаппа отдаёт новое значение Last Modified, код мини-аппа будет обновлён на клиенте.
Выдача этого заголовка не обязательна для работы мини-аппа, однако, настоятельно рекомендуется поддержать этот заголовок. Без него невозможно заставить клиентский кэш обновиться и, как следствие,невозможно предсказать, когда обновление кода появится у пользователя.
Другие ограничения и особенности
-
Same Origin запросы должны выполняться неявно (без имени хоста)
Мини-апп может выполнять только Same Origin запросы, при этом хост не должен указываться в запросе явно, так как мини-апп может быть загружен с произвольного хоста в поддоменах VK Teams.
-
Window.history недоступен для навигации
Мини-апп не должен менять window.history. Для навигации по разделам мини-аппа следует воспользоваться библиотеками, поддерживающими хранение истории в памяти приложения, например, React Memory Router.
-
Cookie-файлы
Сервер мини-аппа не должен выставлять cookie-файлы в ответ на запрос на загрузку веб-приложения и последующие Same Origin запросы. Из соображений безопасности, а также в связи с техническими ограничениями некоторых платформ (веб) в части удаления cookie-файлов при завершении сессии пользователя, cookie-файлы сохраняться не будут.
Для хранения информации рекомендуем использовать хранилище мини-аппа на стороне клиента. Управление хранилищем происходит через библиотеку VK Teams Bridge, используя запросы StoragePut, StorageGet, StorageClear, StorageDelete.