تسمح تقنية شريحة SIM المضمّنة (eSIM أو eUICC) لمستخدمي الأجهزة الجوّالة بما يلي: يمكنك تنزيل ملف شخصي لمشغّل شبكة الجوّال وتفعيل خدمة مشغّل شبكة الجوّال بدون الحاجة إلى شريحة SIM. وهي مواصفات عالمية تستند إلى الجمعية الدولية لشبكات الهاتف الجوّال (GSMA) والتي تتيح توفير شريحة SIM عن بُعد (RSP) لأي جهاز محمول. البدء بـ Android 9، يوفر إطار عمل Android واجهات برمجة تطبيقات قياسية الوصول إلى شريحة eSIM وإدارة الملفات الشخصية للاشتراك على شريحة eSIM هذه eUICC واجهات برمجة التطبيقات (APIs) التي تمكّن الجهات الخارجية من تطوير تطبيقات مشغّل شبكة الجوّال وملفها الشخصي المحلي تطبيقات "مساعد Google" (LPA) على أجهزة Android المزوَّدة بشريحة eSIM.
"إعلانات الأنشطة التجارية" (LPA) هي تطبيق نظام مستقل يجب تضمينه في صورة إصدار Android يمكن بشكل عام إدارة الملفات الشخصية على شريحة eSIM من خلال لـ LPA، لأنها تعمل كجسر بين SM-DP+ (الخدمة عن بُعد التي وإعداد حزم الملف الشخصي وتخزينها وتسليمها إلى الأجهزة) وشريحة eUICC. يمكن أن تتضمن حزمة APK LPA بشكل اختياري مكونًا لواجهة المستخدم، يُسمى واجهة مستخدم LPA أو LUI توفير مكان مركزي للمستخدم لإدارة جميع الاشتراكات المضمّنة الشخصية. يعمل إطار عمل Android تلقائيًا على اكتشاف أفضل التطبيقات والاتصال بها LPA المتاحة، وتوجه جميع عمليات eUICC من خلال مثيل LPA.
الشكل 1. بنية RSP المبسّطة
على مشغّلي شبكات الجوّال المهتمين بإنشاء تطبيق لمشغّل شبكة الجوّال الاطّلاع على
واجهات برمجة التطبيقات في
EuiccManager
،
والذي يوفر عمليات عالية المستوى لإدارة الملف الشخصي مثل
downloadSubscription()
وswitchToSubscription()
و
deleteSubscription()
إذا كنت مصنّعًا أصليًا للأجهزة وتريد إنشاء تطبيق نظام LPA خاص بك، يجب:
توسيع
EuiccService
لإطار عمل Android للربط بخدمات إعلانات الأنشطة التجارية المحلية. بالإضافة إلى ذلك،
واجهات برمجة التطبيقات (API) في
EuiccCardManager
،
التي توفر وظائف ES10x استنادًا إلى الإصدار 2.0 من بروتوكول GSMA RSP.
تُستخدَم هذه الدوال لإصدار أوامر لشريحة eUICC، مثل
prepareDownload()
، loadBoundProfilePackage()
، retrieveNotificationList()
،
وresetMemory()
.
تتوفر واجهات برمجة التطبيقات في
EuiccManager
تطبيق تطبيق LPA منفّذ بشكل صحيح ليعمل ومتصل
EuiccCardManager
يجب أن تكون واجهات برمجة التطبيقات LPA. ويفرض ذلك إطار عمل Android.
يمكن أن تتوافق الأجهزة التي تعمل بنظام التشغيل Android 10 أو الإصدارات الأحدث أجهزة مزوّدة بشرائح eSIM متعددة. لمزيد من المعلومات، يُرجى مراجعة التوافق مع شرائح eSIM متعددة
إنشاء تطبيق مشغّل شبكة جوّال
تتيح واجهات برمجة التطبيقات eUICC في Android 9 إمكانية مشغلي شبكات الجوال لإنشاء تطبيقات تحمل العلامة التجارية لشركة الجوال لإدارة ملفات التعريف مباشرةً. يشمل ذلك تنزيل الملفات الشخصية للاشتراك وحذفها. مملوكًا لمشغّل شبكة الجوّال، بالإضافة إلى التبديل إلى ملف شخصي يملكه مشغّل شبكة الجوّال.
مدير EuiccManager
EuiccManager
هي نقطة الدخول الرئيسية التي تتيح للتطبيقات التفاعل مع
إعلانات الأنشطة التجارية المحلية. يشمل ذلك تطبيقات مشغّل شبكة الجوّال التي تنزّل المحتوى وتحذفه وتحوّله إلى
الاشتراكات المملوكة لمشغِّل شبكة الجوّال. ويتضمن ذلك أيضًا تطبيق نظام LUI، الذي
توفّر موقعًا مركزيًا/واجهة مستخدم لإدارة جميع الاشتراكات المضمّنة
يمكن أن يكون تطبيقًا منفصلاً عن التطبيق الذي يوفّر EuiccService
.
لاستخدام واجهات برمجة التطبيقات العامة، يجب أن يحصل تطبيق مشغّل شبكة الجوّال أولاً على مثيل
من EuiccManager
إلى Context#getSystemService
:
EuiccManager mgr = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
يجب التحقق مما إذا كانت شريحة eSIM متوافقة مع الجهاز قبل تنفيذ أي
عمليات eSIM. تعرض الدالة EuiccManager#isEnabled()
عادةً القيمة true
إذا كانت
يتم تحديد ميزة android.hardware.telephony.euicc
ويتم تصنيف حزمة إعلانات الأنشطة التجارية المحلية
حاليًا.
if (mgr == null || !mgr.isEnabled()) {
return;
}
للحصول على معلومات حول أجهزة eUICC وإصدار نظام تشغيل eSIM:
EuiccInfo info = mgr.getEuiccInfo();
String osVer = info.getOsVersion();
تستخدم العديد من واجهات برمجة التطبيقات، مثل downloadSubscription()
وswitchToSubscription()
،
PendingIntent
عمليات معاودة الاتصال لأنّ اكتمالها قد يستغرق ثوانٍ أو حتى دقائق.
تم إرسال PendingIntent
مع رمز نتيجة في
مساحة EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_
، التي توفر
رموز الخطأ المحددة لإطار العمل، بالإضافة إلى رمز نتيجة مفصل عشوائي
من LPA كـ EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE
، ما يسمح
تطبيق مشغّل شبكة الجوّال لتتبّعه لأغراض التسجيل أو تصحيح الأخطاء. PendingIntent
يجب أن تكون قيمة معاودة الاتصال BroadcastReceiver
.
لتنزيل اشتراك معيّن قابل للتنزيل (يتم إنشاؤه من رمز التفعيل أو رمز الاستجابة السريعة):
// Register receiver.
static final String ACTION_DOWNLOAD_SUBSCRIPTION = "download_subscription";
static final String LPA_DECLARED_PERMISSION
= "com.your.company.lpa.permission.BROADCAST";
BroadcastReceiver receiver =
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (!action.equals(intent.getAction())) {
return;
}
resultCode = getResultCode();
detailedCode = intent.getIntExtra(
EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE,
0 /* defaultValue*/);
// If the result code is a resolvable error, call startResolutionActivity
if (resultCode == EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR) {
PendingIntent callbackIntent = PendingIntent.getBroadcast(
getContext(), 0 /* requestCode */, intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
mgr.startResolutionActivity(
activity,
0 /* requestCode */,
intent,
callbackIntent);
}
resultIntent = intent;
}
};
context.registerReceiver(receiver,
new IntentFilter(ACTION_DOWNLOAD_SUBSCRIPTION),
LPA_DECLARED_PERMISSION /* broadcastPermission*/,
null /* handler */);
// Download subscription asynchronously.
DownloadableSubscription sub = DownloadableSubscription
.forActivationCode(code /* encodedActivationCode*/);
Intent intent = new Intent(action).setPackage(context.getPackageName());
PendingIntent callbackIntent = PendingIntent.getBroadcast(
getContext(), 0 /* requestCode */, intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
mgr.downloadSubscription(sub, true /* switchAfterDownload */,
callbackIntent);
حدِّد الإذن واستخدامه في AndroidManifest.xml
:
<permission android:protectionLevel="signature" android:name="com.your.company.lpa.permission.BROADCAST" />
<uses-permission android:name="com.your.company.lpa.permission.BROADCAST"/>
للتبديل إلى اشتراك مزوّد بمعرّف الاشتراك:
// Register receiver.
static final String ACTION_SWITCH_TO_SUBSCRIPTION = "switch_to_subscription";
static final String LPA_DECLARED_PERMISSION
= "com.your.company.lpa.permission.BROADCAST";
BroadcastReceiver receiver =
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (!action.equals(intent.getAction())) {
return;
}
resultCode = getResultCode();
detailedCode = intent.getIntExtra(
EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE,
0 /* defaultValue*/);
resultIntent = intent;
}
};
context.registerReceiver(receiver,
new IntentFilter(ACTION_SWITCH_TO_SUBSCRIPTION),
LPA_DECLARED_PERMISSION /* broadcastPermission*/,
null /* handler */);
// Switch to a subscription asynchronously.
Intent intent = new Intent(action).setPackage(context.getPackageName());
PendingIntent callbackIntent = PendingIntent.getBroadcast(
getContext(), 0 /* requestCode */, intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
mgr.switchToSubscription(1 /* subscriptionId */, callbackIntent);
للحصول على قائمة كاملة بواجهات برمجة تطبيقات EuiccManager
وأمثلة على الرموز البرمجية، يمكنك الاطّلاع على
واجهات برمجة تطبيقات eUICC.
الأخطاء القابلة للحلّ
في بعض الحالات، يتعذّر على النظام إكمال عملية eSIM.
ولكن يمكن للمستخدم حل الخطأ. على سبيل المثال: downloadSubscription
قد يتعذّر تنفيذ الإجراء إذا كانت البيانات الوصفية للملف الشخصي تشير إلى أنّ رمز تأكيد مشغّل شبكة الجوّال
مطلوبة. أو قد يتعذّر تنفيذ سياسة switchToSubscription
إذا كان تطبيق مشغّل شبكة الجوّال لديه مشغّل شبكة جوّال.
امتيازات على الملف الشخصي الوجهة (أي أن مشغِّل شبكة الجوّال يمتلك الملف الشخصي) ولكن
لا يمتلك امتيازات مشغِّل شبكة الجوّال مقارنةً بالملف الشخصي المفعَّل حاليًا، وبالتالي
موافقة المستخدم مطلوبة.
في هذه الحالات، يتم استدعاء معاودة الاتصال للمتصل باستخدام
EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR
معاودة الاتصال
يحتوي Intent
على ميزات إضافية داخلية، لذلك عندما يمرّره المتصل إلى
EuiccManager#startResolutionActivity
,
الحل من خلال LUI. يعد استخدام رمز التأكيد
المثال مرة أخرى،
EuiccManager#startResolutionActivity
تؤدي إلى تشغيل شاشة LUI تتيح للمستخدم إدخال رمز التأكيد
بعد إدخال الرمز، يتم استئناف عملية التنزيل. هذا الأسلوب
تزويد تطبيق مشغل شبكة الجوال بالتحكم الكامل في وقت عرض واجهة المستخدم، ولكنه يوفر
LPA/LUI وهي طريقة قابلة للتوسُّع لإضافة معالجة جديدة للبيانات القابلة للاسترداد للمستخدم
حدوث أي مشاكل في المستقبل بدون الحاجة إلى تغيير تطبيقات العميل.
يحدد Android 9 هذه الأخطاء التي يمكن حلها في
EuiccService
،
والذي ينبغي أن تتعامل معه LUI:
/**
* Alert the user that this action will result in an active SIM being
* deactivated. To implement the LUI triggered by the system, you need to define
* this in AndroidManifest.xml.
*/
public static final String ACTION_RESOLVE_DEACTIVATE_SIM =
"android.service.euicc.action.RESOLVE_DEACTIVATE_SIM";
/**
* Alert the user about a download/switch being done for an app that doesn't
* currently have carrier privileges.
*/
public static final String ACTION_RESOLVE_NO_PRIVILEGES =
"android.service.euicc.action.RESOLVE_NO_PRIVILEGES";
/** Ask the user to resolve all the resolvable errors. */
public static final String ACTION_RESOLVE_RESOLVABLE_ERRORS =
"android.service.euicc.action.RESOLVE_RESOLVABLE_ERRORS";
امتيازات مشغِّل شبكة الجوّال
إذا كنت مشغِّل شبكة جوّال يطوِّر تطبيق مشغّل شبكة الجوّال الخاص بك ويتصل برقم EuiccManager
لتنزيل الملفات الشخصية على جهاز، يجب أن يتضمّن ملفك الشخصي مشغّل شبكة الجوّال.
قواعد الامتيازات المقابلة لتطبيق مشغّل شبكة الجوّال في البيانات الوصفية. هذا هو
لأنّ الملفات الشخصية المتوفّرة للاشتراكات التابعة لمشغّلي شبكات جوّال مختلفة يمكن أن تكون متاحة للاستخدام معًا
eUICC لأي جهاز، وينبغي السماح لكل تطبيق من تطبيقات مشغّل شبكة الجوّال بالوصول إلى
الملفات الشخصية التي يملكها مشغّل شبكة الجوّال هذا. على سبيل المثال، يجب ألا تتمكن شركة النقل "أ" من
تنزيل ملف شخصي يملكه مشغّل شبكة الجوّال "ب" أو تفعيله أو إيقافه
يستخدم Android آلية لضمان إمكانية وصول المالك فقط إلى الملف التجاري
منح امتيازات خاصة لتطبيق مالك الملف الشخصي (أي تطبيق مشغّل شبكة الجوّال). تشير رسالة الأشكال البيانية
نظام Android الأساسي يحمّل الشهادات المخزَّنة في ملف قاعدة الوصول للملف الشخصي
(ARF) ويمنح الإذن للتطبيقات الموقّعة من خلال هذه الشهادات لإجراء مكالمات
إلى EuiccManager
من واجهات برمجة التطبيقات. في ما يلي توضيح للعملية رفيعة المستوى:
- يوقّع عامل التشغيل على حزمة APK الخاصة بتطبيق مشغّل شبكة الجوّال. الـ apksigner شهادة المفتاح العام بملف APK.
يعمل عامل التشغيل/SM-DP+ على إعداد ملف شخصي وبياناته الوصفية، والتي تشمل إطار عمل ARF يحتوي على:
- توقيع (SHA-1 أو SHA-256) لشهادة المفتاح العام لتطبيق مشغّل شبكة الجوّال (يجب ملء هذا الحقل)
- اسم حزمة تطبيق مشغّل شبكة الجوّال (يُنصح به بشدة)
يحاول تطبيق مشغّل شبكة الجوّال تنفيذ عملية eUICC باستخدام واجهة برمجة التطبيقات
EuiccManager
.يتحقّق نظام Android الأساسي من تجزئة SHA-1 أو SHA-256 في تطبيق المتصل. تتطابق مع توقيع الشهادة التي تم الحصول عليها من ARF للملف الشخصي المستهدف. إذا كان اسم حزمة تطبيق مشغّل شبكة الجوّال مُدرجًا في ARF، فيجب أن يتطابق أيضًا مع اسم حزمة تطبيق المتصل.
بعد إثبات صحة التوقيع واسم الحزمة (إذا كانا مُدرَجَين)، يتم منح امتياز مشغّل شبكة الجوّال لتطبيق المتّصل بدلاً من الملف الشخصي المستهدَف.
نظرًا لأن البيانات الوصفية للملف الشخصي يمكن أن تكون متاحة خارج الملف الشخصي نفسه (بحيث يمكن لـ LPA استرداد البيانات الوصفية للملف الشخصي من SM-DP+ قبل تحميل الملف الشخصي بالفعل، أو من ISD-R عند تعطيل الملف الشخصي)، يجب أن تحتوي على نفس قواعد امتيازات مشغل شبكة الجوال كما في الملف الشخصي.
يجب أن يتيح نظام التشغيل eUICC وSM-DP+ علامة ملكية BF76
في الملف الشخصي.
بيانات التعريف. يجب أن يكون محتوى العلامة مطابقًا لقواعد امتيازات مشغّل شبكة الجوّال نفسها كما تم عرضها
من خلال التطبيق الصغير لقاعدة الوصول (ARA) المحدد في
امتيازات مشغِّل شبكة الجوّال في UICC:
RefArDo ::= [PRIVATE 2] SEQUENCE { -- Tag E2
refDo [PRIVATE 1] SEQUENCE { -- Tag E1
deviceAppIdRefDo [PRIVATE 1] OCTET STRING (SIZE(20|32)), -- Tag C1
pkgRefDo [PRIVATE 10] OCTET STRING (SIZE(0..127)) OPTIONAL -- Tag CA
},
arDo [PRIVATE 3] SEQUENCE { -- Tag E3
permArDo [PRIVATE 27] OCTET STRING (SIZE(8)) -- Tag DB
}
}
لمزيد من التفاصيل حول ميزة "توقيع التطبيق"، يُرجى الاطّلاع على وقِّع تطبيقك. للحصول على تفاصيل حول امتيازات مشغِّل شبكة الجوّال، يمكنك الاطّلاع على امتيازات مشغِّل شبكة الجوّال في واجهة برمجة التطبيقات (UICC)
إنشاء تطبيق مساعد لملف شخصي محلي
يمكن للشركات المصنّعة للأجهزة تنفيذ مساعد ملف شخصي محلي (LPA)، والذي يجب جذبه باستخدام واجهات برمجة التطبيقات Android Euicc تقدم الأقسام التالية نظرة عامة موجزة عن إنشاء تطبيق LPA ودمجه مع نظام Android.
متطلبات الأجهزة أو المودم
يجب أن يتوافق تطبيق LPA ونظام التشغيل eSIM على شريحة eUICC مع بروتوكول GSMA RSP على الأقل (عن بُعد. توفير شريحة SIM) الإصدار 2.0 أو الإصدار 2.2. يجب عليك أيضًا أن تخطط لاستخدام SM-DP+ وSM-DS ذات إصدار RSP مطابق. للحصول على بنية RSP التفصيلية، راجع مواصفات بنية بروتوكول GSMA SGP.21 RSP.
بالإضافة إلى ذلك، يمكن الدمج مع واجهات برمجة تطبيقات eUICC في Android 9، يجب أن يرسل مودم الجهاز إمكانات الوحدة الطرفية مع دعم إمكانات eUICC المشفرة (إدارة الملفات الشخصية المحلية تنزيل الملف الشخصي). يجب أيضًا تنفيذ الطرق التالية:
- الإصدار 1.1 من IRadio HAL:
setSimPower
الإصدار 1.2 من IRadio HAL:
getIccCardStatus
الإصدار 1.0 من IRadioConfig HAL:
getSimSlotsStatus
الإصدار 1.0 من IRadioConfig AIDL:
getAllowedCarriers
يجب أن تعرف "إعلانات الأنشطة التجارية المحلية" في Google حالة قفل مشغّل شبكة الجوّال لتتمكّن من السماح لمشغّل شبكة الجوّال بتنزيل شريحة eSIM أو نقلها فقط. وإلا فقد ينتهي الأمر بالمستخدمين بتنزيل شريحة SIM ونقلها ثم يدركون لاحقًا أن الجهاز مقفل أمام مشغِّل شبكة جوّال آخر.
على المورّدين أو المصنّعين الأصليين للأجهزة تنفيذ واجهة برمجة التطبيقات IRadioSim.getAllowedCarriers()HAL API.
على المورّد RIL / مودم ملء حالة القفل ومعرّف شركة النقل لمشغِّل شبكة الجوّال حيث يكون الجهاز مقفلاً، وذلك كجزء من واجهة برمجة التطبيقات IRadioSimResponse.getAllowedCarriersResponse()HAL.
من المفترض أن يتعرّف المودم على شريحة eSIM مع تفعيل الملف الشخصي التلقائي للتشغيل. شريحة SIM صالحة وإبقاء شريحة SIM قيد التشغيل.
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 10، واجهة eUICC غير قابلة للإزالة
يجب تحديد مصفوفة معرّف الشريحة. على سبيل المثال، راجع
arrays.xml
<resources>
<!-- Device-specific array of SIM slot indexes which are are embedded eUICCs.
e.g. If a device has two physical slots with indexes 0, 1, and slot 1 is an
eUICC, then the value of this array should be:
<integer-array name="non_removable_euicc_slots">
<item>1</item>
</integer-array>
If a device has three physical slots and slot 1 and 2 are eUICCs, then the value of
this array should be:
<integer-array name="non_removable_euicc_slots">
<item>1</item>
<item>2</item>
</integer-array>
This is used to differentiate between removable eUICCs and built in eUICCs, and should
be set by OEMs for devices which use eUICCs. -->
<integer-array name="non_removable_euicc_slots">
<item>1</item>
</integer-array>
</resources>
للحصول على قائمة كاملة بمتطلبات المودم، راجع متطلبات المودم لدعم شرائح eSIM
خدمة EuiccService
يتألّف هذا الإعلان من مكوّنَين منفصلَين (يمكن تنفيذ كلّ منهما في APK): الواجهة الخلفية LPA وواجهة مستخدم LPA أو LUI.
لتنفيذ الواجهة الخلفية LPA، يجب تمديد
EuiccService
يجب الإفصاح عن هذه الخدمة في ملف البيان. يجب أن تتطلب الخدمة
إذن نظام android.permission.BIND_EUICC_SERVICE
للتأكد من أن
التي يمكن أن يرتبط بها النظام بها. يجب أن تتضمن الخدمة أيضًا فلتر أهداف مع
الإجراء android.service.euicc.EuiccService
. أولوية الهدف
يجب تعيين الفلتر على قيمة غير صفرية في حالة حدوث عمليات تنفيذ متعددة
الموجودة على الجهاز. مثلاً:
<service
android:name=".EuiccServiceImpl"
android:permission="android.permission.BIND_EUICC_SERVICE">
<intent-filter android:priority="100">
<action android:name="android.service.euicc.EuiccService" />
</intent-filter>
</service>
على المستوى الداخلي، يحدّد إطار عمل Android "إعلانات الأنشطة التجارية المحلية" النشطة ويتفاعل مع
حسب الحاجة لدعم واجهات برمجة تطبيقات Android eUICC. تم الاستعلام عن PackageManager
عن
جميع التطبيقات التي لديها إذن android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS
ويحدّد خدمة للإجراء android.service.euicc.EuiccService
.
يتم اختيار الخدمة ذات الأولوية القصوى. في حال عدم العثور على أي خدمة، يتم استخدام إعلانات الأنشطة التجارية المحلية.
تم إيقاف الدعم.
لتنفيذ LUI، يجب توفير نشاط للإجراءات التالية:
android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS
android.service.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION
وكما هو الحال مع الخدمة، يجب أن يتطلب كل نشاط
إذن نظام android.permission.BIND_EUICC_SERVICE
. يجب أن يكون لكل منها
فلتر الأهداف مع الإجراء المناسب،
فئة android.service.euicc.category.EUICC_UI
، وأولوية غير صفرية.
يتم استخدام منطق مماثل لاختيار عمليات التنفيذ لهذه الأنشطة
باختيار تنفيذ
EuiccService
مثلاً:
<activity android:name=".MyLuiActivity"
android:exported="true"
android:permission="android.permission.BIND_EUICC_SERVICE">
<intent-filter android:priority="100">
<action android:name="android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS" />
<action android:name="android.service.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.service.euicc.category.EUICC_UI" />
</intent-filter>
</activity>
وهذا يعني أن واجهة المستخدم التي تطبق هذه الشاشات يمكن أن تأتي من
حزمة APK من التطبيق الذي ينفذ
EuiccService
ما إذا كان لديك حزمة APK واحدة أو عدة حِزم APK (على سبيل المثال، حزمة قابلة للتنفيذ)
EuiccService
وأحد الخيارات التي توفّر أنشطة LUI) هو اختيار للتصميم.
مدير EuiccCard
EuiccCardManager
هي واجهة للاتصال بشريحة eSIM. أُنشأها جون هنتر، الذي كان متخصصًا
وتوفر وظائف ES10 (كما هو موضح في مواصفات GSMA RSP)
أوامر طلب/استجابة APDU منخفضة المستوى بالإضافة إلى تحليل ASN.1.
EuiccCardManager
هي واجهة برمجة تطبيقات للنظام ولا يمكن طلبها إلا من خلال الأذونات التي يمنحها النظام
التطبيقات.
الشكل 2. كل من تطبيق مشغّل شبكة الجوّال و"إعلانات المنتجات داخل المتجر" تستخدم واجهات Euicc API
تتطلّب واجهات برمجة التطبيقات لعملية الملف الشخصي من خلال EuiccCardManager
أن يكون المتصل
LPA. ويفرض ذلك إطار عمل Android. هذا يعني أن المتصل يجب
أن يتم توسيع نطاق EuiccService
وأن يتم الإعلان عنه في ملف البيان، على النحو الموضَّح في
الأقسام السابقة.
كما هي الحال في EuiccManager
، لاستخدام واجهات برمجة التطبيقات EuiccCardManager
، يجب أن يكون منتج LPA
الحصول على مثيل EuiccCardManager
لأول مرة من خلال
Context#getSystemService
:
EuiccCardManager cardMgr = (EuiccCardManager) context.getSystemService(Context.EUICC_CARD_SERVICE);
بعد ذلك، للحصول على جميع الملفات الشخصية في eUICC:
ResultCallback<EuiccProfileInfo[]> callback =
new ResultCallback<EuiccProfileInfo[]>() {
@Override
public void onComplete(int resultCode,
EuiccProfileInfo[] result) {
if (resultCode == EuiccCardManagerReflector.RESULT_OK) {
// handle result
} else {
// handle error
}
}
};
cardMgr.requestAllProfiles(eid, AsyncTask.THREAD_POOL_EXECUTOR, callback);
داخليًا، يرتبط EuiccCardManager
بـ EuiccCardController
(الذي يتم تشغيله في
الهاتف) من خلال واجهة AIDL، وكل طريقة من طرق EuiccCardManager
تتلقّى معاودة الاتصال من خلال عملية الهاتف من خلال واجهة AIDL مختلفة ومخصّصة
من واجهة pyplot. عند استخدام واجهات برمجة تطبيقات EuiccCardManager
، على المتصل (LPA) تقديم
Executor
الكائن الذي يتم استدعاء رد الاتصال من خلاله. قد يتم تشغيل كائن Executor
هذا في
سلسلة محادثات واحدة أو مجموعة سلاسل محادثات من اختيارك
معظم واجهات برمجة تطبيقات EuiccCardManager
لها نمط الاستخدام نفسه. على سبيل المثال، لتحميل
حزمة الملف الشخصي المرتبطة بـ eUICC:
...
cardMgr.loadBoundProfilePackage(eid, boundProfilePackage,
AsyncTask.THREAD_POOL_EXECUTOR, callback);
للتبديل إلى ملف شخصي مختلف بمعرّف ICCID محدد:
...
cardMgr.switchToProfile(eid, iccid, true /* refresh */,
AsyncTask.THREAD_POOL_EXECUTOR, callback);
للحصول على عنوان SM-DP+ التلقائي من شريحة eUICC:
...
cardMgr.requestDefaultSmdpAddress(eid, AsyncTask.THREAD_POOL_EXECUTOR,
callback);
لاسترداد قائمة بالإشعارات بأحداث الإشعارات المحدّدة:
...
cardMgr.listNotifications(eid,
EuiccNotification.Event.INSTALL
| EuiccNotification.Event.DELETE /* events */,
AsyncTask.THREAD_POOL_EXECUTOR, callback);
تفعيل ملف شخصي لشريحة eSIM من خلال أحد تطبيقات مشغّل شبكة الجوّال
على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android أو الإصدارات الأحدث، يمكنك استخدام تطبيق مشغّل شبكة الجوّال لتفعيلها.
شريحة eSIM وتنزيل الملفات الشخصية يمكن لتطبيق مشغّل شبكة الجوّال تنزيل الملفات الشخصية عن طريق
يتصل
downloadSubscription
مباشرةً أو من خلال تقديم رمز تفعيل إلى "إعلانات الأنشطة التجارية" (LPA).
عندما ينزِّل أحد تطبيقات مشغّل شبكة الجوّال ملفًا شخصيًا من خلال الاتصال
downloadSubscription
،
تفرض المكالمة إمكانية إدارة التطبيق للملف الشخصي من خلال BF76
علامة البيانات الوصفية
يعمل على ترميز قواعد امتيازات مشغِّل شبكة الجوّال
بك. إذا كان الملف الشخصي لا يحتوي على علامة BF76
أو إذا كانت العلامة BF76
لا تحتوي على هذه العلامة
تطابق توقيع تطبيق مشغّل شبكة الجوّال، فسيتم رفض التنزيل.
يصف القسم أدناه تفعيل شريحة eSIM من خلال أحد تطبيقات مشغّل شبكة الجوّال باستخدام رمز التفعيل.
تفعيل شريحة eSIM باستخدام رمز تفعيل
عند استخدام رمز تفعيل لتفعيل ملف شخصي لشريحة eSIM، تجلب "إعلانات الأنشطة التجارية المحلية" (LPA)
رمز تفعيل من
تطبيق مشغل شبكة الجوال ويقوم بتنزيل ملف التعريف. يمكن بدء هذا المسار من خلال "إعلانات المنتجات داخل المتجر"
ويمكن لـ LPA التحكم في تدفق واجهة المستخدم بالكامل، مما يعني أنه لا توجد واجهة مستخدم لتطبيق مشغّل شبكة الجوّال
كما هو موضح. تتجاوز هذه الطريقة التحقّق من علامة BF76
، ولا ينفّذها مشغّلو الشبكة.
يجب تنفيذ مسار واجهة مستخدم تفعيل شريحة eSIM بالكامل، بما في ذلك تنزيل
الملف الشخصي لشريحة eSIM ومعالجة الأخطاء
تحديد خدمة توفير eUICC لمشغّل شبكة الجوّال
يتواصل تطبيق "إعلانات الأنشطة التجارية" (LPA) وتطبيق مشغّل شبكة الجوّال من خلال
برنامج AIDL
الواجهات:
ICarrierEuiccProvisioningService
وIGetActivationCodeCallback
شركة النقل
أن يستخدم التطبيق واجهة ICarrierEuiccProvisioningService
عريضه في
بيان البيان.
يجب أن يلتزم "إعلانات المنتجات داخل المتجر" بـ "ICarrierEuiccProvisioningService
" وتنفيذه.
IGetActivationCodeCallback
لمزيد من المعلومات حول كيفية تنفيذ
عرض واجهة AIDL، يمكنك الاطّلاع على مقالة تعريف واجهة AIDL.
لتحديد واجهات AIDL، أنشئ ملفات AIDL التالية. لكلّ من "إعلانات الأنشطة التجارية" (LPA) وتطبيقات مشغّلي شبكة الجوّال
ICarrierEuiccProvisioningService.aidl
package android.service.euicc; import android.service.euicc.IGetActivationCodeCallback; oneway interface ICarrierEuiccProvisioningService { // The method to get the activation code from the carrier app. The caller needs to pass in // the implementation of IGetActivationCodeCallback as the parameter. void getActivationCode(in IGetActivationCodeCallback callback); // The method to get the activation code from the carrier app. The caller needs to pass in // the activation code string as the first parameter and the implementation of // IGetActivationCodeCallback as the second parameter. This method provides the carrier // app the device EID which allows a carrier to pre-bind a profile to the device's EID before // the download process begins. void getActivationCodeForEid(in String eid, in IGetActivationCodeCallback callback); }
IGetActivationCodeCallback.aidl
package android.service.euicc; oneway interface IGetActivationCodeCallback { // The call back method needs to be called when the carrier app gets the activation // code successfully. The caller needs to pass in the activation code string as the // parameter. void onSuccess(String activationCode); // The call back method needs to be called when the carrier app failed to get the // activation code. void onFailure(); }
مثال على تنفيذ إعلانات LPA
للالتزام بتنفيذ ICarrierEuiccProvisioningService
لتطبيق مشغّل شبكة الجوّال،
على "إعلانات الأنشطة التجارية" (LPA) نسخ كل من ICarrierEuiccProvisioningService.aidl
IGetActivationCodeCallback.aidl
لمشروعك وتنفيذه
ServiceConnection
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
mCarrierProvisioningService = ICarrierEuiccProvisioningService.Stub.asInterface(iBinder);
}
بعد الربط بـ ICarrierEuiccProvisioningService
الخاصة بتطبيق مشغّل شبكة الجوّال
التنفيذ، استدعاءات LPA إما getActivationCode
أو
getActivationCodeForEid
للحصول على رمز التفعيل من تطبيق مشغّل شبكة الجوّال بحلول
اجتياز تنفيذ فئة التنويه الموجز IGetActivationCodeCallback
.
الفرق بين getActivationCode
وgetActivationCodeForEid
هو
يسمح getActivationCodeForEid
لمشغّل شبكة الجوّال بربط ملف شخصي مسبقًا بحساب الجهاز.
معرّف شريحة SIM المضمّنة (EID) قبل بدء عملية التنزيل.
void getActivationCodeFromCarrierApp() {
IGetActivationCodeCallback.Stub callback =
new IGetActivationCodeCallback.Stub() {
@Override
public void onSuccess(String activationCode) throws RemoteException {
// Handle the case LPA success to get activation code from a carrier app.
}
@Override
public void onFailure() throws RemoteException {
// Handle the case LPA failed to get activation code from a carrier app.
}
};
try {
mCarrierProvisioningService.getActivationCode(callback);
} catch (RemoteException e) {
// Handle Remote Exception
}
}
مثال على تنفيذ تطبيق مشغّل شبكة الجوّال
لكي يتم ربط "إعلانات الأنشطة التجارية المحلية" بتطبيق مشغّل شبكة الجوّال، يجب أن ينسخ تطبيق مشغّل شبكة الجوّال كلاً من
في ICarrierEuiccProvisioningService.aidl
وIGetActivationCodeCallback.aidl
مشروعك والإعلان عن خدمة ICarrierEuiccProvisioningService
في
ملف AndroidManifest.xml
. يجب أن تتطلب الخدمة
إذن نظام android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS
للتأكد
لا يمكن إلا لـ LPA، وهو تطبيق خاص بالنظام، الربط به. يجب أن تكون الخدمة
ضمِّن أيضًا فلتر أهداف مع
الإجراء android.service.euicc.action.BIND_CARRIER_PROVISIONING_SERVICE
.
AndroidManifest.xml
<application> ... <service android:name=".CarrierEuiccProvisioningService" android:exported="true" android:permission="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"> <intent-filter> <action android:name="android.service.euicc.action.BIND_CARRIER_PROVISIONING_SERVICE"/> </intent-filter> </service> ... </application>
لتنفيذ خدمة تطبيق مشغّل شبكة الجوّال AIDL، يجب إنشاء خدمة وتوسيع نطاق Stub
.
الصف وتنفيذ getActivationCode
وgetActivationCodeForEid
الطرق. يمكن لـ LPA بعد ذلك استدعاء أي من الطريقتين لاسترجاع تفعيل الملف الشخصي
الرمز. من المفترض أن يستجيب تطبيق مشغّل شبكة الجوّال من خلال الاتصال.
IGetActivationCodeCallback#onSuccess
مع رمز التفعيل إذا كان الرمز
التي تم جلبها من خادم مشغل شبكة الجوال بنجاح. إذا لم يتم اجتياز الاختبار، سيستخدم تطبيق مشغّل شبكة الجوّال
يجب إدخال IGetActivationCodeCallback#onFailure
للردّ.
CarrierEuiccProvisioningService.java
import android.service.euicc.ICarrierEuiccProvisioningService; import android.service.euicc.ICarrierEuiccProvisioningService.Stub; import android.service.euicc.IGetActivationCodeCallback; public class CarrierEuiccProvisioningService extends Service { private final ICarrierEuiccProvisioningService.Stub binder = new Stub() { @Override public void getActivationCode(IGetActivationCodeCallback callback) throws RemoteException { String activationCode = // do whatever work necessary to get an activation code (HTTP requests to carrier server, fetch from storage, etc.) callback.onSuccess(activationCode); } @Override public void getActivationCodeForEid(String eid, IGetActivationCodeCallback callback) throws RemoteException { String activationCode = // do whatever work necessary (HTTP requests, fetch from storage, etc.) callback.onSuccess(activationCode); } } }
بدء واجهة مستخدم تطبيق مشغّل شبكة الجوّال خلال مسار تفعيل "إعلانات الأنشطة التجارية المحلية"
على الأجهزة التي تعمل بنظام التشغيل Android 11 والإصدارات الأحدث، يمكن لـ LPA بدء واجهة المستخدم لتطبيق مشغل شبكة الجوال. ويعد هذا أمرًا مفيدًا حيث إن تطبيق مشغل شبكة الجوال قد يتطلب معلومات إضافية من المستخدم قبل تقديم رمز التفعيل إلى "إعلانات المنتجات داخل المتجر". على سبيل المثال، قد يختار مشغّلو شبكات الجوّال مطالبة المستخدمين بتسجيل الدخول لتفعيل أرقام هواتفهم أو إجراء عمليات نقل أخرى
في ما يلي خطوات بدء واجهة مستخدم لتطبيق مشغّل شبكة الجوّال في "إعلانات الأنشطة التجارية المحلية":
تُطلق "إعلانات الأنشطة التجارية المحلية" خطوات تفعيل تطبيق مشغّل شبكة الجوّال من خلال إرسال
android.service.euicc.action.START_CARRIER_ACTIVATION
هدفًا حزمة تطبيق مشغّل شبكة الجوّال التي تحتوي على الإجراء. (يجب على مستلم تطبيق مشغّل شبكة الجوّال أن تكون محمية في بيان البيان منandroid:permission="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"
إلى تجنُّب تلقّي نية الشراء من تطبيقات غير متوافقة مع "إعلانات الأنشطة التجارية" (LPA).String packageName = // The carrier app's package name Intent carrierAppIntent = new Intent(“android.service.euicc.action.START_CARRIER_ACTIVATION”) .setPackage(packageName); ResolveInfo activity = context.getPackageManager().resolveActivity(carrierAppIntent, 0); carrierAppIntent .setClassName(activity.activityInfo.packageName, activity.activityInfo.name); startActivityForResult(carrierAppIntent, requestCode);
ينفّذ تطبيق مشغّل شبكة الجوّال عمله باستخدام واجهة المستخدم الخاصة به. على سبيل المثال، يمكن أن يؤدي تسجيل في واجهة المستخدم أو إرسال طلبات HTTP إلى الواجهة الخلفية لمشغِّل شبكة الجوّال.
يردّ تطبيق مشغّل شبكة الجوّال على "إعلانات الأنشطة التجارية" (LPA) من خلال الاتصال بالرقم
setResult(int, Intent)
. وfinish()
.- إذا استجاب تطبيق مشغّل شبكة الجوّال بطلب
RESULT_OK
، سيتم تعديل بنود الخدمة. سيواصل تدفق التفعيل. إذا حدّد تطبيق مشغّل شبكة الجوّال أنّ على المستخدم مسح رمز الاستجابة السريعة ضوئيًا بدلاً من السماح لـ LPA بربط مشغِّل شبكة الجوّال. خدمة التطبيق، يستجيب تطبيق مشغّل شبكة الجوّال لـ LPA باستخدامsetResult(int, Intent)
معRESULT_OK
ومثالIntent
التي تحتوي على القيمة المنطقية الإضافية تم ضبطandroid.telephony.euicc.extra.USE_QR_SCANNER
علىtrue
. إعلانات الأنشطة التجارية المحلية ثم يتحقق من الرقم الإضافي ويشغِّل الماسح الضوئي لرمز الاستجابة السريعة بدلاً من الربط تنفيذICarrierEuiccProvisioningService
لتطبيق مشغّل شبكة الجوّال. - في حال تعطُّل تطبيق مشغّل شبكة الجوّال أو الردّ باستخدام
RESULT_CANCELED
(هذا هو رمز الاستجابة التلقائي)، تُلغي "إعلانات الأنشطة التجارية" (LPA) شريحة eSIM عملية التفعيل. - إذا استجاب تطبيق مشغّل شبكة الجوّال بعبارة أخرى غير
RESULT_OK
أوRESULT_CANCELED
، يتعامل مع "إعلانات الأنشطة التجارية المحلية" على أنّه خطأ.
لأسباب تتعلق بالأمان، ينبغي ألا تقبل إعلانات الأنشطة التجارية المحلية رمز التفعيل المقدَّم في النتيجة المقصودة لضمان عدم عرض الإعلانات لا يمكن للمتصلين الحصول على رمز التفعيل من تطبيق مشغّل شبكة الجوّال.
- إذا استجاب تطبيق مشغّل شبكة الجوّال بطلب
بدء مسار تفعيل "إعلانات الأنشطة التجارية المحلية" في أحد تطبيقات مشغّل شبكة الجوّال
بدءًا من نظام التشغيل Android 11، يمكن لتطبيقات مشغّل شبكة الجوّال استخدام واجهات برمجة التطبيقات eUICC لبدء واجهة مستخدم جديدة (LUI) لشريحة eSIM التفعيل. تعرض هذه الطريقة واجهة مستخدم مسار تفعيل شريحة eSIM الخاصة بإعلانات التطبيقات الأقل أمانًا من أجل التفعيل. الملف الشخصي لشريحة eSIM. بعد ذلك، تُرسِل "إعلانات الأنشطة التجارية المحلية" (LPA) البث عندما يكون الملف الشخصي لشريحة eSIM. ينتهي التفعيل.
يجب أن تعلن "إعلانات الأنشطة التجارية المحلية" عن نشاط يتضمّن فلتر أهداف يتضمّن الإجراء
android.service.euicc.action.START_EUICC_ACTIVATION
. الأولوية يجب تعيين من فلتر الأهداف على قيمة غير صفرية في حالة استخدام من وجود التطبيقات على الجهاز. مثلاً:<application> ... <activity android:name=".CarrierAppInitActivity" android:exported="true"> <intent-filter android:priority="100"> <action android:name="android.service.euicc.action.START_EUICC_ACTIVATION" /> </intent-filter> </activity> ... </application>
ينفّذ تطبيق مشغّل شبكة الجوّال عمله باستخدام واجهة المستخدم الخاصة به. على سبيل المثال، يمكن أن يؤدي تسجيل في واجهة المستخدم أو إرسال طلبات HTTP إلى الواجهة الخلفية لمشغِّل شبكة الجوّال.
في هذه المرحلة، يجب أن يكون تطبيق مشغّل شبكة الجوّال جاهزًا لتقديم طلب تفعيل. من خلال تنفيذ
ICarrierEuiccProvisioningService
. تشير رسالة الأشكال البيانية تطبيق مشغّل شبكة الجوّال يطلق "إعلانات الأنشطة التجارية المحلية" من خلال الاتصالstartActivityForResult(Intent, int)
معandroid.telephony.euicc.action.START_EUICC_ACTIVATION
اتخاذ القرار. تفحص "إعلانات الأنشطة التجارية المحلية" أيضًا القيمة المنطقية الإضافيةandroid.telephony.euicc.extra.USE_QR_SCANNER
إذا كانت القيمة هيtrue
، يتم تُطلق إعلانات LPA الماسح الضوئي لرمز الاستجابة السريعة للسماح للمستخدم بمسح رمز الاستجابة السريعة الخاص بالملف الشخصي ضوئيًا.من جانب "إعلانات الأنشطة التجارية المحلية"، ترتبط هذه الإعلانات تنفيذ
ICarrierEuiccProvisioningService
لاسترجاع التفعيل الرمز وتنزيل الملف الشخصي المطابق. يعرض إعلانات الأنشطة التجارية المحلية كل ما يلزم عناصر واجهة المستخدم أثناء عملية التنزيل، مثل شاشة التحميلعند اكتمال تدفق تفعيل إعلانات الأنشطة التجارية المحلية، يستجيب هذا الطلب تطبيق مشغّل شبكة الجوّال برمز النتيجة الذي يتعامل معه تطبيق مشغّل شبكة الجوّال
onActivityResult(int, int, Intent)
- إذا نجحت "إعلانات الأنشطة التجارية المحلية" في تنزيل الملف الشخصي الجديد لشريحة eSIM،
ويستجيب باستخدام
RESULT_OK
. - إذا ألغى المستخدم تفعيل الملف الشخصي لشريحة eSIM من خلال "إعلانات المنتجات المحلية"، سيتم
ويستجيب باستخدام
RESULT_CANCELED
. - في حال استجابة "إعلانات الأنشطة التجارية" (LPA) بشيء آخر غير
RESULT_OK
أوRESULT_CANCELED
، يتعامل تطبيق مشغّل شبكة الجوّال مع هذا الإجراء على أنّه خطأ.
لأسباب تتعلق بالأمان، لا تقبل "إعلانات الأنشطة التجارية" (LPA) رمز التفعيل مباشرةً في الغرض المقدَّم لضمان عدم تمكّن المتصلين غير التابعين لـ "إعلانات Google" من الحصول على رمز التفعيل من تطبيق مشغّل شبكة الجوّال.
- إذا نجحت "إعلانات الأنشطة التجارية المحلية" في تنزيل الملف الشخصي الجديد لشريحة eSIM،
ويستجيب باستخدام
إمكانية استخدام شرائح eSIM متعددة
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 10 أو الإصدارات الأحدث، يجب تنفيذ ما يلي:
فئة واحدة (EuiccManager
) متوافقة مع الأجهزة
مع شرائح eSIM متعددة الأجهزة التي تستخدم شريحة eSIM واحدة والتي ستتم ترقيتها إلى
الإصدار 10 من نظام التشغيل Android
لا تتطلّب أي تعديل على تنفيذ "إعلانات المنتجات داخل المتجر" بصفتها المنصة
تربط المثيل EuiccManager
تلقائيًا بـ eUICC التلقائية. تشير رسالة الأشكال البيانية
يتم تحديد قيمة eUICC التلقائية من خلال النظام الأساسي للأجهزة التي تستخدم إصدار HAL للراديو
1.2 أو أعلى وبواسطة "إعلانات الأنشطة التجارية" (LPA) للأجهزة التي تعمل بإصدارات HAL للراديو أقل من
1.2.
المتطلبات
للتوافق مع شرائح eSIM متعددة، يجب أن يحتوي الجهاز على أكثر من eUICC واحدة، والتي يمكنها تكون إما eUICC مدمَجة أو فتحة لشريحة SIM، حيث يمكن إنشاء رموز eUICC قابلة للإزالة تم إدراجها.
يلزم توفُّر الإصدار 1.2 من تقنية HAL للراديو أو إصدار أحدث للتوافق مع شرائح eSIM متعددة. طبقة تجريد الأجهزة (HAL) للراديو يُنصح باستخدام الإصدار 1.4 والإصدار 1.2 من RadioConfig HAL.
التنفيذ
للتوافق مع عدة شرائح eSIM (بما في ذلك شرائح SIM القابلة للبرمجة أو شرائح SIM قابلة للإزالة) (بما في ذلك شرائح SIM القابلة للبرمجة)
يجب تنفيذ إعلانات الأنشطة التجارية المحلية
EuiccService
،
التي تتلقّى رقم تعريف الخانة المتوافق مع رقم تعريف البطاقة التي يقدّمها المتصل.
تشير رسالة الأشكال البيانية
non_removable_euicc_slots
المورد المحدَّد في
arrays.xml
هو مصفوفة من الأعداد الصحيحة التي تمثّل معرّفات الخانات المضمنة في الجهاز
eUICCs. يجب تحديد هذا المورد للسماح للمنصة بتحديد
ما إذا كانت eUICC التي تم إدراجها قابلة للإزالة أم لا.
تطبيق مشغّل شبكة الجوّال على جهاز يتضمن شرائح eSIM متعددة
عند إنشاء تطبيق مشغّل شبكة جوّال لجهاز مزوّد بشرائح eSIM متعددة، استخدِم
createForCardId
في EuiccManager
لإنشاء كائن EuiccManager
تم تثبيته
معرف البطاقة المحدد. رقم تعريف البطاقة هو قيمة عددية تُعرّف UICC بشكلٍ فريد
أو eUICC على الجهاز.
للحصول على رقم تعريف البطاقة لواجهة eUICC التلقائية للجهاز، استخدِم
getCardIdForDefaultEuicc
في TelephonyManager
. تُرجع هذه الطريقة
UNSUPPORTED_CARD_ID
إذا كان إصدار HAL للراديو أقل من 1.2 ويتم عرضه
UNINITIALIZED_CARD_ID
إذا لم يقرأ الجهاز eUICC.
يمكنك أيضًا الحصول على أرقام تعريف البطاقات من
getUiccCardsInfo
وgetUiccSlotsInfo
(واجهة برمجة تطبيقات النظام) في TelephonyManager
،
getCardId
في SubscriptionInfo
.
عند إنشاء مثيل لعنصر EuiccManager
باستخدام رقم تعريف بطاقة معيّن، ستكون كل
يتم توجيه العمليات إلى eUICC باستخدام رقم تعريف البطاقة هذا. إذا أصبحت eUICC
لا يمكن الوصول إليه (مثلاً، عندما تكون متوقّفة أو تمت إزالتها) EuiccManager
لا
أطول.
يمكنك استخدام نماذج الرموز التالية لإنشاء تطبيق مشغّل شبكة جوّال.
المثال 1: الحصول على اشتراك نشط وإنشاء مثيل EuiccManager
// Get the active subscription and instantiate an EuiccManager for the eUICC which holds
// that subscription
SubscriptionManager subMan = (SubscriptionManager)
mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
int cardId = subMan.getActiveSubscriptionInfo().getCardId();
EuiccManager euiccMan = (EuiccManager) mContext.getSystemService(Context.EUICC_SERVICE)
.createForCardId(cardId);
المثال 2: التكرار عبر UICCs وإنشاء مثيل EuiccManager
eUICC قابلة للإزالة
// On a device with a built-in eUICC and a removable eUICC, iterate through the UICC cards
// to instantiate an EuiccManager associated with a removable eUICC
TelephonyManager telMan = (TelephonyManager)
mContext.getSystemService(Context.TELEPHONY_SERVICE);
List<UiccCardInfo> infos = telMan.getUiccCardsInfo();
int removableCardId = -1; // valid cardIds are 0 or greater
for (UiccCardInfo info : infos) {
if (info.isRemovable()) {
removableCardId = info.getCardId();
break;
}
}
if (removableCardId != -1) {
EuiccManager euiccMan = (EuiccManager) mContext.getSystemService(Context.EUICC_SERVICE)
.createForCardId(removableCardId);
}
التحقُّق
لا يأتي AOSP مع تنفيذ إعلانات LPA ولا يُتوقع منك توفّر إعلانات قابلة للتنزيل على جميع إصدارات Android (لا يتوافق كل الهاتف مع شريحة eSIM). بالنسبة لهذا السبب، لا توجد حالات اختبار CTS الشاملة. ومع ذلك، فإن حالات الاختبار الأساسية تتوفّر في AOSP لضمان ظهور واجهات برمجة تطبيقات eUICC المعروضة صالحة في إصدارات Android.
يجب التأكّد من أنّ الإصدارات تجتاز حالات اختبار CTS التالية (للجميع واجهات برمجة التطبيقات: /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts.
على مشغّلي شبكات الجوّال الذين يطبّقون أحد تطبيقات مشغّل شبكة الجوّال أن يجتازوا إجراءاتهم الداخلية المعتادة. ضمان الجودة لضمان عمل جميع الميزات التي تم تنفيذها كما هو متوقع. في جلسة المعمل، على الأقل، يجب أن يتمكّن تطبيق مشغّل شبكة الجوّال من إدراج جميع الملفات الشخصية للاشتراك. الذي يمتلكه عامل التشغيل نفسه، تنزيل ملف شخصي وتثبيته، تفعيل خدمة في الملف الشخصي، والتبديل بين الملفات الشخصية وحذف الملفات الشخصية.
إذا كنت تصمم إعلانات LPA الخاصة بك، عليك تطبيق نهج أكثر صرامة اختبار الفرضية. يجب التواصل مع مورّد المودم أو شريحة eUICC أو مورّد نظام التشغيل eSIM. وبإمكان مورّدي خدمة SM-DP+ ومشغّلي شبكات الجوّال حلّ المشاكل وضمان التشغيل البيني إعلانات LPA ضمن بنية RSP واعلم أن قدرًا كبيرًا من الاختبار اليدوي أمرًا لا مفر منه. وللحصول على أفضل تغطية للاختبار، عليك اتّباع خطة اختبار GSMA SGP.23 RSP.