एम्बेडेड सिम (ई-सिम या eUICC) टेक्नोलॉजी की मदद से, मोबाइल इस्तेमाल करने वाले लोग, मोबाइल और इंटरनेट सेवा देने वाली कंपनी की प्रोफ़ाइल डाउनलोड कर सकते हैं. साथ ही, बिना किसी सिम कार्ड के, मोबाइल और इंटरनेट सेवा देने वाली कंपनी की सेवा चालू कर सकते हैं. यह GSMA की ओर से तैयार की गई एक ग्लोबल स्पेसिफ़िकेशन है. इसकी मदद से, किसी भी मोबाइल डिवाइस के लिए रिमोट सिम प्रोवाइज़निंग (आरएसपी) की सुविधा चालू की जा सकती है. Android फ़्रेमवर्क, ई-सिम को ऐक्सेस करने और ई-सिम पर सदस्यता की प्रोफ़ाइलों को मैनेज करने के लिए, स्टैंडर्ड एपीआई उपलब्ध कराता है. इन एपीआई की शुरुआत Android 9 से होती है. ये 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 एपीआई की मदद से मोबाइल नेटवर्क ऑपरेटर, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ब्रैंड वाले ऐप्लिकेशन बना सकते हैं, ताकि वे सीधे अपनी प्रोफ़ाइल मैनेज कर सकें. इसमें मोबाइल और इंटरनेट सेवा देने वाली कंपनी के मालिकाना हक वाली सदस्यता की प्रोफ़ाइलें डाउनलोड करना और उन्हें मिटाना शामिल है. साथ ही, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के मालिकाना हक वाली प्रोफ़ाइल पर स्विच करना भी शामिल है.
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+ से प्रोफ़ाइल का मेटाडेटा हासिल कर सकता है. इसके अलावा, प्रोफ़ाइल बंद होने पर ISD-R से भी प्रोफ़ाइल का मेटाडेटा हासिल किया जा सकता है. इसलिए, इसमें वे ही नियम होने चाहिए जो प्रोफ़ाइल में हैं.
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 API के साथ ज़रूरत के हिसाब से इंटरैक्ट करता है. 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 एपीआई इस्तेमाल किए जाते हैं
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 प्रोविज़निंग सेवा तय करना
एलपीए और मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन, दो एआईडीएल इंटरफ़ेस के ज़रिए एक-दूसरे से बातचीत करते हैं:
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 चिप या ई-सिम ओएस वेंडर, SM-DP+ वेंडर, और मोबाइल और इंटरनेट सेवा देने वाली कंपनियों की मदद लेनी चाहिए. बड़ी संख्या में मैन्युअल तौर पर जांच करना ज़रूरी है. टेस्ट के सबसे अच्छे कवरेज के लिए, आपको GSMA SGP.23 RSP टेस्ट प्लान को फ़ॉलो करना चाहिए.