چندین پروفایل فعال

برای دستگاه‌های دارای Android 13 یا بالاتر، Android از چندین نمایه فعال (MEP) برای eUICC پشتیبانی می‌کند. این ویژگی به دستگاه‌ها امکان می‌دهد با استفاده از یک تراشه eSIM، که می‌تواند چندین پروفایل سیم‌کارت داشته باشد و همزمان به دو اپراتور مختلف متصل شود، از دو سیم‌کارت پشتیبانی کنند. سازندگان دستگاه باید با فروشندگان SoC و فروشندگان چیپست eSIM کار کنند تا این ویژگی را در دستگاه های خود یکپارچه کنند.

پس زمینه

در دستگاه‌هایی که Android 12 و پایین‌تر دارند، AOSP پشتیبانی محدودی را ارائه می‌کند و به یک eSIM اجازه می‌دهد تا چندین نمایه را همزمان پشتیبانی کند. علیرغم صرفه جویی قابل توجهی در فضا و هزینه که eSIM ارائه می دهد، این عدم پشتیبانی از دو سیم کارت مانع از استفاده سازندگان دستگاه از دستگاه های فقط eSIM می شود. برای ارائه پشتیبانی از دو سیم کارت در یک دستگاه فقط eSIM، سازندگان دستگاه باید دو عنصر eSIM را در دستگاه قرار دهند، که هزینه‌های صورتحساب مواد (BOM) را افزایش می‌دهد و منجر به تجربه ضعیف کاربر برای مدیریت اشتراک می‌شود. ویژگی MEP موجود در AOSP از اندروید 13 این مشکل را برطرف می کند.

معماری eUICC

این بخش معماری تراشه eSIM را برای دستگاه‌های دارای MEP برای نسخه‌های مختلف Android و معماری تراشه eSIM برای دستگاه‌های بدون MEP توضیح می‌دهد.

اندروید 14

برای دستگاه‌های دارای Android 14 یا بالاتر، Android از گزینه‌های MEP-A1 و MEP-B برای انتخاب ریشه دامنه امنیتی صادرکننده (ISD-R) و انتخاب پورت‌های eSIM همانطور که در GSMA SGP V22 3.0 مشخص شده است، پشتیبانی می‌کند. در ادامه مدل های انتخابی MEP-A1 و MEP-B ISD-R توضیح داده شده است.

  • MEP-A1: ISD-R در پورت 0 انتخاب می شود (پورت فرمان 0 است) و پروفایل ها در درگاه های eSIM 1 و بالاتر انتخاب می شوند. دستورات ES10 همیشه به پورت 0 ارسال می شوند و پورت فرمان و پورت هدف همیشه متفاوت هستند. LPA پورت را انتخاب می کند.

    مدل انتخابی MEP-A1 ISD-R

    شکل 1. مدل انتخابی MEP-A1 ISD-R

  • MEP-B: ISD-R روی هر پورتی انتخاب می شود و به هر پورتی می توان یک پروفایل اختصاص داد. دستورات فعال و غیرفعال به درگاهی ارسال می‌شوند که نمایه باید فعال یا غیرفعال شود (جایی که بازخوانی در انتظار است). پورت فرمان و پورت هدف همیشه یکسان است.

    مدل انتخابی MEP-B ISD-R

    شکل 2. مدل انتخابی MEP-B ISD-R

اندروید 13

در Android نسخه 13 یا بالاتر، در دستگاه‌هایی که از MEP پشتیبانی می‌کنند، اسلات eSIM حاوی چندین درگاه eUICC است که در آن پورت می‌تواند نمایه‌ای فعال داشته باشد. همانطور که در شکل 3 نشان داده شده است، با این معماری، یک eUICC منفرد (یک شکاف فیزیکی) با داشتن پیوند هر پورت eUICC به یک باند پایه مودم از دو سیم کارت آماده به کار دوگانه (DSDS) پشتیبانی می کند. Android 13 HAL و APIها از نوع MEP مستقل هستند.

معماری تراشه eSIM با پشتیبانی MEP

شکل 3. معماری تراشه eSIM با پشتیبانی MEP (اندروید 13 یا بالاتر)

اندروید 12 و پایین تر

برای دستگاه‌هایی که دارای Android 12 یا پایین‌تر بدون MEP هستند، همانطور که در شکل 4 نشان داده شده است، اسلات eSIM تنها از یک نمایه فعال در یک زمان پشتیبانی می‌کند و دستگاه نمی‌تواند از DSDS پشتیبانی کند.

معماری تراشه eSIM بدون پشتیبانی MEP

شکل 4. معماری تراشه eSIM بدون پشتیبانی MEP (اندروید 12 یا پایین تر)

جریان اطلاعات API برای چندین نمایه فعال

شکل 5 جریان اطلاعات را برای MEP برای eUICC در اندروید 13 توصیف می کند. چارچوب تلفنی شامل کلاس UiccPort است که ساختار فیزیکی را در eUICC نشان می دهد. کلاس UiccPort برای انواع سیم کارت ها استفاده می شود: سیم کارت فیزیکی (pSIM)، سیم کارت یکپارچه (iSIM) و سیم کارت جاسازی شده (eSIM). برای یک eUICC با چندین پورت، یک شی UiccSlot و شی UiccCard به چندین نمونه UiccPort نگاشت. هر نمونه UiccPort می تواند حداکثر به یک نمونه UiccProfile پیوند دهد. این جریان به UiccPort اجازه می دهد تا به یک اسلات منطقی و UiccSlot (شکاف فیزیکی) به چندین اسلات منطقی نقشه برداری کند.

جریان اطلاعات MEP

شکل 5. جریان اطلاعات برای eUICC با پشتیبانی MEP

پیاده سازی

این بخش نحوه پیاده‌سازی ویژگی MEP از جمله جزئیات مورد نیاز HAL، APIها و رابط کاربری را شرح می‌دهد. سازندگان دستگاه باید با فروشندگان SoC و فروشندگان چیپست eSIM برای پشتیبانی از MEP کار کنند.

الزامات HAL

برای پشتیبانی از MEP برای eUICC، APIهای IRadio AIDL HAL زیر را که در /platform/hardware/interfaces/radio/aidl/aidl_api قرار دارند، پیاده‌سازی کنید.

دستگاه‌هایی که Android نسخه 14 یا بالاتر دارند باید از نسخه IRadio 2.1 رابط‌های HAL استفاده کنند که از MultipleEnabledProfileMode (مدل انتخاب ISD-R که توسط مودم یا eUICC پشتیبانی می‌شود) استفاده می‌کنند و اطلاعات فرمان ES10 APDU را در طول عملیات کانال منطقی ICC ارسال می‌کنند.

وضعیت کارت

مودم باید از CardStatus API به عنوان پاسخی به متد getIccCardStatusResponse پشتیبانی کند. پاسخ باید شامل شاخص پورت و نمایه شکاف فیزیکی مشخص شده توسط SimPortSlotMapping باشد.

برای دستگاه‌هایی که Android نسخه ۱۴ یا بالاتر دارند، مودم باید حالت MEP پشتیبانی‌شده را با همه رویدادهای CardStatus عبور دهد.

SimSlotStatus

مودم باید از SimSlotStatus API به عنوان پاسخی به متد getSimSlotsStatus پشتیبانی کند. وضعیت اسلات سیم کارت شامل آرایه‌ای از رابط SimPortInfo است که شامل نمایه پورت، ICCID برای نمایه فعال و وضعیت پورت است. مودم باید حداقل دو شیء SimPortInfo را برگرداند.

برای دستگاه‌هایی که Android نسخه ۱۴ یا بالاتر دارند، مودم باید حالت MEP پشتیبانی‌شده را با همه رویدادهای CardStatus عبور دهد.

setSimSlotMapping

متد setSimSlotMapping باید آرایه ای از SimPortSlotMapping را ارسال کند. شاخص آرایه شکاف منطقی است و SimPortSlotMapping پورت نقشه‌برداری شده و شاخص شکاف فیزیکی مربوطه را مشخص می‌کند. متد setSimSlotMapping نقشه برداری را از پورت ها به اسلات های منطقی تنظیم می کند. برنامه LPA از این روش برای انتخاب پورت فعال استفاده می کند.

API هایی که از MEP برای eUICC پشتیبانی می کنند

دستگاه‌های Android که از چندین نمایه فعال به عنوان بخشی از پشته تلفنی AOSP پشتیبانی می‌کنند، باید از APIهای زیر پشتیبانی کنند.

UiccCardInfo

  • (Android 13 و بالاتر) isMultipleEnabledProfilesSupported : نشان می دهد که آیا این UICC از MEP پشتیبانی می کند یا خیر.
  • (اندروید 13 و بالاتر) getPorts : لیست تمام پورت های ممکن را برای یک UICC خاص برمی گرداند. اگر UICC یک pSIM یا eSIM است که از MEP پشتیبانی نمی‌کند، فهرستی از یک عنصر را برمی‌گرداند.
  • (منسوخ شده) getIccId : یک ICCID را برمی گرداند. از آنجایی که یک UICC می تواند بیش از یک ICCID برای دستگاه های دارای MEP داشته باشد، به جای آن از UiccPortInfo.getIccId() استفاده کنید.

(اندروید 13 و بالاتر) UiccPortInfo

  • getIccId : در صورت وجود اشتراک فعال در این پورت، ICCID را برمی‌گرداند.
  • getPortIndex : فهرست پورت را برمی‌گرداند.
  • getLogicalSlotIndex : نمایه پشته مودم منطقی فعال را برمی‌گرداند.

اطلاعات اشتراک

  • (اندروید 13 و بالاتر) getPortIndex : فهرست پورتی را که اشتراک در آن فعال است را برمی گرداند. اگر اشتراک غیرفعال باشد، INVALID_PORT_ID -1 برمی‌گرداند.

EuiccManager

  • switchToSubscription : به یک اشتراک معین تغییر می کند. توسط برنامه‌هایی استفاده می‌شود که در اشتراک‌های فعال دارای امتیاز شرکت مخابراتی نیستند. هنگام فراخوانی، پلتفرم به صورت داخلی فهرست پورت را از طریق یک گفتگوی انتخاب سه گزینه ای حل می کند تا در صورت وجود پورت های موجود، اشتراک فعال انتخاب شده را غیرفعال کند. برنامه‌هایی که Android 13 و بالاتر را هدف قرار می‌دهند، نباید از این API برای غیرفعال کردن اشتراک با ارسال شناسه اشتراک نامعتبر استفاده کنند. در عوض آنها باید از روش switchToSubscription (افزوده شده در Android 13) با شاخص پورت مشخص شده استفاده کنند.
  • (اندروید 13 و بالاتر) switchToSubscription(int subscriptionId, int portIndex, PendingIntent callback) : به اشتراک معین تغییر می کند. تماس با برنامه‌های دارای امتیاز شرکت مخابراتی نسبت به اشتراک‌های فعال می‌تواند مشخص کند که اشتراک در کدام پورت فعال شود.
  • (اندروید 13 و بالاتر) isSimPortAvailable : نشان می دهد که آیا نمایه پورت عبور در دسترس است یا خیر. یک پورت در صورتی در دسترس است که هیچ اشتراکی در آن فعال نباشد یا برنامه تماس گیرنده دارای امتیاز شرکت مخابراتی نسبت به اشتراک نصب شده در درگاه انتخابی باشد.

EuiccService

  • (اندروید 13 و بالاتر) onSwitchToSubscriptionWithPort : به یک اشتراک معین در یک پورت مشخص می‌رود. پیاده سازی LPA باید این را در اندروید 13 و بالاتر پشتیبانی کند.

مدیر تلفن

  • (اندروید 13 و بالاتر) getSimApplicationState : ثابتی را نشان می دهد که وضعیت برنامه کارت را نشان می دهد. این API هر دو شاخص شکاف فیزیکی و شاخص پورت را ارسال می کند. متد getSimApplicationState(int physicalSlotIndex) (منسوخ شده) فقط شاخص شکاف فیزیکی را برای دریافت یک شی simApplicationState پاس می کند.
  • (اندروید 13 و بالاتر) setSimSlotMapping(Collection<UiccSlotMapping> slots) : اسلات های منطقی را به اسلات ها و پورت های فیزیکی نگاشت می کند.
  • (اندروید 13 و بالاتر) Collection<UiccSlotMapping> getSimSlotMapping : نقشه برداری را از اسلات های منطقی به اسلات های فیزیکی سیم کارت و نمایه های پورت دریافت می کند.

رابط کاربری

برای رفع ابهام در انتخاب پورت eSIM، در دستگاه‌هایی که از MEP پشتیبانی می‌کنند، کاربران باید بتوانند یکی از اشتراک‌های فعال را غیرفعال کنند تا اشتراک جدید فعال شود. در Android 13، AOSP شامل یک جریان کاربر با یک گفتگوی سه گزینه‌ای است که می‌تواند برای اشتراک، جریان‌های کاربر را از برنامه تنظیمات فعال کند. شکل 6 نمونه ای از این جریان UX را نشان می دهد.

جریان کاربر برای اشتراک MEP SIM

شکل 6. جریان کاربر برای فعال کردن اشتراک سیم کارت

پرچم های ویژه

برای پشتیبانی از MEP، دستگاه‌ها باید پرچم‌های ویژگی زیر را اعلام کنند:

پیاده سازی LPA

برای حمایت از MEP، مطمئن شوید که اجرای LPA شما شرایط زیر را برآورده می‌کند:

  • API های EuiccService را برای پشتیبانی از چندین پورت پیاده سازی می کند.
  • از API ها برای انتخاب پورت و فعال کردن نمایه استفاده می کند.
  • UX را ارائه می دهد که به برنامه های حامل اجازه می دهد تا نمایه ها را در پورت های انتخاب شده فعال کنند.

اعتبار سنجی

برای آزمایش اجرای ویژگی MEP، مطمئن شوید که ساخت‌ها موارد آزمایش CTS زیر را (برای APIهای عمومی) گذرانده‌اند: /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts .

سازندگان دستگاه همچنین باید با مودم، تراشه eUICC و فروشندگان سیستم عامل eSIM خود کار کنند تا مطمئن شوند که دستگاه می‌تواند کارهای زیر را انجام دهد:

  • دو نمایه eSIM را می توان فعال و به دو شبکه مختلف متصل کرد.
  • پروفایل های eSIM را می توان در هر پورت eSIM فعال و غیرفعال کرد.
  • یک جریان UX وجود دارد که توسط برنامه حامل ایجاد می شود که به کاربران اجازه می دهد پروفایل ها را تغییر دهند.

توصیه برای اپراتورها

برای اطمینان از اینکه کاربران هنگام انتقال نمایه‌های eSIM از یک درگاه به پورت دیگر، سرویس خود را از دست نمی‌دهند، توصیه می‌کنیم که شرکت‌های مخابراتی موارد زیر را پشتیبانی کنند:

  • نقشه سیال IMEI و SIM
  • چندین ICCID یا سیم کارت برای هر شناسه eUICC (EID)