ई-सिम को लागू करें

एम्बेडेड सिम (ई-सिम या 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 एपीआई को कॉल करने की अनुमति देता है. इस प्रोसेस के बारे में यहां बताया गया है:

  1. ऑपरेटर, कैरियर ऐप्लिकेशन के APK पर हस्ताक्षर करता है. इसके बाद, apksigner टूल, APK में सार्वजनिक-कुंजी सर्टिफ़िकेट अटैच करता है.
  2. ऑपरेटर/SM-DP+, एक प्रोफ़ाइल और उसका मेटाडेटा तैयार करता है. इसमें एक ARF शामिल होता है, जिसमें ये चीज़ें होती हैं:

    1. कैरियर ऐप्लिकेशन के सार्वजनिक पासकोड सर्टिफ़िकेट का हस्ताक्षर (SHA-1 या SHA-256) (ज़रूरी है)
    2. कैरियर ऐप्लिकेशन का पैकेज नाम (इसका सुझाव ज़रूर दिया जाता है)
  3. कैरियर ऐप्लिकेशन, EuiccManager एपीआई की मदद से eUICC ऑपरेशन करने की कोशिश करता है.

  4. Android प्लैटफ़ॉर्म, कॉल करने वाले ऐप्लिकेशन के सर्टिफ़िकेट के SHA-1 या SHA-256 हैश की पुष्टि करता है. यह पुष्टि की जाती है कि यह हैश, टारगेट प्रोफ़ाइल के ARF से मिले सर्टिफ़िकेट के हस्ताक्षर से मेल खाता है या नहीं. अगर एआरएफ़ में कैरियर ऐप्लिकेशन का पैकेज नाम शामिल है, तो यह कॉलर ऐप्लिकेशन के पैकेज नाम से भी मेल खाना चाहिए.

  5. हस्ताक्षर और पैकेज के नाम (अगर शामिल किया गया है) की पुष्टि हो जाने के बाद, टारगेट प्रोफ़ाइल पर कॉल करने वाले ऐप्लिकेशन को कैरियर की सुविधाएं दी जाती हैं.

प्रोफ़ाइल का मेटाडेटा, प्रोफ़ाइल के बाहर भी उपलब्ध हो सकता है. ऐसा इसलिए है, ताकि प्रोफ़ाइल डाउनलोड होने से पहले, एलपीए 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 एपीआई

दूसरी इमेज. कैरियर ऐप्लिकेशन और एलपीए, दोनों 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 और उसके बाद के वर्शन पर चलने वाले डिवाइसों पर, एलपीए, कैरियर ऐप्लिकेशन का यूज़र इंटरफ़ेस शुरू कर सकता है. यह जानकारी इसलिए ज़रूरी है, क्योंकि मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को एलपीए को चालू करने का कोड देने से पहले, उपयोगकर्ता से ज़्यादा जानकारी की ज़रूरत पड़ सकती है. उदाहरण के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनियां, उपयोगकर्ताओं को अपने फ़ोन नंबर चालू करने या पोर्ट करने से जुड़ी अन्य सेवाएं पाने के लिए, लॉग इन करने के लिए कह सकती हैं.

एलपीए में मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) शुरू करने की प्रोसेस यहां दी गई है:

  1. एलपीए, मोबाइल नेटवर्क सेवा देने वाली कंपनी के ऐप्लिकेशन के चालू होने का फ़्लो लॉन्च करता है. इसके लिए, वह ऐक्शन वाले मोबाइल नेटवर्क सेवा देने वाली कंपनी के ऐप्लिकेशन पैकेज पर 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);
    
  2. मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, अपने यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके काम करता है. उदाहरण के लिए, उपयोगकर्ता को लॉग इन करना या कैरियर के बैकएंड को एचटीटीपी अनुरोध भेजना.

  3. मोबाइल या इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, setResult(int, Intent) और finish() को कॉल करके एलपीए को जवाब देता है.

    1. अगर कैरियर ऐप्लिकेशन RESULT_OK के साथ जवाब देता है, तो एलपीए, चालू करने की प्रोसेस जारी रखता है. अगर कैरियर ऐप्लिकेशन यह तय करता है कि उपयोगकर्ता को एलपीए को कैरियर ऐप्लिकेशन की सेवा से बांधने के बजाय, क्यूआर कोड स्कैन करना चाहिए, तो कैरियर ऐप्लिकेशन setResult(int, Intent) का इस्तेमाल करके एलपीए को जवाब देता है. इसमें RESULT_OK और Intent इंस्टेंस होता है, जिसमें true पर सेट किए गए बोलियन एक्सट्रा android.telephony.euicc.extra.USE_QR_SCANNER होता है. इसके बाद, एलपीए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन के ICarrierEuiccProvisioningService लागू करने के बजाय, अतिरिक्त सुविधा की जांच करता है और क्यूआर स्कैनर को लॉन्च करता है.
    2. अगर मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन क्रैश हो जाता है या RESULT_CANCELED (यह डिफ़ॉल्ट रिस्पॉन्स कोड है) के साथ जवाब देता है, तो एलपीए, ई-सिम चालू करने के फ़्लो को रद्द कर देता है.
    3. अगर कैरियर ऐप्लिकेशन, RESULT_OK या RESULT_CANCELED के अलावा किसी और जवाब के साथ रिस्पॉन्स देता है, तो एलपीए इसे गड़बड़ी के तौर पर लेता है.

    सुरक्षा से जुड़ी वजहों से, एलपीए को नतीजे के इंटेंट में दिए गए ऐक्टिवेशन कोड को सीधे तौर पर स्वीकार नहीं करना चाहिए. इससे यह पक्का किया जा सकेगा कि एलपीए से जुड़े कॉल न करने वाले लोगों को मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन से ऐक्टिवेशन कोड न मिले.

मोबाइल नेटवर्क सेवा देने वाली कंपनी के ऐप्लिकेशन में एलपीए ऐक्टिवेशन फ़्लो लॉन्च करना

Android 11 से, कैरियर ऐप्लिकेशन, eSIM चालू करने के लिए एलयूआई शुरू करने के लिए, eUICC API का इस्तेमाल कर सकते हैं. इस तरीके से, ई-सिम प्रोफ़ाइल को चालू करने के लिए, एलपीए का ई-सिम ऐक्टिवेशन फ़्लो यूज़र इंटरफ़ेस (यूआई) दिखता है. इसके बाद, ई-सिम प्रोफ़ाइल चालू होने पर एलपीए एक ब्रॉडकास्ट भेजता है.

  1. एलपीए को एक ऐसी गतिविधि का एलान करना होगा जिसमें 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>
    
  2. मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, अपने यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके काम करता है. उदाहरण के लिए, उपयोगकर्ता को लॉग इन करना या कैरियर के बैकएंड को एचटीटीपी अनुरोध भेजना.

  3. इस समय, मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, ICarrierEuiccProvisioningService लागू करने के ज़रिए ऐक्टिवेशन कोड देने के लिए तैयार होना चाहिए. मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, android.telephony.euicc.action.START_EUICC_ACTIVATION ऐक्शन के साथ startActivityForResult(Intent, int) को कॉल करके एलपीए को लॉन्च करता है. एलपीए, एक्सट्रा बूलियन एट्रिब्यूट android.telephony.euicc.extra.USE_QR_SCANNER की भी जांच करता है. अगर वैल्यू true है, तो उपयोगकर्ता को प्रोफ़ाइल का क्यूआर कोड स्कैन करने की सुविधा देने के लिए, एलपीए क्यूआर स्कैनर लॉन्च करता है.

  4. एलपीए की ओर से, एलपीए मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन के ICarrierEuiccProvisioningService लागू करने के लिए बाइंड होता है, ताकि ऐक्टिवेशन कोड फ़ेच किया जा सके और उससे जुड़ी प्रोफ़ाइल डाउनलोड की जा सके. एलपीए, डाउनलोड के दौरान ज़रूरी यूज़र इंटरफ़ेस (यूआई) एलिमेंट दिखाता है. जैसे, लोडिंग स्क्रीन.

  5. एलपीए चालू करने की प्रोसेस पूरी होने के बाद, एलपीए कैरियर ऐप्लिकेशन को नतीजे का कोड भेजता है. कैरियर ऐप्लिकेशन, onActivityResult(int, int, Intent) में इस कोड को मैनेज करता है.

    1. अगर एलपीए नई ई-सिम प्रोफ़ाइल डाउनलोड कर लेता है, तो वह RESULT_OK के साथ जवाब देता है.
    2. अगर उपयोगकर्ता एलपीए में ई-सिम प्रोफ़ाइल के ऐक्टिवेशन को रद्द करता है, तो यह RESULT_CANCELED के साथ जवाब देता है.
    3. अगर एलपीए, 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 आरएसपी टेस्ट प्लान का पालन करना चाहिए.