eUICC API предоставляют коды ошибок, которые помогают приложениям и пользователям устранять неполадки, связанные со скачиванием, включением, отключением и удалением профилей eSIM.
Обработка ошибок
Если при вызове eUICC API возникает ошибка, предоставляется обратный вызов отложенного намерения и EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE используется в качестве ключа для получения подробного кода ошибки. Начиная с Android 11 в результирующий интент включаются следующие четыре ключа и значения:
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.
Эти четыре значения позволяют вызывающему абоненту eUICC API обрабатывать определенные ошибки по отдельности. Ниже приведен пример того, как обрабатывать такие ошибки.
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 |
Строка содержит три цифры, разделенные точкой, без нулей в начале. Пример: 8.1.1. |
Строка содержит три цифры, разделенные точкой, без нулей в начале. Например, 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 связан с другим устройством. |