التعامل مع أخطاء واجهة برمجة التطبيقات eUICC

توفّر واجهات برمجة تطبيقات eUICC رموز خطأ لمساعدة التطبيقات والمستخدمين في تحديد المشاكل وحلّها، مثل المشاكل المتعلّقة بتنزيل ملفات تعريف eSIM وتفعيلها وإيقافها وحذفها.

معالجة الأخطاء

عند حدوث خطأ أثناء طلب بيانات من واجهة برمجة تطبيقات eUICC، يتم تقديم معاودة الاتصال بـ PendingIntent ويتم استخدام EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE كمفتاح للحصول على رمز الخطأ التفصيلي. اعتبارًا من Android 11، يتم تضمين المفاتيح والقيم الأربعة التالية في النية الناتجة:

  • EXTRA_EMBEDDED_SUBSCRIPTION_OPERATION_CODE: تقدّم هذه السمة معلومات حول المشكلة التي حدثت. على سبيل المثال، تنزيل ملف تعريف الشريحة الإلكترونية أو حذفه. لا يكون هذا الحقل فارغًا أبدًا.
  • 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 الإصدار 2.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 الإصدار 2.2). لا يتم ملء هذا الحقل إلا عندما يكون رمز العملية OPERATION_SMDX_SUBJECT_REASON_CODE.

تسمح هذه القيم الأربع لمستخدم واجهة برمجة تطبيقات 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 لا تنطبق حدث خطأ داخلي أثناء تنفيذ عملية GSMA على شريحة eUICC.
ERROR_INSTALL_PROFILE حدث خطأ في eUICC أثناء محاولة تثبيت الملف الشخصي. على سبيل المثال، إذا كان الملف الشخصي موجودًا من قبل أو إذا كان رقم ICCID غير مطابق.
ERROR_EUICC_INSUFFICIENT_MEMORY حدث خطأ في eUICC أثناء محاولة تثبيت الملف الشخصي. لا تتوفّر ذاكرة كافية على شريحة eSIM.
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 (الإصدار 2.2 من SGP.22). على سبيل المثال، يعني SubjectCode بقيمة 8.1.1 وReasonCode بقيمة 3.8 أنّ معرّف EID مرتبط بجهاز آخر.