Разработка мобильных приложений на платформе 1С:Предприятие открывает широкие возможности для автоматизации бизнеса, однако на этапе интеграции с внешними системами через HTTP-сервисы разработчики часто сталкиваются с проблемой: приложение идеально работает в эмуляторе или на компьютере, но при запуске собранного APK-файла на реальном смартфоне выдает лаконичное и неприятное сообщение: «Не могу установить соединение».
В этой статье мы подробно проанализируем причины возникновения этой ошибки, разберем архитектурные особенности взаимодействия мобильной платформы с веб-серверами и подготовим пошаговый план диагностики и решения проблемы.
Прежде чем приступать к коду и настройкам безопасности Android, нам необходимо убедиться, что мобильное устройство физически «видит» сервер. Проанализируем типичную ситуацию: сервер находится внутри локальной сети предприятия, а мобильное устройство подключается извне.
Выполним простую проверку: откроем стандартный браузер на мобильном телефоне и введем в адресную строку IP-адрес или доменное имя веб-сервера, где опубликован ваш HTTP-сервис. Рассмотрим два варианта ответа:
Важный нюанс: Если ваш компьютер выходит в интернет через тот же телефон (в режиме точки доступа), это не гарантирует, что телефон может обращаться к ресурсам компьютера по локальному IP. Используйте только внешние статические IP-адреса или правильно настроенные DNS-имена.
Одной из самых частых причин ошибки «Не могу установить соединение» на современных устройствах (начиная с Android 9.0 и выше) является запрет на использование незащищенного трафика. Рассмотрим ситуацию подробнее: по умолчанию Android блокирует все соединения по протоколу HTTP, требуя использования шифрованного HTTPS.
Если ваше соединение в коде выглядит примерно так:
НТТПСоединение = Новый HTTPСоединение("192.168.1.10", , Логин, Пароль);
Ответ = НТТПСоединение.ОтправитьДляОбработки(Запрос);
То на Android 10 и выше метод ОтправитьДляОбработки() вернет ошибку еще до того, как запрос покинет устройство. Система безопасности Android просто «перережет» соединение.
Разберем способы решения этой проблемы:
AndroidManifest.xml в секцию application следующий атрибут:
android:usesCleartextTraffic="true"
После этого пересоберите APK и проверьте соединение. В большинстве случаев проблема исчезает именно на этом этапе.
Проанализируем ситуацию, когда вы перешли на HTTPS, но ошибка сохранилась. Мобильная платформа 1С очень требовательна к валидности сертификатов. Если вы используете самоподписанный сертификат (Self-signed), Android не будет ему доверять по умолчанию.
Для решения этой задачи рассмотрим следующие варианты:
Иногда причина кроется в том, как веб-сервер обрабатывает запросы от мобильных клиентов. Выясним, какие настройки могут препятствовать соединению:
Аутентификация: Мобильная платформа 1С лучше всего взаимодействует с Basic аутентификацией. Если на сервере (особенно на IIS) включена Windows Authentication (NTLM), мобильное устройство может выдать ошибку соединения вместо окна ввода логина и пароля. Проверьте, чтобы для публикации был разрешен анонимный доступ или явно задана Basic аутентификация.
Параметр Keep-Alive: Проанализируем работу сетевых сессий. В некоторых случаях стабильность соединения повышается, если в настройках HTTP-сервера отключить параметр Keep-Alive для мобильных публикаций. Это заставляет сервер закрывать соединение после каждого ответа, что предотвращает «зависание» сессий на нестабильных мобильных каналах связи.
Если все вышеперечисленные методы не помогают, перейдем к «тяжелой артиллерии» — системному логу Android. Выясним, что именно происходит в недрах операционной системы в момент ошибки.
Для этого выполним следующие действия:
adb logcat *:E.В консоли появятся системные сообщения об ошибках. Если вы увидите строку Cleartext HTTP traffic to [ваш IP] not permitted, значит, вы пропустили Шаг 2 нашей инструкции. Если ошибка связана с SSL, вы увидите сообщение о SSLHandshakeException.
Посмотрим на пример кода, который минимизирует вероятность ошибок при установке соединения. Важно правильно обрабатывать исключения, чтобы понимать, на каком этапе происходит сбой.
Попытка
НТТПСоединение = Новый HTTPСоединение(СерверАдрес, Порт, Пользователь, Пароль, , 15, Новый ЗащищенноеСоединениеOpenSSL());
НТТПЗапрос = Новый HTTPЗапрос(Ресурс);
// Добавляем необходимые заголовки
НТТПЗапрос.Заголовки.Вставить("Content-Type", "application/json");
Результат = НТТПСоединение.Получить(НТТПЗапрос);
Если Результат.КодСостояния = 200 Тогда
// Обработка успешного ответа
Иначе
Сообщить("Сервер вернул ошибку: " + Результат.КодСостояния);
КонецЕсли;
Исключение
Сообщить("Ошибка при установке соединения: " + ОписаниеОшибки());
КонецПопытки;
Обратите внимание на использование объекта Новый ЗащищенноеСоединениеOpenSSL(). Даже если вы используете HTTP, указание этого объекта (пустого) часто помогает платформе корректно инициализировать сетевые библиотеки на некоторых версиях Android.
Ошибка «Не могу установить соединение» — это комплексная проблема. Для её решения мы рекомендуем придерживаться следующего алгоритма: сначала проверьте доступность сервера через браузер телефона, затем убедитесь, что в APK разрешен Cleartext Traffic или используется валидный HTTPS, и, наконец, проверьте методы аутентификации на веб-сервере. Тщательная настройка каждого из этих звеньев гарантирует стабильную работу вашего мобильного решения.