В Android 12 добавлена поддержка единой модели регистрации для функций MMTEL и RCS. Эта модель позволяет управлять всеми функциями IMS с помощью одной регистрации IMS, предоставленной ImsService устройства, и соответствовать требованиям, введенным некоторыми операторами связи. По сравнению с моделью двойной регистрации, в которой на одном устройстве управляется несколько регистраций IMS, одинарная регистрация снижает трафик в сети оператора и повышает надежность.
Android 12 поддерживает эту модель единой регистрации с помощью архитектуры с набором API, которые позволяют стеку телефонии AOSP управлять функциями MMTEL, предоставляемыми ImsService, и функциями RCS, предоставляемыми выбранным пользователем мессенджером RCS. Чтобы поддерживать единую регистрацию IMS, производители устройств и поставщики процессоров должны реализовать эти API, чтобы включить функции RCS в выбранном пользователем мессенджере RCS.
На рисунке 1 показан стек IMS устройства при использовании модели единой регистрации IMS. Все приложения IMS используют сервис ImsService, заданный на устройстве по умолчанию, для функций MMTEL и RCS через одну регистрацию IMS. В частности, это инициализация, пересылка сообщений SIP и обмен данными о возможностях пользователей RCS.
Рисунок 1. Архитектура модели с одной регистрацией
В Android 11 и более ранних версиях поддерживается только модель двойной регистрации для предоставления функций MMTEL и RCS. При этом MMTEL предоставляется сервисом ImsService устройства, а функции RCS реализуются поверх и управляют собственным стеком IMS и подключением к сети оператора независимо.
На рисунке 2 показана архитектура модели двойной регистрации. В этой модели каждое приложение отвечает за подключение к сети оператора и регистрацию IMS для функций MMTEL и RCS. Сервис IMS устройства реализует MMTEL, использует подключение к сети оператора через IMS и работает независимо от других приложений RCS.
Рисунок 2. Архитектура модели с двойной регистрацией
API для регистрации в IMS
Устройства, которые работают в сетях операторов, требующих единой регистрации IMS, должны поддерживать API единой регистрации IMS и определять функцию Android PackageManager#FEATURE_TELEPHONY_IMS_SINGLE_REGISTRATION.
На рисунке 3 показаны API, поддерживающие единую регистрацию IMS.
Рисунок 3. Высокоуровневые поверхности API, поддерживающие единую регистрацию IMS
Устройства Android, поддерживающие единую регистрацию IMS в рамках стека телефонии AOSP, должны поддерживать все API AOSP, описанные в таблице ниже.
| Область применения API | API приложений RCS | API IMS поставщика | Описание |
|---|---|---|---|
| Подготовка RCS | ProvisioningManager | ImsConfigImplBase | Позволяет производителю или оператору предоставить приложение для обновления статуса инициализации RCS, если оператор использует собственный механизм предоставления прав. Сервис ImsService также должен поддерживать стандартный сервер автоматической настройки (ACS) для операторов, которые не используют собственный механизм инициализации. |
| Пересылка сообщений SIP | SipDelegateManager | SipTransportImplBase | Позволяет приложению RCS сначала связать определенные теги функций RCS с устройством ImsService, а затем отправлять и получать SIP-сообщения и обновления регистрации IMS, связанные с этими тегами функций RCS. |
| Уведомления о выделенном канале | ConnectivityManager | DataCallResponse | Приложение может прослушивать уведомления о качестве обслуживания на сокете, связанном с определенным локальным портом. |
| Аутентификация GBA | bootstrapAuthenticationRequest | GbaService | Позволяет приложению RCS проходить аутентификацию в сети и получать доступ к ключам, используемым для функций RCS, например для передачи файлов. |
| Обмен данными о возможностях RCS | ImsRcsManager | RcsCapabilityExchangeImplBase | Позволяет AOSP отправлять возможности MMTEL и RCS поставщику ImsService, чтобы их можно было опубликовать в сети как единый объект для обмена возможностями RCS. Также позволяет другим приложениям, которым интересны возможности RCS для одного или нескольких контактов, запрашивать у сети информацию о возможностях RCS для этих контактов. |
Безопасность и разрешения
В Android 12 добавлены следующие разрешения, обеспечивающие безопасный доступ к сети оператора и данным пользователя:
android.permission.PERFORM_IMS_SINGLE_REGISTRATIONandroid.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE
Разрешение android.permission.PERFORM_IMS_SINGLE_REGISTRATION должно быть определено мессенджером с функциями RCS. Чтобы предоставить это разрешение, должны выполняться следующие условия:
- Приложение должно быть установлено как привилегированное, то есть предустановлено на устройстве и иметь доступ к привилегированным разрешениям.
- Приложение должно быть установлено в качестве приложения для обмена SMS по умолчанию с помощью
RoleManager.
Если хотя бы одно из этих условий не выполняется, приложению запрещается доступ к разрешению android.permission.PERFORM_IMS_SINGLE_REGISTRATION. Это означает, что сторонним приложениям запрещено использовать API для регистрации RCS, поскольку для этого требуется сертификация оператора связи на устройстве.
Если у приложения есть разрешение READ_CONTACTS, то разрешение android.permission.ACCESS_RCS_USER_CAPABILITY_EXCHANGE позволяет ему запрашивать функции RCS для номеров телефонов с помощью RcsUceAdapter.
Для этого должны выполняться следующие условия:
- Приложение должно быть установлено как привилегированное, то есть оно должно быть предустановлено на устройстве и иметь доступ к привилегированным разрешениям.
Приложение должно быть определено как одна из следующих ролей
RoleManager:- Мессенджер по умолчанию: задается пользователем.
- Приложение дозвона по умолчанию: задается пользователем.
- Приложение "Контакты" по умолчанию. Роль, появившаяся в Android 12, позволяет OEM задать название пакета с помощью значения наложения устройства
config_systemContacts, которое должно соответствовать приложению "Контакты" на устройстве. Затем этому приложению присваивается роль "Контакты".
Чтобы получить доступ к IMS APN с помощью ConnectivityManager для настройки трафика данных и управления им, приложения также должны запросить разрешение android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS.
Примеры и источник
В AOSP есть приложение, которое реализует тестовый мессенджер с базовой поддержкой RCS для тестирования и разработки. Приложение можно найти на сайте testapps/TestRcsApp.
После установки приложения на устройство его можно будет задать в качестве мессенджера по умолчанию и предоставить ему разрешения, необходимые для доступа к API единой регистрации IMS.
В Android также есть пример реализации ImsService для RCS. Исходный код находится по адресу /testapps/ImsTestService.
Реализация
Подробнее о реализации можно узнать из документа IMS Single Registration in Android.
Проверка
Чтобы проверить реализацию единой регистрации IMS, выполните следующие действия:
- Убедитесь, что набор тестов CTS CtsTelephonyTestCases пройден.
- Установите и запустите приложение TestRcsApp, чтобы выполнить основные тесты регистрации во время интеграции.
- Пройти сертификацию оператора связи для тестовых случаев с единой регистрацией IMS.