Настройка связи с помощью ЕдиныйАгент SDK для Android

Материал из Документация Ключ-АСТРОМ

После завершения инструментирования проверьте следующие аспекты связи с ЕдинымАгентом.

Конфигурация сетевой безопасности

Если в вашем приложении для 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и предоставьте этот объект ЕдиномуАгенту, выполнив запуск вручную через AstromkeyConfigurationBuilderAPI . Объект 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. Слушатель должен быть добавлен с помощью метода AstromkeyConfigurationBuilderin 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 минут. Если приложение не подключено к Интернету в течение длительного времени, ЕдиныйАгент отбрасывает старые данные мониторинга и прекращает мониторинг приложения до тех пор, пока устройство не установит новое сетевое подключение.