API-интерфейсы eUICC предоставляют коды ошибок, помогающие приложениям и пользователям устранять неполадки, связанные с загрузкой, включением, отключением и удалением профилей eSIM.
Обработка ошибок
При возникновении ошибки при вызове API eUICC предоставляется ожидающий вызов Intent, а в качестве ключа для получения подробного кода ошибки используется EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE . Начиная с Android 11, в результирующий Intent включаются следующие четыре ключа и значения:
-
EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE: Предоставляет информацию о том, что пошло не так. Например, загрузка или удаление профиля eSIM. Это поле никогда не бывает пустым. EXTRA_EMBEDDED_SUBSCRIPTION_ERROR_CODE: Информация о причине ошибки. Например, истечение времени ожидания запроса или блокировка устройства оператором связи. Это поле не заполняется в следующих случаях:- Код операции:
OPERATION_SMDX_SUBJECT_REASON_CODE. - Это ошибка низкого уровня, например,
IOExceptionилиInterruptedException.
- Код операции:
EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE: Используется сEXTRA_EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE, которые вместе предоставляют SubjectCode[5.2.6.1] и ReasonCode[5.2.6.2] из GSMA (SGP.22 v2.2). Это поле заполняется только тогда, когда код операции равенOPERATION_SMDX_SUBJECT_REASON_CODE.EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE: Используется сEXTRA_EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE, которые вместе предоставляют SubjectCode[5.2.6.1] и ReasonCode[5.2.6.2] из GSMA (SGP.22 v2.2). Это поле заполняется только тогда, когда код операции равенOPERATION_SMDX_SUBJECT_REASON_CODE.
Эти четыре значения позволяют вызывающей стороне API eUICC обрабатывать конкретные ошибки по отдельности. Ниже приведён пример обработки этих ошибок.
int operationCode = intent.get(EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE)
int errorCode = intent.get(EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE)
String smdxSubjectCode = intent.get(EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_SUBJECT_CODE)
String smdxReasonCode = intent.get(EXTRA_EMBEDDED_SUBSCRIPTION_SMDX_REASON_CODE)
if (operationCode == OPERATION_DOWNLOAD && errorCode == ERROR_CARRIER_LOCKED) {
// handle specific error i.e. tries to download but the device is carrier locked
} else if (operationCode == OPERATION_SMDX) {
// handle all SM-DP+/SM-DS errors
} else if (errorCode == ERROR_TIME_OUT) {
// handle all types of time out issues, regardless of operation.
} else if ("8.1".equals(smdxSubjectCode) && "3.1".equals(smdxReasonCode)) {
// handle specific subject code and reason code: 8.1 and 4.1 means insufficient memory.
}
Поддерживаемые комбинации кодов операций и ошибок
В таблице ниже описаны поддерживаемые комбинации операций и кодов ошибок, возвращаемых локальным помощником профилирования (LPA).
| Комбинации кодов операций и ошибок | |||
|---|---|---|---|
| Код операции | Код ошибки | Описание | |
OPERATION_SYSTEM | Непригодный | Произошла внутренняя ошибка. Например, поток был прерван или возникла ошибка IOException . | |
OPERATION_SIM_SLOT | Непригодный | Произошла внутренняя ошибка при выполнении операции с SIM-слотом. | |
ERROR_TIME_OUT | Произошло превышение времени ожидания при попытке выполнить операцию с SIM-картой. | ||
ERROR_EUICC_MISSING | На устройстве отсутствует или неактивна электронная кредитная карта eUICC. | ||
OPERATION_EUICC_CARD | Непригодный | При выполнении операции eUICC произошла внутренняя ошибка. | |
ERROR_UNSUPPORTED_VERSION | Версия чипа eUICC и версия программного обеспечения eUICCCard несовместимы. | ||
ERROR_EUICC_MISSING | В устройстве отсутствует SIM-карта. Например, LPA не может обнаружить SIM-карту. | ||
OPERATION_SMDX | Непригодный | При выполнении операции SM-DP+/SM-DS произошла внутренняя ошибка. | |
ERROR_ADDRESS_MISSING | Для загрузки профиля не требуется адрес SM-DP+. | ||
ERROR_INVALID_CONFIRMATION_CODE | Произошла ошибка при обработке кода активации (неверный формат). | ||
ERROR_CERTIFICATE_ERROR | Ошибка хранилища ключей или сертификата при использовании в TLS-соединении для проверки. | ||
ERROR_NO_PROFILES_AVAILABLE | Профили из SM-DP+ недоступны. | ||
ERROR_CONNECTION_ERROR | Не удаётся установить соединение с сервером. | ||
ERROR_INVALID_RESPONSE | Неверный ответ от сервера SM-DP+/SM-DS. | ||
OPERATION_SWITCH | Непригодный | При выполнении операции переключения произошла внутренняя ошибка. | |
ERROR_CARRIER_LOCKED | Переключение профиля невозможно, поскольку устройство заблокировано оператором связи (SIM-карта заблокирована). | ||
OPERATION_DOWNLOAD | Непригодный | При выполнении операции загрузки произошла внутренняя ошибка. | |
ERROR_DISALLOWED_BY_PPR | Таблица авторизации правил в eUICC пуста, или загрузка запрещена правилом политики профиля. | ||
ERROR_INVALID_ACTIVATION_CODE | Произошла ошибка при обработке кода активации (неверный формат) или при попытке загрузки без кода активации. | ||
ERROR_CARRIER_LOCKED | Загрузка невозможна, поскольку устройство заблокировано оператором связи (SIM-карта заблокирована). | ||
ERROR_INCOMPATIBLE_CARRIER | Оператор связи находится в черном списке, и LPA не может загрузить профиль из SM-DP+/SM-DS. | ||
ERROR_OPERATION_BUSY | Загрузка профиля выполняется, и любые другие действия, которые могут привести к изменению состояния SIM-карты, запрещены. | ||
OPERATION_METADATA | Непригодный | При выполнении операции с метаданными произошла внутренняя ошибка. | |
ERROR_INVALID_ACTIVATION_CODE | Метаданные подписки пусты, или код активации в метаданных подписки пуст или недействителен. | ||
ERROR_INCOMPATIBLE_CARRIER | Перевозчик находится в черном списке, и LPA не может загрузить профиль этого перевозчика из SM-DP+/SM-DS. | ||
OPERATION_EUICC_GSMA | Непригодный | При выполнении операции eUICC GSMA произошла внутренняя ошибка. | |
ERROR_INSTALL_PROFILE | Ошибка eUICC при попытке установить профиль. Например, профиль уже существует или ICCID не совпадает. | ||
ERROR_EUICC_INSUFFICIENT_MEMORY | Ошибка при установке профиля с eUICC. Недостаточно памяти на eUICC. | ||
ERROR_DISALLOWED_BY_PPR | Ошибка с eUICC при попытке установить профиль. Не разрешено правилом политики профиля. | ||
OPERATION_APDU | Непригодный | При выполнении операции APDU произошла внутренняя ошибка. | |
OPERATION_HTTP | 1-999 | Код ошибки — это значение ошибки HTTP. | |
| Код операции | Код темы | Код причины | Описание |
OPERATION_SMDX_SUBJECT_REASON_CODE | Строка содержит 3 цифры, разделённые точкой, без ведущих нулей. Например, 8.1.1 . | Строка содержит 3 цифры, разделённые точкой, без ведущих нулей. Например, 3.8 . | SubjectCode[5.2.6.1] и ReasonCode[5.2.6.2] из GSMA (SGP.22 v2.2). Например, SubjectCode 8.1.1 и ReasonCode 3.8 означают, что EID привязан к другому устройству. |