<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D0%95%D0%B4%D0%B8%D0%BD%D1%8B%D0%B9%D0%90%D0%B3%D0%B5%D0%BD%D1%82_SDK_%D0%B4%D0%BB%D1%8F_Android</id>
	<title>Настройка связи с помощью ЕдиныйАгент SDK для Android - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D0%95%D0%B4%D0%B8%D0%BD%D1%8B%D0%B9%D0%90%D0%B3%D0%B5%D0%BD%D1%82_SDK_%D0%B4%D0%BB%D1%8F_Android"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D0%95%D0%B4%D0%B8%D0%BD%D1%8B%D0%B9%D0%90%D0%B3%D0%B5%D0%BD%D1%82_SDK_%D0%B4%D0%BB%D1%8F_Android&amp;action=history"/>
	<updated>2026-04-03T20:44:22Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D0%95%D0%B4%D0%B8%D0%BD%D1%8B%D0%B9%D0%90%D0%B3%D0%B5%D0%BD%D1%82_SDK_%D0%B4%D0%BB%D1%8F_Android&amp;diff=2690&amp;oldid=prev</id>
		<title>ENetrebin: Новая страница: «После завершения инструментирования проверьте следующие аспекты связи с ЕдинымАгентом...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_%D0%95%D0%B4%D0%B8%D0%BD%D1%8B%D0%B9%D0%90%D0%B3%D0%B5%D0%BD%D1%82_SDK_%D0%B4%D0%BB%D1%8F_Android&amp;diff=2690&amp;oldid=prev"/>
		<updated>2023-04-13T09:56:40Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «После завершения инструментирования проверьте следующие аспекты связи с ЕдинымАгентом...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;После завершения инструментирования проверьте следующие аспекты связи с ЕдинымАгентом.&lt;br /&gt;
&lt;br /&gt;
== Конфигурация сетевой безопасности ==&lt;br /&gt;
Если в вашем приложении для Android настроена сетевая безопасность , убедитесь, что HTTP-трафик к &amp;lt;code&amp;gt;beaconUrl&amp;lt;/code&amp;gt;конечной точке не блокируется конфигурацией сетевой безопасности.&lt;br /&gt;
&lt;br /&gt;
== Брандмауэр ==&lt;br /&gt;
Убедитесь, что запросы GET и POST к &amp;lt;code&amp;gt;beaconUrl&amp;lt;/code&amp;gt;конечной точке не блокируются брандмауэром.&lt;br /&gt;
&lt;br /&gt;
== Включить сертификаты ==&lt;br /&gt;
Для связи по протоколу HTTPS ЕдиныйАгент проверяет сертификат сервера и имя хоста. Сбой связи ЕдиногоАгента, если шаги проверки не выполнены.&lt;br /&gt;
&lt;br /&gt;
Если ваш Cluster АктивныйШлюз не имеет сертификата, выданного доверенным промежуточным или корневым центром сертификации (ЦС), укажите сертификат сервера для связи SSL в файле конфигурации сетевой безопасности ( для Android API уровня 24+).&lt;br /&gt;
&lt;br /&gt;
Чтобы использовать функцию настройки сетевой безопасности, добавьте &amp;lt;code&amp;gt;domain-config&amp;lt;/code&amp;gt;раздел в свой &amp;lt;code&amp;gt;network_security_config.xml&amp;lt;/code&amp;gt;файл.&lt;br /&gt;
 &amp;lt;code&amp;gt;&amp;lt;domain-config&amp;gt;&lt;br /&gt;
   &amp;lt;domain includeSubdomains=&amp;quot;true&amp;quot;&amp;gt;your.domain.com&amp;lt;/domain&amp;gt;&lt;br /&gt;
   &amp;lt;trust-anchors&amp;gt;&lt;br /&gt;
     &amp;lt;certificates src=&amp;quot;@raw/your_server_certificate&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/trust-anchors&amp;gt;&lt;br /&gt;
 &amp;lt;/domain-config&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== ''Включить сертификаты для приложений с Android API уровня 23 и более ранних версий.'' ======&lt;br /&gt;
(устарело)&lt;br /&gt;
&lt;br /&gt;
Если вам нужно предоставить сертификат сервера для приложений с Android API уровня 23 и более ранних, включите сертификат в объект &amp;lt;code&amp;gt;KeyStore&amp;lt;/code&amp;gt;и предоставьте этот объект ЕдиномуАгенту, выполнив запуск вручную через &amp;lt;code&amp;gt;AstromkeyConfigurationBuilder&amp;lt;/code&amp;gt;API . Объект &amp;lt;code&amp;gt;KeyStore&amp;lt;/code&amp;gt;должен содержать цепочку сертификатов кластера АктивныйШлюз, к которому вы хотите подключиться.&lt;br /&gt;
&lt;br /&gt;
Эта опция устарела с ЕдиногоАгента SDK для Android версии 8.257. Начиная с этой версии, используйте только &amp;lt;code&amp;gt;KeyStore&amp;lt;/code&amp;gt;конфигурацию для более старых версий Android.&lt;br /&gt;
&lt;br /&gt;
Если вы используете и функцию настройки сетевой безопасности, и конфигурацию &amp;lt;code&amp;gt;KeyStore&amp;lt;/code&amp;gt;, последняя имеет приоритет.&lt;br /&gt;
&lt;br /&gt;
'''Java:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;KeyStore trusted = KeyStore.getInstance(&amp;quot;BKS&amp;quot;);&lt;br /&gt;
 try (InputStream in = getResources().openRawResource(R.raw.mykeystore)) {&lt;br /&gt;
     trusted.load(in, &amp;quot;myverysecretpassword&amp;quot;.toCharArray());&lt;br /&gt;
 }&lt;br /&gt;
 Astromkey.startup(this, new AstromkeyConfigurationBuilder(&amp;quot;&amp;lt;YourApplicationID&amp;gt;&amp;quot;, &amp;quot;&amp;lt;ProvidedBeaconURL&amp;gt;&amp;quot;)&lt;br /&gt;
     .withKeyStore(trusted)&lt;br /&gt;
     .buildConfiguration());&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Kotlin:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;val trusted = KeyStore.getInstance(&amp;quot;BKS&amp;quot;)&lt;br /&gt;
 resources.openRawResource(R.raw.mykeystore).use { inputStream -&amp;gt;&lt;br /&gt;
     trusted.load(inputStream, &amp;quot;myverysecretpassword&amp;quot;.toCharArray())&lt;br /&gt;
 }&lt;br /&gt;
 Astromkey.startup(this, AstromkeyConfigurationBuilder(&amp;quot;&amp;lt;YourApplicationID&amp;gt;&amp;quot;, &amp;quot;&amp;lt;ProvidedBeaconURL&amp;gt;&amp;quot;)&lt;br /&gt;
     .withKeyStore(trusted)&lt;br /&gt;
     .buildConfiguration()&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== ''Временно отключить проверку сертификата'' ======&lt;br /&gt;
(устарело)&lt;br /&gt;
&lt;br /&gt;
Вы также можете отключить проверку сертификата. Однако используйте этот параметр с осторожностью, а не в производственном коде. В противном случае отключение проверки сертификата может нарушить подлинность соединения. Также обратите внимание, что проверку имени хоста нельзя отключить.&lt;br /&gt;
&lt;br /&gt;
Эта опция устарела с ЕдиногоАгента SDK для Android версии 8.257.&lt;br /&gt;
&lt;br /&gt;
==== Через плагин Astromkey для Android Gradle ====&lt;br /&gt;
Вы можете отключить проверку сертификата через &amp;lt;code&amp;gt;certificateValidation&amp;lt;/code&amp;gt;свойство .&lt;br /&gt;
&lt;br /&gt;
'''Groovy:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;astromkey {&lt;br /&gt;
     configurations {&lt;br /&gt;
         sampleConfig {&lt;br /&gt;
             debug {&lt;br /&gt;
                 certificateValidation false&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Kotlin:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;configure&amp;lt;com.astromkey.tools.android.dsl.AstromkeyExtension&amp;gt; {&lt;br /&gt;
     configurations {&lt;br /&gt;
         create(&amp;quot;sampleConfig&amp;quot;) {&lt;br /&gt;
             debug {&lt;br /&gt;
                 certificateValidation(false)&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Через ЕдиныйАгент SDK ====&lt;br /&gt;
Вы также можете отключить проверку сертификата с помощью &amp;lt;code&amp;gt;ConfigurationBuilder.withCertificateValidation(boolean)&amp;lt;/code&amp;gt;метода.&lt;br /&gt;
&lt;br /&gt;
'''Java:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;Astromkey.startup(this, new AstromkeyConfigurationBuilder(&amp;quot;&amp;lt;YourApplicationID&amp;gt;&amp;quot;, &amp;quot;&amp;lt;ProvidedBeaconURL&amp;gt;&amp;quot;)&lt;br /&gt;
   .withCertificateValidation(false)&lt;br /&gt;
   .buildConfiguration());&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Kotlin:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;Astromkey.startup(this, AstromkeyConfigurationBuilder(&amp;quot;&amp;lt;YourApplicationID&amp;gt;&amp;quot;, &amp;quot;&amp;lt;ProvidedBeaconURL&amp;gt;&amp;quot;)&lt;br /&gt;
   .withCertificateValidation(false)&lt;br /&gt;
   .buildConfiguration())&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Закрепление сертификата ==&lt;br /&gt;
Чтобы использовать закрепление сертификата, следуйте инструкциям Android в разделе Конфигурация безопасности сети &amp;gt; Закрепить сертификаты .&lt;br /&gt;
&lt;br /&gt;
== Пользовательские заголовки HTTP ==&lt;br /&gt;
Если HTTP-запросы ЕдиногоАгента не соответствуют требованиям безопасности вашей серверной инфраструктуры, вы можете изменить заголовки HTTP ЕдиногоАгента с помощью метода &amp;lt;code&amp;gt;Astromkey.setBeaconHeaders(Map&amp;lt;String, String&amp;gt;)&amp;lt;/code&amp;gt;. Эта функция позволяет вам добавлять &amp;lt;code&amp;gt;Authorization&amp;lt;/code&amp;gt;заголовок к HTTP-запросам и немедленно переподключаться к Cluster АктивныйШлюз, когда срок действия токена истек.&lt;br /&gt;
&lt;br /&gt;
Чтобы удалить старые заголовки, вызовите &amp;lt;code&amp;gt;Astromkey.setBeaconHeaders(null)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Базовая авторизация ====&lt;br /&gt;
Когда информация об авторизации уже доступна при запуске приложения, вызовите &amp;lt;code&amp;gt;Astromkey.setBeaconHeaders&amp;lt;/code&amp;gt;метод перед методом запуска &amp;lt;code&amp;gt;Astromkey.startup&amp;lt;/code&amp;gt;. Каждый HTTP-запрос ЕдиногоАгента будет иметь правильные заголовки.&lt;br /&gt;
&lt;br /&gt;
'''Java:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;Map&amp;lt;String, String&amp;gt; headers = new HashMap&amp;lt;&amp;gt;();&lt;br /&gt;
 headers.put(&amp;quot;Cookie&amp;quot;, &amp;quot;n1=v1; n2=v2&amp;quot;);&lt;br /&gt;
 headers.put(&amp;quot;ExampleHeader&amp;quot;, &amp;quot;ExampleValue&amp;quot;);&lt;br /&gt;
 headers.put(&amp;quot;Authorization&amp;quot;, basicAuthorization(username, password));&lt;br /&gt;
 Astromkey.setBeaconHeaders(headers);&lt;br /&gt;
 &lt;br /&gt;
 Astromkey.startup(this, new AstromkeyConfigurationBuilder(&amp;quot;&amp;lt;YourApplicationID&amp;gt;&amp;quot;, &amp;quot;&amp;lt;ProvidedBeaconURL&amp;gt;&amp;quot;)&lt;br /&gt;
   .buildConfiguration());&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Kotlin:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;val headers = HashMap&amp;lt;String, String&amp;gt;()&lt;br /&gt;
 headers[&amp;quot;Cookie&amp;quot;] = &amp;quot;n1=v1; n2=v2&amp;quot;&lt;br /&gt;
 headers[&amp;quot;ExampleHeader&amp;quot;] = &amp;quot;ExampleValue&amp;quot;&lt;br /&gt;
 headers[&amp;quot;Authorization&amp;quot;] = basicAuthorization(username, password)&lt;br /&gt;
 Astromkey.setBeaconHeaders(headers)&lt;br /&gt;
 &lt;br /&gt;
 Astromkey.startup(this, AstromkeyConfigurationBuilder(&amp;quot;&amp;lt;YourApplicationID&amp;gt;&amp;quot;, &amp;quot;&amp;lt;ProvidedBeaconURL&amp;gt;&amp;quot;)&lt;br /&gt;
     .buildConfiguration()&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
Если информация об авторизации недоступна при запуске приложения, вызовите &amp;lt;code&amp;gt;Astromkey.setBeaconHeaders&amp;lt;/code&amp;gt;метод, когда информация будет доступна. Метод запуска &amp;lt;code&amp;gt;Astromkey.startup&amp;lt;/code&amp;gt;по-прежнему должен вызываться в &amp;lt;code&amp;gt;Application.onCreate&amp;lt;/code&amp;gt;методе, чтобы отслеживать правильное время запуска. ЕдиныйАгент будет автоматически деактивирован, когда сервер отправит ответ с недопустимым кодом состояния. Этот &amp;lt;code&amp;gt;Astromkey.setBeaconHeaders&amp;lt;/code&amp;gt;метод активирует ЕдиныйАгент и немедленно повторно подключится к Cluster АктивныйШлюз.&lt;br /&gt;
&lt;br /&gt;
==== Авторизация по токену ====&lt;br /&gt;
Если вы используете процедуру авторизации, требующую регулярного обновления токена, вам следует добавить файл &amp;lt;code&amp;gt;CommunicationProblemListener&amp;lt;/code&amp;gt;. Слушатель должен быть добавлен с помощью метода &amp;lt;code&amp;gt;AstromkeyConfigurationBuilder&amp;lt;/code&amp;gt;in &amp;lt;code&amp;gt;Astromkey.startup&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Java:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;Astromkey.startup(this, new AstromkeyConfigurationBuilder(&amp;quot;&amp;lt;YourApplicationID&amp;gt;&amp;quot;, &amp;quot;&amp;lt;ProvidedBeaconURL&amp;gt;&amp;quot;)&lt;br /&gt;
   .withCommunicationProblemListener(new YourAstromkeyListener())&lt;br /&gt;
   .buildConfiguration());&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Kotlin:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;Astromkey.startup(this, AstromkeyConfigurationBuilder(&amp;quot;&amp;lt;YourApplicationID&amp;gt;&amp;quot;, &amp;quot;&amp;lt;ProvidedBeaconURL&amp;gt;&amp;quot;)&lt;br /&gt;
   .withCommunicationProblemListener(YourAstromkeyListener())&lt;br /&gt;
   .buildConfiguration())&amp;lt;/code&amp;gt;&lt;br /&gt;
При использовании &amp;lt;code&amp;gt;CommunicationProblemListener&amp;lt;/code&amp;gt;коммуникационное поведение ЕдиногоАгента немного отличается от обычного поведения. Если Cluster АктивныйШлюз реагирует с недопустимым кодом состояния, например &amp;lt;code&amp;gt;403 Forbidden&amp;lt;/code&amp;gt;, ЕдиныйАгент не будет повторно подключаться к серверу. Вместо этого ЕдиныйАгент будет ждать, пока вы не укажете правильные заголовки с помощью метода &amp;lt;code&amp;gt;Astromkey.setBeaconHeaders&amp;lt;/code&amp;gt;. В этом случае ЕдиныйАгент будет уведомлять &amp;lt;code&amp;gt;CommunicationProblemListener&amp;lt;/code&amp;gt;асинхронно в фоновом потоке с помощью &amp;lt;code&amp;gt;onFailure(int, String, String)&amp;lt;/code&amp;gt;метода интерфейса. В следующем фрагменте кода показан пример реализации интерфейса &amp;lt;code&amp;gt;CommunicationProblemListener&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
'''Java:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;public class YourAstromkeyListener implements CommunicationProblemListener {&lt;br /&gt;
 &lt;br /&gt;
   @Override&lt;br /&gt;
   public void onFailure(int responseCode, String responseMessage, String body) {&lt;br /&gt;
     String token = refreshToken();&lt;br /&gt;
     Astromkey.setBeaconHeaders(generateAuthorizationHeader(token));&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   @Override&lt;br /&gt;
   public void onError(Throwable throwable) {&lt;br /&gt;
     //do nothing&lt;br /&gt;
   }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
'''Kotlin:'''&lt;br /&gt;
 &amp;lt;code&amp;gt;class YourAstromkeyListener : CommunicationProblemListener {&lt;br /&gt;
 &lt;br /&gt;
   override fun onFailure(responseCode: Int, responseMessage: String?, body: String?) {&lt;br /&gt;
     String token = refreshToken()&lt;br /&gt;
     Astromkey.setBeaconHeaders(generateAuthorizationHeader(token))&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   override fun onError(throwable: Throwable?) {&lt;br /&gt;
     //do nothing&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Метод интерфейса &amp;lt;code&amp;gt;onError(Throwable)&amp;lt;/code&amp;gt;вызывается асинхронно, когда возникает проблема со связью, например тайм-аут соединения или ошибка квитирования SSL. В этом случае ЕдиныйАгент ждет определенное время, а затем повторно подключается к Cluster АктивныйШлюз. Обычно вам не нужно реагировать на этот метод обратного вызова.&lt;br /&gt;
&lt;br /&gt;
== Оффлайн мониторинг ==&lt;br /&gt;
В целях эффективности Ключ-АСТРОМ не принимает данные мониторинга старше 10 минут. Если приложение не подключено к Интернету в течение длительного времени, ЕдиныйАгент отбрасывает старые данные мониторинга и прекращает мониторинг приложения до тех пор, пока устройство не установит новое сетевое подключение.&lt;/div&gt;</summary>
		<author><name>ENetrebin</name></author>
	</entry>
</feed>