Запуск в веб-версии
Веб-доступ, определение среды, внешний сервис и совместимость мобильного моста.
Запуск в веб-версии
В настройках сервиса включите Разрешить в веб-версии и сохраните изменения. Для нового встроенного сервиса этот же переключатель доступен при создании. По умолчанию он выключен: существующие сервисы не появляются в вебе автоматически.
Сервис появится в боковом меню Сервисы с заданными названием и иконкой. Он участвует в поиске меню и в персональной настройке видимости разделов. После сохранения или публикации меню обновляется. При переходе по пункту сервис открывается внутри обычной рабочей области с сохранением бокового меню.
Показ зависит также от лицензии Приложения, общего включения сервиса, полномочия и списка доступных сотрудников. Для встроенного сервиса нужна опубликованная версия: черновик в рабочее меню не попадает. Выключение доступа в вебе не отключает мобильный сервис и не удаляет данные. Прямая ссылка не обходит проверки доступа; сервер веб-моста повторно проверяет доступность перед операциями с данными.
Сервис по внешней ссылке открывается во встроенном окне. Его сайт должен разрешать встраивание через собственные заголовки CSP / X-Frame-Options. Если это запрещено, используйте Открыть отдельно. При открытии отдельно авторизованный мост Synchra24 недоступен. Сайты по внешним ссылкам не получают пользовательский или корпоративный API-токен.
Проверка среды выполнения
Во встроенном сервисе доступен синхронный метод:
const runtime = synchra.getRuntime(); // 'web' или 'mobile'
if (runtime === 'mobile') {
const photo = await synchra.takePhoto({ upload: true });
// Обработайте результат нативной камеры.
} else {
// Собственная веб-реализация: например, обычный input type="file".
document.querySelector('#web-file-input')?.click();
}
isSynchraIntegrated() проверяет доступность моста, а getRuntime() определяет
среду: это разные проверки. Не определяйте мобильную среду по наличию
ReactNativeWebView: в вебе движок использует совместимый транспорт.
Нативные действия в вебе не открывают камеру, геолокацию или диалоги телефона:
они возвращают {runtime: 'web', supported: false, ignored: true}.
Это не успешное получение фотографии или координат. Неизвестные методы
и произвольные api.request не разрешаются автоматически.
Для внешнего сервиса, использующего свою версию SDK, доступна проверка
window.getSynchraRuntime?.() ?? 'web'. Мобильное приложение устанавливает эту
функцию до загрузки страницы. Метод synchra.getRuntime() предоставляется
встроенным движком, а не любой старой версией npm-пакета.
Веб-альтернатива подчиняется ограничениям браузера и sandbox; мобильный вызов
не преобразуется автоматически в браузерный.
Мост внешнего сервиса в браузере
Встроенный редактор подключает транспорт сам. Для приложения по внешней ссылке подключите адаптер на стороне этого приложения до создания SynchraApp. Проверяйте точный origin вашего веб-приложения Synchra24; для коробочной установки замените адрес своим. Не добавляйте Bearer-токены в URL.
const hostOrigin = 'https://app.synchra24.com';
const runtime = window.getSynchraRuntime?.() ?? 'web';
if (runtime === 'web' && window.parent !== window) {
window.__SYNCHRA_RUNTIME__ = 'web';
window.getSynchraRuntime = () => 'web';
window.ReactNativeWebView = {
postMessage(message) {
window.parent.postMessage({ synchraHosted: true, message }, hostOrigin);
}
};
window.addEventListener('message', (event) => {
if (event.source !== window.parent || event.origin !== hostOrigin) return;
if (event.data?.synchraHostedReply) {
window.onNativeMessage?.(JSON.stringify(event.data.message));
}
if (event.data?.synchraHostedTheme) {
window.__SYNCHRA_THEME__ = event.data.synchraHostedTheme;
window.dispatchEvent(new CustomEvent('synchra.theme', {
detail: event.data.synchraHostedTheme
}));
}
});
}
Далее инициализируйте используемый SDK обычным service token и проверьте
isSynchraIntegrated(). Веб-мост принимает только сообщения открытого фрейма
с ожидаемого origin. Поддерживаются контекст, тема, чтение артефактов и отправка
зарегистрированных событий. Для последнего метода в собственной сборке SDK
нужна поддержка emitEvent; наличие транспорта само по себе метод не добавляет.
Доступ с телефона и ограничения
В мобильном приложении опубликованный сервис открывается без отдельного входа в веб-версию. Доступ зависит от подписки компании, роли сотрудника и настроек сервиса.
Встроенным сервисам нужно интернет-соединение: офлайн-работа пока не поддерживается. При открытии ссылки в обычном браузере потребуется войти в Synchra24.