Как устранять ошибки eUICC API

eUICC API предоставляют коды ошибок, которые помогают приложениям и пользователям устранять неполадки, связанные со скачиванием, включением, отключением и удалением профилей eSIM.

Обработка ошибок

Если при вызове eUICC API возникает ошибка, предоставляется обратный вызов отложенного намерения и EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE используется в качестве ключа для получения подробного кода ошибки. Начиная с Android 11 в результирующий интент включаются следующие четыре ключа и значения:

  • EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE: Содержит информацию о том, что пошло не так. например при скачивании или удалении профиля eSIM. Это поле всегда заполнено.
  • EXTRA_EMBEDDED_SUBSCRIPTION_ERROR_CODE: Информация о том, почему произошла ошибка. Например, время ожидания запроса истекло или устройство заблокировано оператором связи. Это поле не заполняется в следующих случаях:

  • 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 связан с другим устройством.