एम्बेडेड सिम (ई-सिम या eUICC) टेक्नोलॉजी की मदद से, मोबाइल इस्तेमाल करने वाले लोग, मोबाइल और इंटरनेट सेवा देने वाली कंपनी की प्रोफ़ाइल डाउनलोड कर सकते हैं. साथ ही, बिना किसी सिम कार्ड के, मोबाइल और इंटरनेट सेवा देने वाली कंपनी की सेवा चालू कर सकते हैं. यह GSMA की ओर से तैयार की गई एक ग्लोबल स्पेसिफ़िकेशन है. इसकी मदद से, किसी भी मोबाइल डिवाइस के लिए रिमोट सिम प्रोवाइज़निंग (आरएसपी) की सुविधा चालू की जा सकती है. Android 9 से, Android फ़्रेमवर्क में eSIM को ऐक्सेस करने और उस पर सदस्यता प्रोफ़ाइलों को मैनेज करने के लिए, स्टैंडर्ड एपीआई उपलब्ध कराए गए हैं. ये eUICC API, तीसरे पक्ष को eSIM की सुविधा वाले Android डिवाइसों पर, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन और लोकल प्रोफ़ाइल असिस्टेंट (एलपीए) बनाने की सुविधा देते हैं.
एलपीए एक स्टैंडअलोन, सिस्टम ऐप्लिकेशन है. इसे Android के बने हुए वर्शन की इमेज में शामिल किया जाना चाहिए. आम तौर पर, ई-सिम पर प्रोफ़ाइलों को एलपीए मैनेज करता है. ऐसा इसलिए, क्योंकि यह SM-DP+ (डिवाइसों के लिए प्रोफ़ाइल पैकेज तैयार करने, सेव करने, और डिलीवर करने वाली रिमोट सेवा) और eUICC चिप के बीच ब्रिज के तौर पर काम करता है. एलपीए APK में, एलपीए यूआई या एलयूआई नाम का यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट शामिल किया जा सकता है. इससे, असली उपयोगकर्ता को एम्बेड की गई सभी सदस्यता प्रोफ़ाइलों को मैनेज करने के लिए एक ही जगह मिलती है. Android फ़्रेमवर्क, सबसे अच्छे उपलब्ध एलपीए को अपने-आप ढूंढता है और उससे कनेक्ट होता है. साथ ही, सभी eUICC ऑपरेशन को एलपीए इंस्टेंस के ज़रिए रूट करता है.
पहली इमेज. आसान आरएसपी आर्किटेक्चर
कैरियर ऐप्लिकेशन बनाने में दिलचस्पी रखने वाले मोबाइल नेटवर्क ऑपरेटर को EuiccManager
में मौजूद एपीआई देखना चाहिए. ये एपीआई, downloadSubscription()
, switchToSubscription()
, और deleteSubscription()
जैसे प्रोफ़ाइल मैनेजमेंट के बेहतर तरीके उपलब्ध कराते हैं.
अगर आप डिवाइस बनाने वाली ऐसी OEM कंपनी हैं जिसे अपना एलपीए सिस्टम ऐप्लिकेशन बनाना है, तो आपको Android फ़्रेमवर्क को अपनी एलपीए सेवाओं से कनेक्ट करने के लिए, EuiccService
को एक्सटेंड़ करना होगा. इसके अलावा, आपको EuiccCardManager
में एपीआई का इस्तेमाल करना चाहिए. ये एपीआई, GSMA RSP v2.0 के आधार पर ES10x फ़ंक्शन उपलब्ध कराते हैं.
इन फ़ंक्शन का इस्तेमाल, eUICC चिप को निर्देश देने के लिए किया जाता है. जैसे,
prepareDownload()
, loadBoundProfilePackage()
, retrieveNotificationList()
, और resetMemory()
.
EuiccManager
में मौजूद एपीआई के काम करने के लिए, एलपीए ऐप्लिकेशन को सही तरीके से लागू करना ज़रूरी है. साथ ही, EuiccCardManager
एपीआई को कॉल करने वाला व्यक्ति, एलपीए होना चाहिए. यह Android फ़्रेमवर्क से लागू होता है.
Android 10 या इसके बाद के वर्शन पर चलने वाले डिवाइसों में, एक से ज़्यादा ई-सिम का इस्तेमाल किया जा सकता है. ज़्यादा जानकारी के लिए, एक से ज़्यादा ई-सिम का इस्तेमाल करना लेख पढ़ें.
मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन बनाना
Android 9 में मौजूद eUICC API की मदद से, मोबाइल नेटवर्क ऑपरेटर, सीधे अपनी प्रोफ़ाइलों को मैनेज करने के लिए, कैरियर के ब्रैंड वाले ऐप्लिकेशन बना सकते हैं. इसमें, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के मालिकाना हक वाली सदस्यता प्रोफ़ाइलों को डाउनलोड और मिटाना शामिल है. साथ ही, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के मालिकाना हक वाली प्रोफ़ाइल पर स्विच करना भी शामिल है.
EuiccManager
EuiccManager
, ऐप्लिकेशन के लिए एलपीए के साथ इंटरैक्ट करने का मुख्य एंट्री पॉइंट है. इसमें मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐसे ऐप्लिकेशन शामिल हैं जो सदस्यताओं को डाउनलोड करते हैं, मिटाते हैं, और उन पर स्विच करते हैं जिनका मालिकाना हक मोबाइल और इंटरनेट सेवा देने वाली कंपनी के पास होता है. इसमें LUI सिस्टम ऐप्लिकेशन भी शामिल है. यह ऐप्लिकेशन, एम्बेड की गई सभी सदस्यताओं को मैनेज करने के लिए एक मुख्य जगह/यूज़र इंटरफ़ेस (यूआई) उपलब्ध कराता है. यह ऐप्लिकेशन, EuiccService
उपलब्ध कराने वाले ऐप्लिकेशन से अलग हो सकता है.
सार्वजनिक एपीआई का इस्तेमाल करने के लिए, कैरियर ऐप्लिकेशन को सबसे पहले Context#getSystemService
के ज़रिए EuiccManager
का इंस्टेंस पाना होगा:
EuiccManager mgr = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
ई-सिम से जुड़ा कोई भी काम करने से पहले, यह देख लें कि आपके डिवाइस पर ई-सिम काम करता है या नहीं. आम तौर पर, 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_
स्पेस में नतीजे के कोड के साथ भेजा जाता है. यह फ़्रेमवर्क के हिसाब से तय किए गए गड़बड़ी के कोड के साथ-साथ, एलपीए से 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 एपीआई देखें.
ऐसी गड़बड़ियां जिन्हें ठीक किया जा सकता है
कुछ मामलों में, सिस्टम ई-सिम का इस्तेमाल करने की प्रोसेस पूरी नहीं कर पाता. हालांकि, उपयोगकर्ता इस गड़बड़ी को ठीक कर सकता है. उदाहरण के लिए, अगर प्रोफ़ाइल के मेटाडेटा से पता चलता है कि कैरियर की पुष्टि करने वाला कोड ज़रूरी है, तो हो सकता है कि downloadSubscription
काम न करे. इसके अलावा, अगर कैरियर ऐप्लिकेशन के पास डेस्टिनेशन प्रोफ़ाइल के लिए कैरियर के विशेषाधिकार हैं (यानी, कैरियर के पास प्रोफ़ाइल का मालिकाना हक है), लेकिन फ़िलहाल चालू की गई प्रोफ़ाइल के लिए कैरियर के विशेषाधिकार नहीं हैं, तो हो सकता है कि switchToSubscription
काम न करे. इसलिए, उपयोगकर्ता की सहमति ज़रूरी है.
ऐसे मामलों में, कॉल करने वाले के कॉलबैक को EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR
के साथ कॉल किया जाता है. कॉलबैक Intent
में इंटरनल एक्सट्रा शामिल होते हैं, ताकि कॉलर इसे EuiccManager#startResolutionActivity
को पास कर सके. इसके बाद, एलयूआई के ज़रिए समस्या हल करने का अनुरोध किया जा सकता है. उदाहरण के लिए, पुष्टि करने के लिए फिर से कोड का इस्तेमाल करने पर, EuiccManager#startResolutionActivity
एक एलयूआई स्क्रीन को ट्रिगर करता है. इस स्क्रीन पर, उपयोगकर्ता को पुष्टि करने के लिए कोड डालने की सुविधा मिलती है. कोड डालने के बाद, डाउनलोड की प्रोसेस फिर से शुरू हो जाती है. इस तरीके से, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को यह कंट्रोल करने की सुविधा मिलती है कि यूज़र इंटरफ़ेस (यूआई) कब दिखाया जाए. हालांकि, इससे एलपीए/एलयूआई को, उपयोगकर्ताओं की ओर से ठीक की जा सकने वाली समस्याओं को मैनेज करने का एक नया तरीका मिलता है. इसकी मदद से, आने वाले समय में क्लाइंट ऐप्लिकेशन में बदलाव किए बिना, इन समस्याओं को मैनेज किया जा सकता है.
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 में, अलग-अलग कैरियर की सदस्यता प्रोफ़ाइलें एक साथ मौजूद हो सकती हैं. साथ ही, हर कैरियर ऐप्लिकेशन को सिर्फ़ उस कैरियर की प्रोफ़ाइलों को ऐक्सेस करने की अनुमति होनी चाहिए. उदाहरण के लिए, कैरियर A को ऐसी प्रोफ़ाइल को डाउनलोड करने, चालू या बंद करने की अनुमति नहीं होनी चाहिए जिसका मालिकाना हक कैरियर B के पास हो.
यह पक्का करने के लिए कि किसी प्रोफ़ाइल को सिर्फ़ उसका मालिक ऐक्सेस कर सके, Android एक खास तरीके का इस्तेमाल करता है. इससे, प्रोफ़ाइल के मालिक के ऐप्लिकेशन (यानी, मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन) को खास सुविधाएं मिलती हैं. Android प्लैटफ़ॉर्म, प्रोफ़ाइल की ऐक्सेस नियम फ़ाइल (ARF) में सेव किए गए सर्टिफ़िकेट लोड करता है. साथ ही, इन सर्टिफ़िकेट से साइन किए गए ऐप्लिकेशन को EuiccManager
एपीआई को कॉल करने की अनुमति देता है. इस प्रोसेस के बारे में यहां बताया गया है:
- ऑपरेटर, कैरियर ऐप्लिकेशन के APK पर हस्ताक्षर करता है. इसके बाद, apksigner टूल, APK में सार्वजनिक-कुंजी सर्टिफ़िकेट अटैच करता है.
ऑपरेटर/SM-DP+, एक प्रोफ़ाइल और उसका मेटाडेटा तैयार करता है. इसमें एक ARF शामिल होता है, जिसमें ये चीज़ें होती हैं:
- कैरियर ऐप्लिकेशन के सार्वजनिक पासकोड सर्टिफ़िकेट का हस्ताक्षर (SHA-1 या SHA-256) (ज़रूरी है)
- कैरियर ऐप्लिकेशन का पैकेज नाम (इसका सुझाव ज़रूर दिया जाता है)
कैरियर ऐप्लिकेशन,
EuiccManager
एपीआई की मदद से eUICC ऑपरेशन करने की कोशिश करता है.Android प्लैटफ़ॉर्म, कॉल करने वाले ऐप्लिकेशन के सर्टिफ़िकेट के SHA-1 या SHA-256 हैश की पुष्टि करता है. यह पुष्टि की जाती है कि यह हैश, टारगेट प्रोफ़ाइल के ARF से मिले सर्टिफ़िकेट के हस्ताक्षर से मेल खाता है या नहीं. अगर एआरएफ़ में कैरियर ऐप्लिकेशन का पैकेज नाम शामिल है, तो यह कॉलर ऐप्लिकेशन के पैकेज नाम से भी मेल खाना चाहिए.
हस्ताक्षर और पैकेज के नाम (अगर शामिल किया गया है) की पुष्टि हो जाने के बाद, टारगेट प्रोफ़ाइल पर कॉल करने वाले ऐप्लिकेशन को कैरियर की सुविधाएं दी जाती हैं.
प्रोफ़ाइल का मेटाडेटा, प्रोफ़ाइल के बाहर भी उपलब्ध हो सकता है. ऐसा इसलिए है, ताकि प्रोफ़ाइल डाउनलोड होने से पहले, एलपीए SM-DP+ से प्रोफ़ाइल का मेटाडेटा हासिल कर सके. इसके अलावा, प्रोफ़ाइल बंद होने पर, आईएसडी-आर से भी मेटाडेटा हासिल किया जा सकता है. इसलिए, इसमें वही नियम होने चाहिए जो प्रोफ़ाइल में मौजूद हैं.
eUICC OS और SM-DP+, प्रोफ़ाइल के मेटाडेटा में मालिकाना टैग BF76
के साथ काम करने चाहिए. टैग का कॉन्टेंट, कैरियर की उन विशेषताओं के नियमों जैसा होना चाहिए जो यूआईसीसी कैरियर की विशेषताएं में बताए गए ऐक्सेस नियम वाले ऐप्लेट (एआरए) से मिलते-जुलते हों:
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
}
}
ऐप्लिकेशन साइन करने के बारे में ज़्यादा जानने के लिए, अपने ऐप्लिकेशन को साइन करें देखें. मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लिए उपलब्ध खास सुविधाओं के बारे में जानने के लिए, यूआईसीसी के लिए मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लिए उपलब्ध खास सुविधाएं देखें.
लोकल प्रोफ़ाइल असिस्टेंट ऐप्लिकेशन बनाना
डिवाइस बनाने वाली कंपनियां, अपनी लोकल प्रोफ़ाइल असिस्टेंट (एलपीए) को लागू कर सकती हैं. इसे Android Euicc APIs से जोड़ना ज़रूरी है. नीचे दिए गए सेक्शन में, एलपीए ऐप्लिकेशन बनाने और उसे Android सिस्टम के साथ इंटिग्रेट करने के बारे में खास जानकारी दी गई है.
हार्डवेयर/मोडेम से जुड़ी ज़रूरी शर्तें
eUICC चिप पर मौजूद एलपीए और ई-सिम ओएस, कम से कम GSMA आरएसपी (रिमोट सिम प्रोविज़निंग) v2.0 या v2.2 के साथ काम करना चाहिए. आपको ऐसे SM-DP+ और SM-DS सर्वर का भी इस्तेमाल करना चाहिए जिनका आरएसपी वर्शन मेल खाता हो. आरएसपी आर्किटेक्चर के बारे में ज़्यादा जानकारी के लिए, GSMA SGP.21 आरएसपी आर्किटेक्चर स्पेसिफ़िकेशन देखें.
इसके अलावा, Android 9 में eUICC API के साथ इंटिग्रेट करने के लिए, डिवाइस के मॉडेम को eUICC की सुविधाओं को कोड में बदलकर (लोकल प्रोफ़ाइल मैनेजमेंट और प्रोफ़ाइल डाउनलोड) भेजना चाहिए. इसके लिए, इन तरीकों को भी लागू करना ज़रूरी है:
- IRadio HAL v1.1:
setSimPower
IRadio HAL v1.2:
getIccCardStatus
IRadioConfig HAL v1.0:
getSimSlotsStatus
IRadioConfig AIDL v1.0:
getAllowedCarriers
Google एलपीए को मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लॉक का स्टेटस पता होना चाहिए, ताकि वह सिर्फ़ अनुमति वाली मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लिए ई-सिम डाउनलोड करने या ट्रांसफ़र करने की अनुमति दे सके. ऐसा न करने पर, हो सकता है कि उपयोगकर्ता किसी सिम को डाउनलोड और ट्रांसफ़र कर दें. इसके बाद, उन्हें पता चलता है कि डिवाइस किसी दूसरी मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लिए लॉक है.
वेंडर या OEM को IRadioSim.getAllowedCarriers()HAL API लागू करना होगा.
वेंडर आरआईएल / मॉडम, IRadioSimResponse.getAllowedCarriersResponse()HAL API के हिस्से के तौर पर, उस मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लॉक स्टेटस और कैरियर आईडी को पॉप्युलेट करेगा जिस पर डिवाइस लॉक है.
डिफ़ॉल्ट बूट प्रोफ़ाइल चालू होने पर, मॉडेम को मान्य सिम के तौर पर ई-सिम की पहचान करनी चाहिए और सिम की पावर चालू रखनी चाहिए.
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 में लागू किए जा सकते हैं: एलपीए बैकएंड और एलपीए यूज़र इंटरफ़ेस (यूआई) या एलयूआई.
एलपीए बैकएंड लागू करने के लिए, आपको 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
कार्रवाई के लिए, सेवा के बारे में पता चलता है.
सबसे ज़्यादा प्राथमिकता वाली सेवा चुनी जाती है. अगर कोई सेवा नहीं मिलती है, तो एलपीए के लिए सहायता बंद हो जाती है.
एलयूआई लागू करने के लिए, आपको इन कार्रवाइयों के लिए कोई गतिविधि देनी होगी:
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>
इसका मतलब है कि इन स्क्रीन को लागू करने वाला यूज़र इंटरफ़ेस (यूआई), EuiccService
को लागू करने वाले यूआई से अलग APK से आ सकता है.
डिज़ाइन के हिसाब से यह तय किया जा सकता है कि एक APK हो या एक से ज़्यादा APK. उदाहरण के लिए, एक ऐसा APK जो EuiccService
लागू करता हो और एक ऐसा APK जो LUI ऐक्टिविटी उपलब्ध कराता हो.
EuiccCardManager
EuiccCardManager
, eSIM चिप के साथ इंटरैक्ट करने के लिए इंटरफ़ेस है. यह एएसएन.1 पार्सिंग के साथ-साथ, कम-लेवल एपीडीयू अनुरोध/जवाब वाले निर्देशों को मैनेज करता है. साथ ही, यह जीएसएमए आरएसपी स्पेसिफ़िकेशन में बताए गए ES10 फ़ंक्शन भी उपलब्ध कराता है.
EuiccCardManager
एक सिस्टम एपीआई है और इसे सिर्फ़ सिस्टम के ऐक्सेस वाले ऐप्लिकेशन कॉल कर सकते हैं.
दूसरी इमेज. कैरियर ऐप्लिकेशन और एलपीए, दोनों Euicc API का इस्तेमाल करते हैं
EuiccCardManager
के ज़रिए प्रोफ़ाइल ऑपरेशन एपीआई का इस्तेमाल करने के लिए, कॉल करने वाले व्यक्ति के पास एलपीए होना ज़रूरी है. यह Android फ़्रेमवर्क से लागू होता है. इसका मतलब है कि कॉलर को EuiccService
को एक्सटेंड़ करना होगा और उसे आपकी मेनिफ़ेस्ट फ़ाइल में बताना होगा, जैसा कि पिछले सेक्शन में बताया गया है.
EuiccManager
की तरह ही, EuiccCardManager
एपीआई का इस्तेमाल करने के लिए, आपके एलपीए को पहले Context#getSystemService
के ज़रिए EuiccCardManager
का इंस्टेंस पाना होगा:
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
(जो फ़ोन प्रोसेस में चलता है) से बंधा होता है. साथ ही, हर EuiccCardManager
तरीके को फ़ोन प्रोसेस से, एक अलग और खास एआईडीएल इंटरफ़ेस के ज़रिए कॉलबैक मिलता है. EuiccCardManager
एपीआई का इस्तेमाल करते समय, कॉलर (एलपीए) को ऐसा
Executor
ऑब्जेक्ट देना होगा जिससे कॉलबैक को शुरू किया जा सके. यह Executor
ऑब्जेक्ट, एक थ्रेड या अपनी पसंद के थ्रेड पूल पर चल सकता है.
ज़्यादातर EuiccCardManager
एपीआई का इस्तेमाल करने का पैटर्न एक जैसा होता है. उदाहरण के लिए, eUICC पर बाउंड प्रोफ़ाइल पैकेज लोड करने के लिए:
...
cardMgr.loadBoundProfilePackage(eid, boundProfilePackage,
AsyncTask.THREAD_POOL_EXECUTOR, callback);
किसी दिए गए आईसीसीआईडी वाली किसी दूसरी प्रोफ़ाइल पर स्विच करने के लिए:
...
cardMgr.switchToProfile(eid, iccid, true /* refresh */,
AsyncTask.THREAD_POOL_EXECUTOR, callback);
eUICC चिप से डिफ़ॉल्ट SM-DP+ पता पाने के लिए:
...
cardMgr.requestDefaultSmdpAddress(eid, AsyncTask.THREAD_POOL_EXECUTOR,
callback);
दिए गए सूचना इवेंट की सूचनाओं की सूची देखने के लिए:
...
cardMgr.listNotifications(eid,
EuiccNotification.Event.INSTALL
| EuiccNotification.Event.DELETE /* events */,
AsyncTask.THREAD_POOL_EXECUTOR, callback);
मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन की मदद से, ई-सिम प्रोफ़ाइल चालू करना
Android 9 या इसके बाद के वर्शन वाले डिवाइसों पर, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन का इस्तेमाल करके, ई-सिम को चालू किया जा सकता है और प्रोफ़ाइलें डाउनलोड की जा सकती हैं. कैरियर ऐप्लिकेशन, downloadSubscription
को सीधे कॉल करके या एलपीए को ऐक्टिवेशन कोड देकर, प्रोफ़ाइलें डाउनलोड कर सकता है.
जब कोई कैरियर ऐप्लिकेशन, downloadSubscription
को कॉल करके प्रोफ़ाइल डाउनलोड करता है, तो कॉल से यह लागू होता है कि ऐप्लिकेशन, BF76
मेटाडेटा टैग के ज़रिए प्रोफ़ाइल को मैनेज कर सकता है. यह टैग, प्रोफ़ाइल के लिए कैरियर के विशेषाधिकारों के नियमों को कोड में बदलता है. अगर किसी प्रोफ़ाइल में BF76
टैग नहीं है या उसका BF76
टैग, कॉल करने वाले कैरियर ऐप्लिकेशन के हस्ताक्षर से मेल नहीं खाता है, तो डाउनलोड अस्वीकार कर दिया जाता है.
नीचे दिए गए सेक्शन में, ऐक्टिवेशन कोड का इस्तेमाल करके, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन से ई-सिम को चालू करने का तरीका बताया गया है.
ऐक्टिवेशन कोड का इस्तेमाल करके ई-सिम चालू करना
ई-सिम प्रोफ़ाइल को चालू करने के लिए ऐक्टिवेशन कोड का इस्तेमाल करने पर, एलपीए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन से ऐक्टिवेशन कोड फ़ेच करता है और प्रोफ़ाइल डाउनलोड करता है. इस फ़्लो को एलपीए शुरू कर सकता है और एलपीए पूरे यूज़र इंटरफ़ेस (यूआई) फ़्लो को कंट्रोल कर सकता है. इसका मतलब है कि कोई भी कैरियर ऐप्लिकेशन यूआई नहीं दिखाया जाता. इस तरीके से, BF76
टैग की जांच को बायपास किया जाता है. साथ ही, नेटवर्क ऑपरेटर को ई-सिम ऐक्टिवेशन के यूज़र इंटरफ़ेस (यूआई) फ़्लो को लागू करने की ज़रूरत नहीं होती. इसमें ई-सिम प्रोफ़ाइल डाउनलोड करना और गड़बड़ी को मैनेज करना शामिल है.
मोबाइल और इंटरनेट सेवा देने वाली कंपनी की eUICC प्रोविज़निंग सेवा तय करना
एलपीए और मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, दो AIDL इंटरफ़ेस के ज़रिए आपस में बातचीत करते हैं: ICarrierEuiccProvisioningService
और IGetActivationCodeCallback
. कैरियर ऐप्लिकेशन को ICarrierEuiccProvisioningService
इंटरफ़ेस लागू करना होगा और उसे अपने मेनिफ़ेस्ट एलान में दिखाना होगा.
एलपीए को ICarrierEuiccProvisioningService
से बंधना चाहिए और
IGetActivationCodeCallback
को लागू करना चाहिए. AIDL इंटरफ़ेस को लागू करने और उसे एक्सपोज़ करने के तरीके के बारे में ज़्यादा जानने के लिए, एआईडीएल इंटरफ़ेस तय करना लेख पढ़ें.
AIDL इंटरफ़ेस तय करने के लिए, एलपीए और कैरियर ऐप्लिकेशन, दोनों के लिए ये AIDL फ़ाइलें बनाएं.
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(); }
एलपीए लागू करने का उदाहरण
मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन में ICarrierEuiccProvisioningService
को लागू करने के लिए,
एलपीए को आपके प्रोजेक्ट में ICarrierEuiccProvisioningService.aidl
और
IGetActivationCodeCallback.aidl
, दोनों को कॉपी करना होगा और
ServiceConnection
को लागू करना होगा.
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
mCarrierProvisioningService = ICarrierEuiccProvisioningService.Stub.asInterface(iBinder);
}
कैरियर ऐप्लिकेशन के ICarrierEuiccProvisioningService
लागू करने के लिए बाइंड करने के बाद, एलपीए getActivationCode
या
getActivationCodeForEid
को कॉल करता है. इससे, कैरियर ऐप्लिकेशन से ऐक्टिवेशन कोड पाने के लिए, IGetActivationCodeCallback
स्टब क्लास को लागू किया जाता है.
getActivationCode
और getActivationCodeForEid
के बीच का अंतर यह है कि getActivationCodeForEid
की मदद से, कैरियर डाउनलोड की प्रोसेस शुरू होने से पहले, डिवाइस के ईआईडी से प्रोफ़ाइल को पहले से बांध सकता है.
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
, दोनों को कॉपी करना होगा. साथ ही, AndroidManifest.xml
फ़ाइल में ICarrierEuiccProvisioningService
सेवा का एलान करना होगा. सेवा के लिए, android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS
सिस्टम की अनुमति ज़रूरी है, ताकि यह पक्का किया जा सके कि सिर्फ़ एलपीए, जो सिस्टम-प्राथमिकता वाला ऐप्लिकेशन है, उससे बंधा हो. सेवा में, 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
तरीके लागू करें. इसके बाद, एलपीए प्रोफ़ाइल को ऐक्टिव करने वाला कोड पाने के लिए, इनमें से किसी भी तरीके का इस्तेमाल कर सकता है. अगर कोड को मोबाइल और इंटरनेट सेवा देने वाली कंपनी के सर्वर से फ़ेच किया गया है, तो मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, ऐक्टिवेशन कोड के साथ 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 और उसके बाद के वर्शन पर चलने वाले डिवाइसों पर, एलपीए, कैरियर ऐप्लिकेशन का यूज़र इंटरफ़ेस शुरू कर सकता है. यह जानकारी इसलिए ज़रूरी है, क्योंकि मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को एलपीए को चालू करने का कोड देने से पहले, उपयोगकर्ता से ज़्यादा जानकारी की ज़रूरत पड़ सकती है. उदाहरण के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनियां, उपयोगकर्ताओं को अपने फ़ोन नंबर चालू करने या पोर्ट करने से जुड़ी अन्य सेवाएं पाने के लिए, लॉग इन करने के लिए कह सकती हैं.
एलपीए में मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) शुरू करने की प्रोसेस यहां दी गई है:
एलपीए, मोबाइल नेटवर्क सेवा देने वाली कंपनी के ऐप्लिकेशन के चालू होने का फ़्लो लॉन्च करता है. इसके लिए, वह ऐक्शन वाले मोबाइल नेटवर्क सेवा देने वाली कंपनी के ऐप्लिकेशन पैकेज पर
android.service.euicc.action.START_CARRIER_ACTIVATION
इंटेंट भेजता है. (कैरियर ऐप्लिकेशन रिसीवर कोandroid:permission="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"
के साथ मेनिफ़ेस्ट एलान में सुरक्षित किया जाना चाहिए, ताकि एलपीए से बाहर के ऐप्लिकेशन से इंटेंट न मिलें.)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);
मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, अपने यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके काम करता है. उदाहरण के लिए, उपयोगकर्ता को लॉग इन करना या कैरियर के बैकएंड को एचटीटीपी अनुरोध भेजना.
मोबाइल या इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन,
setResult(int, Intent)
औरfinish()
को कॉल करके एलपीए को जवाब देता है.- अगर कैरियर ऐप्लिकेशन
RESULT_OK
के साथ जवाब देता है, तो एलपीए, चालू करने की प्रोसेस जारी रखता है. अगर कैरियर ऐप्लिकेशन यह तय करता है कि उपयोगकर्ता को एलपीए को कैरियर ऐप्लिकेशन की सेवा से बांधने के बजाय, क्यूआर कोड स्कैन करना चाहिए, तो कैरियर ऐप्लिकेशनsetResult(int, Intent)
का इस्तेमाल करके एलपीए को जवाब देता है. इसमेंRESULT_OK
औरIntent
इंस्टेंस होता है, जिसमेंtrue
पर सेट किए गए बोलियन एक्सट्राandroid.telephony.euicc.extra.USE_QR_SCANNER
होता है. इसके बाद, एलपीए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन केICarrierEuiccProvisioningService
लागू करने के बजाय, अतिरिक्त सुविधा की जांच करता है और क्यूआर स्कैनर को लॉन्च करता है. - अगर मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन क्रैश हो जाता है या
RESULT_CANCELED
(यह डिफ़ॉल्ट रिस्पॉन्स कोड है) के साथ जवाब देता है, तो एलपीए, ई-सिम चालू करने के फ़्लो को रद्द कर देता है. - अगर कैरियर ऐप्लिकेशन,
RESULT_OK
याRESULT_CANCELED
के अलावा किसी और जवाब के साथ रिस्पॉन्स देता है, तो एलपीए इसे गड़बड़ी के तौर पर लेता है.
सुरक्षा से जुड़ी वजहों से, एलपीए को नतीजे के इंटेंट में दिए गए ऐक्टिवेशन कोड को सीधे तौर पर स्वीकार नहीं करना चाहिए. इससे यह पक्का किया जा सकेगा कि एलपीए से जुड़े कॉल न करने वाले लोगों को मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन से ऐक्टिवेशन कोड न मिले.
- अगर कैरियर ऐप्लिकेशन
मोबाइल नेटवर्क सेवा देने वाली कंपनी के ऐप्लिकेशन में एलपीए ऐक्टिवेशन फ़्लो लॉन्च करना
Android 11 से, कैरियर ऐप्लिकेशन, eSIM चालू करने के लिए एलयूआई शुरू करने के लिए, eUICC API का इस्तेमाल कर सकते हैं. इस तरीके से, ई-सिम प्रोफ़ाइल को चालू करने के लिए, एलपीए का ई-सिम ऐक्टिवेशन फ़्लो यूज़र इंटरफ़ेस (यूआई) दिखता है. इसके बाद, ई-सिम प्रोफ़ाइल चालू होने पर एलपीए एक ब्रॉडकास्ट भेजता है.
एलपीए को एक ऐसी गतिविधि का एलान करना होगा जिसमें
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>
मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, अपने यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके काम करता है. उदाहरण के लिए, उपयोगकर्ता को लॉग इन करना या कैरियर के बैकएंड को एचटीटीपी अनुरोध भेजना.
इस समय, मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन,
ICarrierEuiccProvisioningService
लागू करने के ज़रिए ऐक्टिवेशन कोड देने के लिए तैयार होना चाहिए. मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन,android.telephony.euicc.action.START_EUICC_ACTIVATION
ऐक्शन के साथstartActivityForResult(Intent, int)
को कॉल करके एलपीए को लॉन्च करता है. एलपीए, एक्सट्रा बूलियन एट्रिब्यूटandroid.telephony.euicc.extra.USE_QR_SCANNER
की भी जांच करता है. अगर वैल्यूtrue
है, तो उपयोगकर्ता को प्रोफ़ाइल का क्यूआर कोड स्कैन करने की सुविधा देने के लिए, एलपीए क्यूआर स्कैनर लॉन्च करता है.एलपीए की ओर से, एलपीए मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन के
ICarrierEuiccProvisioningService
लागू करने के लिए बाइंड होता है, ताकि ऐक्टिवेशन कोड फ़ेच किया जा सके और उससे जुड़ी प्रोफ़ाइल डाउनलोड की जा सके. एलपीए, डाउनलोड के दौरान ज़रूरी यूज़र इंटरफ़ेस (यूआई) एलिमेंट दिखाता है. जैसे, लोडिंग स्क्रीन.एलपीए चालू करने की प्रोसेस पूरी होने के बाद, एलपीए कैरियर ऐप्लिकेशन को नतीजे का कोड भेजता है. कैरियर ऐप्लिकेशन,
onActivityResult(int, int, Intent)
में इस कोड को मैनेज करता है.- अगर एलपीए नई ई-सिम प्रोफ़ाइल डाउनलोड कर लेता है, तो वह
RESULT_OK
के साथ जवाब देता है. - अगर उपयोगकर्ता एलपीए में ई-सिम प्रोफ़ाइल के ऐक्टिवेशन को रद्द करता है, तो यह
RESULT_CANCELED
के साथ जवाब देता है. - अगर एलपीए,
RESULT_OK
याRESULT_CANCELED
के अलावा किसी और वैल्यू के साथ जवाब देता है, तो कैरियर ऐप्लिकेशन इसे गड़बड़ी के तौर पर लेता है.
सुरक्षा से जुड़ी वजहों से, एलपीए सीधे तौर पर दिए गए इंटेंट में ऐक्टिवेशन कोड स्वीकार नहीं करता. इससे यह पक्का होता है कि एलपीए से जुड़े कॉलर को मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन से ऐक्टिवेशन कोड न मिल सके.
- अगर एलपीए नई ई-सिम प्रोफ़ाइल डाउनलोड कर लेता है, तो वह
एक से ज़्यादा ई-सिम का इस्तेमाल करने की सुविधा
Android 10 या इसके बाद के वर्शन वाले डिवाइसों के लिए, EuiccManager
क्लास में एक से ज़्यादा eSIM काम करते हैं. एक ही ई-सिम वाले डिवाइसों को Android 10 पर अपग्रेड करने के लिए, एलपीए लागू करने के तरीके में कोई बदलाव करने की ज़रूरत नहीं होती. ऐसा इसलिए, क्योंकि प्लैटफ़ॉर्म EuiccManager
इंस्टेंस को डिफ़ॉल्ट ईयूआईसीसी से अपने-आप जोड़ देता है. डिफ़ॉल्ट eUICC, रेडियो एचएएल के 1.2 या उसके बाद के वर्शन वाले डिवाइसों के लिए प्लैटफ़ॉर्म और रेडियो एचएएल के 1.2 से पहले के वर्शन वाले डिवाइसों के लिए एलपीए से तय होता है.
ज़रूरी शर्तें
एक से ज़्यादा ई-सिम का इस्तेमाल करने के लिए, डिवाइस में एक से ज़्यादा ईयूआईसीसी होने चाहिए. ये ईयूआईसीसी, डिवाइस में पहले से मौजूद हो सकते हैं या फिर सिम कार्ड स्लॉट में डाले जा सकने वाले ईयूआईसीसी हो सकते हैं.
एक से ज़्यादा ई-सिम का इस्तेमाल करने के लिए, Radio HAL का वर्शन 1.2 या इसके बाद का वर्शन होना ज़रूरी है. हमारा सुझाव है कि Radio HAL के वर्शन 1.4 और RadioConfig HAL के वर्शन 1.2 का इस्तेमाल करें.
लागू करना
एक से ज़्यादा ई-सिम (इनमें हटाए जा सकने वाले ईयूआईसीसी या प्रोग्राम किए जा सकने वाले सिम शामिल हैं) के साथ काम करने के लिए, एलपीए को EuiccService
लागू करना होगा. इससे, कॉल करने वाले व्यक्ति के दिए गए कार्ड आईडी से जुड़ा स्लॉट आईडी मिलता है.
arrays.xml
में बताया गया non_removable_euicc_slots
संसाधन, पूर्णांकों का एक कलेक्शन है. यह किसी डिवाइस में पहले से मौजूद eUICC के स्लॉट आईडी दिखाता है. आपको यह संसाधन बताना होगा, ताकि प्लैटफ़ॉर्म यह तय कर सके कि डाले गए eUICC को हटाया जा सकता है या नहीं.
एक से ज़्यादा ई-सिम वाले डिवाइस के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन
एक से ज़्यादा ई-सिम वाले डिवाइस के लिए मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन बनाते समय, EuiccManager
में createForCardId
तरीका इस्तेमाल करें. इससे, किसी दिए गए कार्ड आईडी पर पिन किया गया EuiccManager
ऑब्जेक्ट बनाया जा सकता है. कार्ड आईडी एक पूर्णांक वैल्यू है, जो डिवाइस पर मौजूद UICC या eUICC की पहचान करता है.
डिवाइस के डिफ़ॉल्ट ईयूआईसीसी का कार्ड आईडी पाने के लिए, TelephonyManager
में getCardIdForDefaultEuicc
तरीका इस्तेमाल करें. अगर रेडियो एचएएल का वर्शन 1.2 से कम है, तो यह तरीका UNSUPPORTED_CARD_ID
दिखाता है. अगर डिवाइस ने eUICC को नहीं पढ़ा है, तो यह तरीका UNINITIALIZED_CARD_ID
दिखाता है.
TelephonyManager
में getUiccCardsInfo
और getUiccSlotsInfo
(सिस्टम एपीआई) और SubscriptionInfo
में getCardId
से भी कार्ड आईडी पाए जा सकते हैं.
जब किसी EuiccManager
ऑब्जेक्ट को किसी खास कार्ड आईडी के साथ इंस्टैंशिएट किया गया है, तो सभी ऑपरेशन उस कार्ड आईडी वाले eUICC पर भेजे जाते हैं. अगर eUICC को ऐक्सेस नहीं किया जा सकता (उदाहरण के लिए, जब इसे बंद या हटा दिया जाता है), तो EuiccManager
काम नहीं करता.
कैरियर ऐप्लिकेशन बनाने के लिए, यहां दिए गए कोड सैंपल का इस्तेमाल किया जा सकता है.
पहला उदाहरण: चालू सदस्यता पाना और 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);
दूसरा उदाहरण: यूआईसीसी के ज़रिए बार-बार दोहराएं और हटाया जा सकने वाले eUICC के लिए EuiccManager
को इंस्टैंशिएट करें
// 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 में एलपीए लागू नहीं होता. साथ ही, यह ज़रूरी नहीं है कि आपके पास सभी Android बिल्ड पर एलपीए उपलब्ध हो. ऐसा इसलिए, क्योंकि हर फ़ोन पर ई-सिम काम नहीं करता. इस वजह से, एंड-टू-एंड सीटीएस टेस्ट के लिए कोई केस उपलब्ध नहीं है. हालांकि, AOSP में बुनियादी टेस्ट केस उपलब्ध हैं. इससे यह पक्का किया जा सकता है कि एक्सपोज़ किए गए eUICC API, Android बिल्ड में मान्य हैं.
आपको यह पक्का करना चाहिए कि सार्वजनिक एपीआई के लिए, बाइंड किए गए बिल्ड, सीटीएस के इन टेस्ट केस पास करें: /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts.
मोबाइल और इंटरनेट सेवा देने वाली कंपनियों को, अपने ऐप्लिकेशन को लागू करने से पहले, अपने सामान्य क्वालिटी अश्योरेंस साइकल से गुज़रना चाहिए. इससे यह पक्का किया जा सकेगा कि लागू की गई सभी सुविधाएं उम्मीद के मुताबिक काम कर रही हैं. कम से कम, कैरियर ऐप्लिकेशन में एक ही ऑपरेटर के मालिकाना हक वाली सभी सदस्यता प्रोफ़ाइलों की सूची होनी चाहिए. साथ ही, इसमें प्रोफ़ाइल डाउनलोड और इंस्टॉल करने, प्रोफ़ाइल पर सेवा चालू करने, प्रोफ़ाइलों के बीच स्विच करने, और प्रोफ़ाइलों को मिटाने की सुविधा होनी चाहिए.
अगर आपको खुद एलपीए बनाना है, तो आपको ज़्यादा सख्त जांच से गुज़रना होगा. आपको अपने मॉडेम वेंडर, eUICC चिप या eSIM ओएस वेंडर, SM-DP+ वेंडर, और मोबाइल और इंटरनेट सेवा देने वाली कंपनियों के साथ मिलकर काम करना चाहिए. इससे, आपको समस्याओं को हल करने और आरएसपी आर्किटेक्चर में अपने एलपीए के इंटरऑपरेबिलिटी की पुष्टि करने में मदद मिलेगी. ज़्यादातर मामलों में, मैन्युअल तरीके से जांच करना ज़रूरी होता है. बेहतर टेस्ट कवरेज के लिए, आपको GSMA SGP.23 आरएसपी टेस्ट प्लान का पालन करना चाहिए.