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