Разрешение на использование сервиса IMS

В Android 12 добавлена поддержка спецификации GSMA TS.43 Service Entitlement Configuration, которая определяет этап проверки прав на активацию сервисов, в том числе Voice-over-Wi-Fi (VoWiFi), Voice-over-LTE (VoLTE), SMS over IP (SMSoIP), On-Device Service Activation (ODSA) для дополнительных устройств с eSIM (связанных с запрашивающим устройством) и информации о тарифном плане.

Чтобы поддерживать эту спецификацию, в Android есть функция "Права доступа к сервисам IMS", которая позволяет поставщику услуг сообщать мобильным устройствам о статусе сетевых сервисов IP Multimedia Subsystem (IMS). Эта функция позволяет устройству запрашивать у сервера оператора статус прав доступа к IMS, как определено в спецификации GSMA TS.43, с помощью аутентификации EAP-AKA без необходимости вручную вводить учетные данные.

Операторы связи с серверами прав IMS могут использовать функцию прав IMS для предоставления услуг. Использование этой функции дает следующие преимущества:

  • Снижает расходы операторов на тестирование и сертификацию, поскольку функцию можно использовать в нескольких продуктах и устройствах разных производителей.
  • Снижает затраты на разработку для производителей устройств благодаря стандартному приложению Android.
  • Позволяет производителям устройств и операторам связи добавлять код для функции, так как она имеет открытый исходный код.
  • Позволяет управлять адресами для экстренных служб в североамериканских сетях.

Архитектура

На рисунке ниже показана архитектура и поведение функции предоставления прав IMS.

Функция права на использование TS.43

Рисунок 1. TS.43, архитектура функции предоставления прав

Как показано на рисунке 1, архитектура функции прав доступа к сервису IMS включает следующие компоненты:

  • service_entitlement Статическая библиотека Service API TS.43 реализует спецификацию TS.43, взаимодействует с сервером прав оператора и предоставляет API для приложений для каждого варианта использования TS.43.
  • Клиентское приложение ImsServiceEntitlement использует API сервиса TS.43. Приложение реализует элементы интерфейса, в том числе веб-представления для отображения портала услуг оператора, с помощью которого пользователи могут активировать сервисы, и взаимодействует с другими компонентами Android для управления пользовательским интерфейсом.

    Подробнее о том, как настроить Android для работы с сервером прав оператора на основе TS.43, рассказывается в статье Приложение ImsServiceEntitlement.

Пронумерованные линии на рисунке 1 показывают, как компоненты функции права на использование сервиса IMS взаимодействуют друг с другом. Ниже описаны все шаги, обозначенные на схеме.

1. Клиентское приложение вызывает API сервиса TS.43, чтобы инициировать запрос на право доступа к сервису.

2. API сервиса TS.43 отправляет HTTP-запрос на сервер авторизации оператора, чтобы инициировать запрос EAP-AKA.

3. API сервиса TS.43 вызывает API телефонии (например, getIccAuthentication), чтобы выполнить запрос-ответ EAP-AKA.

4. Сервис TS.43 получает данные о правах на использование сервисов или конфигурации от сервера прав оператора после проверки ответа EAP-AKA.

5. Сервис TS.43 возвращает данные о правах на использование сервиса или конфигурации клиентскому приложению.

6. Клиентское приложение обрабатывает данные и при необходимости открывает портал оператора, чтобы пользователь мог завершить активацию сервиса.

Интеграция

В этом разделе описан процесс интеграции библиотеки service_entitlement и приложения ImsServiceEntitlement.

Поскольку зависимости от API Android 12 нет, библиотеку service_entitlement и приложение ImsServiceEntitlement можно перенести на более ранние версии платформы Android.

Библиотека service_entitlement

Поскольку библиотека service_entitlement статически связана с приложением ImsServiceEntitlement, никаких дополнительных действий для интеграции библиотеки в приложение ImsServiceEntitlement не требуется.

Библиотеку service_entitlement можно интегрировать с вашими приложениями для использования в соответствии со спецификацией TS.43, например для тарифных планов и ODSA. Библиотеку также можно интегрировать в приложение для использования прав доступа, не связанных со спецификацией TS.43, на основе протокола EAP-AKA.

Ниже описаны API, которые можно использовать в таких случаях.

  • Приложение TS.43, использующее протокол TS.43 HTTP, реализованный в библиотеке: используйте API в классе ServiceEntitlement.
  • Приложение, не соответствующее спецификации TS.43, но использующее протокол EAP-AKA, реализованный в библиотеке: используйте API, представленные в классе EapAkaHelper.

Приложение ImsServiceEntitlement

По умолчанию в Android есть приложение ImsServiceEntitlement, установленное в разделе product как привилегированное. Чтобы настроить его, используйте следующие ключи CarrierConfig:

Ключ Значение
KEY_ENTITLEMENT_SERVER_URL_STRING URL сервера прав доступа оператора. Префикс https:// обязателен.
KEY_FCM_SENDER_ID_STRING Идентификатор отправителя FCM оператора.

Не указывайте это значение, если FCM не требуется оператору.
KEY_SHOW_VOWIFI_WEBVIEW_BOOL Установите значение true, если оператор требует, чтобы пользователи регистрировались в сервисе VoWiFi через веб-портал. Например, вы можете принять условия использования или указать адрес для экстренных случаев.

Обычно это требуется операторам в Северной Америке.
KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING
Задайте значение com.android.imsserviceentitlement/.WfcActivationActivity, если для параметра KEY_SHOW_VOWIFI_WEBVIEW_BOOL задано значение true.
KEY_IMS_PROVISIONING_BOOL Установите значение true, если оператор требует фоновой инициализации сети для сервисов IMS (VoLTE/VoWiFi/SMSoIP).

Это требование некоторых европейских операторов связи.
KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL Если KEY_IMS_PROVISIONING_BOOL имеет значение true, задайте для параметра значение true.

HTTP-трафик на сервер авторизации и веб-портал оператора передается через сеть по умолчанию, например через мобильный интернет или Wi-Fi.

Партнеры GMS. Приложение TS.43 для проверки прав на контент в Android 12 поддерживает следующих операторов связи в соответствии со спецификацией TS.43 версии 5.0:

  • США: CSpire, US Cellular, Cellcom.
  • Франция: Orange

Дополнительный интерфейс системы для инициализации IMS

В этом разделе описывается, как производители оригинального оборудования могут поддерживать дополнительные элементы системного интерфейса, связанные с инициализацией сервиса IMS (например, показывать уведомление при инициализации VoWiFi).

Приложение ImsServiceEntitlement задает статус инициализации VoWiFi на платформе с помощью системного API ProvisioningManager.setProvisioningIntValue(KEY_VOICE_OVER_WIFI_ENABLED_OVERRIDE, value). Этот API также используется для VoLTE (с KEY_VOLTE_PROVISIONING_STATUS) и SMSoIP (с KEY_SMS_OVER_IP_ENABLED).

Затем системный интерфейс может прочитать состояние инициализации, используя getProvisioningIntValue, или зарегистрировать обратный вызов для отслеживания изменений состояния инициализации с помощью registerProvisioningChangedCallback.

Как переопределять конфигурации для тестирования

Чтобы временно изменить поведение приложения для тестирования, выполните следующие действия.ImsServiceEntitlement Подробнее о том, как переопределить конфигурации оператора…

Как пропустить регистрацию в VoWiFi

Чтобы пропустить процесс регистрации VoWiFi и включить VoWiFi напрямую, переопределите конфигурацию оператора KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING и задайте для нее пустое значение.

Пропустить инициализацию IMS

Чтобы пропустить инициализацию IMS, сделать сервисы IMS доступными и разрешить пользователям включать их без инициализации сети, переопределите конфигурацию оператора KEY_CARRIER_VOLTE_PROVISIONING_REQUIRED_BOOL и задайте для нее значение false.

Изменить URL сервера прав доступа

Чтобы изменить URL сервера проверки права на использование, переопределите конфигурацию оператора KEY_ENTITLEMENT_SERVER_URL_STRING и задайте для нее значение ожидаемого URL. Необходимо добавить префикс https://.

Как переопределить конфигурации оператора

В Android 11 и более поздних версий команды для переопределения конфигурации оператора связи встроены в систему и доступны с правами root.

В примере ниже показано, как переопределить ключ конфигурации оператора carrier_volte_provisioning_required_bool и задать для него значение false. Вы можете выполнить команду несколько раз, чтобы переопределить несколько конфигураций.

adb root
adb shell cmd phone cc set-value -p carrier_volte_provisioning_required_bool false

Чтобы удалить все переопределения, используйте следующую команду:

adb shell cmd phone cc clear-values

Чтобы получить дополнительную информацию, выполните следующую команду:

adb shell cmd phone cc