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

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

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

Если при вызове API eUICC возникает ошибка, предоставляется обратный вызов с ожидающим намерением, а 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 , которые вместе предоставляют ObjectCode[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 , которые вместе предоставляют ObjectCode[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 имеет значение null или загрузка запрещена правилом политики профиля.
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 цифры, разделенные точкой, без ведущих нулей. Например, 3.8 . Код субъекта[5.2.6.1] и код причины[5.2.6.2] из GSMA (SGP.22 v2.2). Например, код субъекта 8.1.1 и код причины 3.8 означают, что EID привязан к другому устройству.