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

एम्बेड किए गए सिम (ई-सिम या ईयूआईसीसी) टेक्नोलॉजी की मदद से, मोबाइल का इस्तेमाल करने वाले लोग ये काम कर सकते हैं मोबाइल और इंटरनेट सेवा देने वाली कंपनी की प्रोफ़ाइल डाउनलोड करें और फ़िज़िकल सिम कार्ड. यह GSMA की मदद से जनरेट किया गया ग्लोबल स्पेसिफ़िकेशन है. किसी भी मोबाइल डिवाइस का रिमोट सिम प्रॉविज़निंग (आरएसपी). Android के साथ शुरू करना Android फ़्रेमवर्क, ई-सिम पर ई-सिम और सदस्यता की प्रोफ़ाइलों को मैनेज करने की सुविधा. ये eUICC एपीआई की मदद से तीसरे पक्ष, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन और लोकल प्रोफ़ाइल बना सकते हैं ई-सिम की सुविधा वाले Android डिवाइसों पर असिस्टेंट (एलपीए) की जानकारी.

एलपीए एक स्टैंडअलोन, सिस्टम ऐप्लिकेशन है. इसे Android बिल्ड इमेज. आम तौर पर, ई-सिम पर प्रोफ़ाइलों का मैनेजमेंट ये काम करते हैं एलपीए के तौर पर काम करता है. यह SM-DP+ (रिमोट सर्विस) इससे डिवाइस और eUICC चिप को तैयार किया जाता है, सेव किया जाता है, और उन पर प्रोफ़ाइल पैकेज डिलीवर किए जाते हैं. एलपीए APK में, वैकल्पिक तौर पर एक यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट शामिल किया जा सकता है. इसे एलपीए यूज़र इंटरफ़ेस (यूआई) या एलयूआई कहा जाता है. असली उपयोगकर्ता को ऐसी जगह उपलब्ध कराएं जहां से वे एम्बेड की गई सभी सदस्यताएं मैनेज कर सकें प्रोफ़ाइल. Android फ़्रेमवर्क, अपने-आप ही सबसे अच्छी क्वालिटी की उपलब्ध एलपीए, और सभी eUICC ऑपरेशन को एलपीए इंस्टेंस के ज़रिए रूट करता है.

आसान रिमोट सिम प्रॉविज़निंग (आरएसपी) आर्किटेक्चर

पहला डायग्राम. आसान आरएसपी आर्किटेक्चर

मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन बनाने में दिलचस्पी रखने वाले मोबाइल नेटवर्क ऑपरेटर को इन बातों पर ध्यान देना चाहिए एपीआई को EuiccManager, यह प्रोफ़ाइल मैनेजमेंट से जुड़ी हाई-लेवल गतिविधियां मुहैया कराता है, जैसे कि downloadSubscription(), switchToSubscription(), और deleteSubscription().

अगर आप डिवाइस के OEM हैं और आपको खुद का एलपीए सिस्टम ऐप्लिकेशन बनाना है, तो आपको बढ़ाएं EuiccService आपको एलपीए सेवाओं से कनेक्ट करने के लिए, Android फ़्रेमवर्क का इस्तेमाल करना होगा. इसके अलावा, आपको को एपीआई का इस्तेमाल EuiccCardManager, जो GSMA RSP v2.0 पर आधारित ES10x फ़ंक्शन देते हैं. इन फ़ंक्शन का इस्तेमाल, eUICC चिप को निर्देश देने के लिए किया जाता है. जैसे, prepareDownload(), loadBoundProfilePackage(), retrieveNotificationList(), और resetMemory().

इसमें मौजूद एपीआई EuiccManager के काम करने के लिए सही तरीके से लागू किए गए LPA ऐप्लिकेशन की ज़रूरत होगी और EuiccCardManager एपीआई, एलपीए होना चाहिए. यह Android फ़्रेमवर्क की मदद से लागू किया जाता है.

Android 10 या उसके बाद के वर्शन वाले डिवाइसों पर यह सुविधा काम करती है एक से ज़्यादा ई-सिम वाले डिवाइस. ज़्यादा जानकारी के लिए, यह देखें एक से ज़्यादा ई-सिम के साथ काम करना.

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

Android 9 में मौजूद eUICC एपीआई से, मोबाइल नेटवर्क ऑपरेटर, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ब्रैंड वाले ऐप्लिकेशन बना सकते हैं. सीधे प्रोफ़ाइल बनाने का विकल्प है. इसमें सदस्यता की प्रोफ़ाइलें डाउनलोड करना और उन्हें मिटाना शामिल है कैरियर का मालिकाना हक हो और आप मोबाइल और इंटरनेट सेवा देने वाली कंपनी के मालिकाना हक वाली प्रोफ़ाइल पर जा रहे हों.

EuiccManager

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

सार्वजनिक एपीआई का इस्तेमाल करने के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को पहले EuiccManager से Context#getSystemService:

EuiccManager mgr = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);

कोई भी कार्रवाई करने से पहले, आपको यह देख लेना चाहिए कि डिवाइस पर ई-सिम काम करता है या नहीं ई-सिम से जुड़ी कार्रवाइयां. EuiccManager#isEnabled() आम तौर पर, true वैल्यू दिखाता है, अगर android.hardware.telephony.euicc सुविधा के बारे में बताया गया है और एक एलपीए पैकेज उपस्थित.

if (mgr == null || !mgr.isEnabled()) {
    return;
}

ईयूआईसीसी हार्डवेयर और ई-सिम ओएस वर्शन के बारे में जानकारी पाने के लिए:

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

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

प्रोफ़ाइल का मेटाडेटा, प्रोफ़ाइल के बाहर भी उपलब्ध हो सकता है (ताकि एलपीए, SM-DP+ से प्रोफ़ाइल के मेटाडेटा को डाउनलोड किया जाता है, या प्रोफ़ाइल अक्षम होने पर ISD-R से डाउनलोड किया जाता है), तो उसमें मोबाइल और इंटरनेट सेवा देने वाली कंपनी के खास अधिकारों के नियम लागू करने होंगे.

eUICC OS और SM-DP+ को प्रोफ़ाइल में मालिकाना टैग BF76 के साथ काम करना चाहिए मेटाडेटा. टैग का कॉन्टेंट, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के खास अधिकारों के नियम के जैसा ही होना चाहिए ऐक्सेस नियम ऐप्लेट (ARA) के मुताबिक यूआईसीसी मोबाइल और इंटरनेट सेवा देने वाली कंपनी के खास अधिकार:

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 एपीआई से, बनाए जा सकते हैं. इन सेक्शन में, खास तौर पर एलपीए ऐप्लिकेशन बनाकर और उसे Android सिस्टम से इंटिग्रेट करना.

हार्डवेयर/मॉडम से जुड़ी ज़रूरी शर्तें

यह ज़रूरी है कि eUICC चिप पर मौजूद एलपीए और ई-सिम ओएस, कम से कम GSMA आरएसपी (रिमोट) के साथ काम करते हों सिम प्रावधान) v2.0 या v2.2. आपको SM-DP+ और SM-DS का इस्तेमाल भी करना चाहिए ऐसे सर्वर जिनका आरएसपी वर्शन से मेल खाता हो. आरएसपी के बारे में ज़्यादा जानकारी के लिए, यहां देखें जीएसएमए एसजीपी.21 आरएसपी आर्किटेक्चर की खास बातें.

इसके अलावा, Android में eUICC एपीआई के साथ इंटिग्रेट करने के लिए 9, डिवाइस मॉडम को टर्मिनल क्षमताएं भेजनी चाहिए एन्कोड की गई eUICC क्षमताओं के लिए समर्थन के साथ (स्थानीय प्रोफ़ाइल प्रबंधन और प्रोफ़ाइल डाउनलोड करने की सुविधा मिलती है). इसमें नीचे दिए गए तरीके भी लागू करने होंगे:

  • IRadio HAL v1.1: setSimPower
  • IRadio HAL v1.2: getIccCardStatus

  • IRadioConfig HAL v1.0: getSimSlotsStatus

  • IRadioConfig AIDL v1.0: getAllowedCarriers

    Google LPA को मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लॉक का स्टेटस पता होना चाहिए, ताकि वह सिर्फ़ अनुमति वाली मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लिए, ई-सिम डाउनलोड या ट्रांसफ़र करने की अनुमति दे सके. ऐसा न करने पर, उपयोगकर्ता सिम को डाउनलोड और ट्रांसफ़र कर सकते हैं. हालांकि, बाद में उन्हें पता चलता है कि वह डिवाइस, मोबाइल और इंटरनेट सेवा देने वाली किसी अन्य कंपनी के लिए लॉक है.

    • वेंडर या OEM को IRadioSim.getAllowedCarriers()HAL API को लागू करना होगा.

    • वेंडर RIL / मॉडम, मोबाइल और इंटरनेट सेवा देने वाली जिस कंपनी पर डिवाइस लॉक किया गया है उसकी लॉक स्थिति और इससे जुड़ी जानकारी देने वाली कंपनी का आईडी जनरेट करेगा. ऐसा 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>

मॉडम से जुड़ी ज़रूरी शर्तों की पूरी सूची देखने के लिए, यहां देखें ई-सिम से जुड़ी सहायता के लिए मॉडम की ज़रूरी शर्तें.

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>

इसका मतलब है कि इन स्क्रीन को लागू करने वाला यूज़र इंटरफ़ेस (यूआई) किसी अन्य लागू करने वाले में से APK EuiccService. क्या एक APK या एक से ज़्यादा APK होने हैं (उदाहरण के लिए, जो लागू करता है EuiccService और एलयूआई गतिविधियां उपलब्ध कराने वाला प्लैटफ़ॉर्म), डिज़ाइन को दिया गया विकल्प है.

EuicccardManager

EuiccCardManager, ई-सिम चिप के साथ कम्यूनिकेट करने का इंटरफ़ेस है. यह ES10 फ़ंक्शन उपलब्ध कराता है (जैसा कि GSMA RSP स्पेसिफ़िकेशन में बताया गया है) और कम लेवल के APDU अनुरोध/रिस्पॉन्स के निर्देशों के साथ-साथ ASN.1 को पार्स करने की प्रोसेस. EuiccCardManager एक सिस्टम एपीआई है और उसे सिर्फ़ सिस्टम के खास अधिकार रखने वाले लोग कॉल कर सकते हैं दिखाई देता है.

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन, LPA, और Euicc एपीआई

दूसरा डायग्राम. मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन और एलपीए, दोनों में Euicc एपीआई इस्तेमाल किए जाते हैं

EuiccCardManager के ज़रिए प्रोफ़ाइल ऑपरेशन एपीआई के लिए, यह ज़रूरी है कि कॉलर एक LPA. यह Android फ़्रेमवर्क की मदद से लागू किया जाता है. इसका मतलब है कि कॉल करने वाले (कॉलर) को EuiccService को बढ़ाएं और इसका एलान आपकी मेनिफ़ेस्ट फ़ाइल में किया जाए, जैसा कि सेक्शन पढ़ें.

EuiccManager की तरह ही, EuiccCardManager एपीआई का इस्तेमाल करने के लिए, आपके एलपीए को इन शर्तों को पूरा करना होगा पहले इसके ज़रिए EuiccCardManager का इंस्टेंस पाएं Context#getSystemService:

EuiccCardManager cardMgr = (EuiccCardManager) context.getSystemService(Context.EUICC_CARD_SERVICE);

इसके बाद, eUICC पर सभी प्रोफ़ाइलें देखने के लिए:

ResultCallback<EuiccProfileInfo[]> callback =
       new ResultCallback<EuiccProfileInfo[]>() {
           @Override
           public void onComplete(int resultCode,
                   EuiccProfileInfo[] result) {
               if (resultCode == EuiccCardManagerReflector.RESULT_OK) {
                   // handle result
               } else {
                   // handle error
               }
           }
       };

cardMgr.requestAllProfiles(eid, AsyncTask.THREAD_POOL_EXECUTOR, callback);

अंदरूनी तौर पर, EuiccCardManager, EuiccCardController से बाइंड करता है (जो फ़ोन प्रोसेस के ज़रिए) और हर 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. इस बारे में ज़्यादा जानकारी पाने के लिए कि एआईडीएल इंटरफ़ेस एक्सपोज़ करें, तय करना और एआईडीएल इंटरफ़ेस देखना लेख पढ़ें.

एआईडीएल इंटरफ़ेस तय करने के लिए, ये एआईडीएल फ़ाइलें बनाएं मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन के लिए कारगर साबित हो सकते हैं.

  • 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 को आपका प्रोजेक्ट तैयार कर सकता है और ICarrierEuiccProvisioningService सेवा का एलान यहां कर सकता है: AndroidManifest.xml फ़ाइल. सेवा के लिए ज़रूरी है कि पक्का करने के लिए 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>
    

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

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

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

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

  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 लागू करने की वजह से कोड का इस्तेमाल किया जा सकता है. कॉन्टेंट बनाने मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, startActivityForResult(Intent, int) android.telephony.euicc.action.START_EUICC_ACTIVATION कार्रवाई. एलपीए, बूलियन एक्स्ट्रा की जांच भी करता है 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, मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन इसे गड़बड़ी मानता है.

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

एक से ज़्यादा ई-सिम का इस्तेमाल करें

Android 10 या उसके बाद के वर्शन वाले डिवाइसों के लिए, EuiccManager क्लास, इन डिवाइसों पर काम करती है इस्तेमाल करें. एक ही ई-सिम वाले डिवाइस, जिन्हें अपग्रेड किया जा रहा है Android 10 के लिए उन्हें प्लैटफ़ॉर्म के तौर पर, एलपीए को लागू करने की प्रोसेस में किसी बदलाव की ज़रूरत नहीं होती यह EuiccManager इंस्टेंस को डिफ़ॉल्ट eUICC के साथ अपने-आप जोड़ता है. कॉन्टेंट बनाने डिफ़ॉल्ट eUICC को रेडियो एचएएल वर्शन वाले डिवाइसों के लिए प्लैटफ़ॉर्म से तय किया जाता है 1.2 या उसके बाद के वर्शन और एलपीए के हिसाब से उन डिवाइसों के लिए जिनके रेडियो एचएएल वर्शन इससे कम हैं 1.2.

ज़रूरी शर्तें

एक से ज़्यादा ई-सिम इस्तेमाल करने के लिए, डिवाइस में एक से ज़्यादा ई-यूआईसीसी होने चाहिए, ताकि ये काम किए जा सकें पहले से मौजूद eUICC या फ़िज़िकल सिम स्लॉट होना चाहिए, जहां हटाया जा सकने वाला eUICC हो सकता है सम्मिलित किया गया.

एक से ज़्यादा ई-सिम के साथ काम करने के लिए, रेडियो HAL का 1.2 या इसके बाद वाला वर्शन होना ज़रूरी है. रेडियो एचएएल वर्शन 1.4 और RadioConfig HAL वर्शन 1.2 की सलाह दी जाती है.

लागू करना

एक से ज़्यादा ई-सिम (इसमें, हटाए जा सकने वाले ईयूआईसीसी या प्रोग्राम किए जा सकने वाले सिम शामिल हैं) के साथ काम करने के लिए, एलपीए को लागू करना होगा EuiccService, जिसे कॉलर के दिए हुए कार्ड आईडी से जुड़ा स्लॉट आईडी मिलता है.

कॉन्टेंट बनाने non_removable_euicc_slots इसमें बताया गया संसाधन arrays.xml पूर्णांकों का कलेक्शन है, जो डिवाइस में बिल्ट-इन के स्लॉट आईडी को दिखाता है eUICC. आपको इस संसाधन के बारे में बताना होगा, ताकि प्लैटफ़ॉर्म यह तय कर सके डाला गया eUICC हटाया जा सकता है या नहीं.

एक से ज़्यादा ई-सिम वाले डिवाइस के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन

एक से ज़्यादा ई-सिम वाले डिवाइस के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन बनाते समय, createForCardId एक ऐसा EuiccManager ऑब्जेक्ट बनाने के लिए EuiccManager में तरीका जिसे दिया गया कार्ड ID. कार्ड आईडी एक पूर्णांक वैल्यू है, जो किसी यूज़र इंटरफ़ेस (यूआईसीसी) की खास तौर पर पहचान करती है या डिवाइस पर किसी eUICC का इस्तेमाल करें.

डिवाइस के डिफ़ॉल्ट eUICC का कार्ड आईडी पाने के लिए, इसका इस्तेमाल करें getCardIdForDefaultEuicc TelephonyManager में तरीका. यह तरीका रिटर्न UNSUPPORTED_CARD_ID अगर रेडियो एचएएल वर्शन 1.2 से कम है और UNINITIALIZED_CARD_ID अगर डिवाइस ने eUICC नहीं पढ़ा है.

आपको यहां से भी कार्ड आईडी मिल सकते हैं getUiccCardsInfo और TelephonyManager में getUiccSlotsInfo (सिस्टम एपीआई) है. getCardId SubscriptionInfo में.

जब किसी 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);

उदाहरण 2: यूआईसीसी की मदद से दोहराएं और EuiccManager को हटाया जा सकने वाला eUICC

// On a device with a built-in eUICC and a removable eUICC, iterate through the UICC cards
// to instantiate an EuiccManager associated with a removable eUICC
TelephonyManager telMan = (TelephonyManager)
        mContext.getSystemService(Context.TELEPHONY_SERVICE);
List<UiccCardInfo> infos = telMan.getUiccCardsInfo();
int removableCardId = -1; // valid cardIds are 0 or greater
for (UiccCardInfo info : infos) {
    if (info.isRemovable()) {
        removableCardId = info.getCardId();
        break;
    }
}
if (removableCardId != -1) {
    EuiccManager euiccMan = (EuiccManager) mContext.getSystemService(Context.EUICC_SERVICE)
            .createForCardId(removableCardId);
}

पुष्टि करें

एओएसपी में एलपीए लागू नहीं किया जाता है और आपको ऐसा करने की उम्मीद नहीं है जिनका एलपीए सभी Android बिल्ड पर उपलब्ध हो. हालांकि, यह ज़रूरी नहीं है कि हर फ़ोन में ई-सिम की सुविधा उपलब्ध हो. इसके लिए इस वजह से, एंड-टू-एंड सीटीएस टेस्ट केस नहीं होते. हालांकि, बेसिक टेस्ट केस एओएसपी में उपलब्ध eUICC एपीआई पक्का करने के लिए Android बिल्ड में मान्य हैं.

आपको यह पक्का करना चाहिए कि बिल्ड, नीचे दिए गए सीटीएस टेस्ट केस में पास हो गए हों (सार्वजनिक तौर पर) एपीआई): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts.

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को लागू करने वाली सभी कंपनियों को, इन-हाउस शिपिंग की सामान्य प्रक्रिया पूरी करनी होगी क्वालिटी अश्योरेंस साइकल का इस्तेमाल करके यह पक्का किया जा सकता है कि लागू की गई सभी सुविधाएं उम्मीद के मुताबिक काम कर रही हैं. इस यह ज़रूरी है कि मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन में सदस्यता की सभी प्रोफ़ाइलों की लिस्टिंग हो उस कंपनी का मालिकाना हक एक ही ऑपरेटर के पास हो, प्रोफ़ाइल डाउनलोड और इंस्टॉल करें, किसी सेवा को चालू करें प्रोफ़ाइल पर स्विच कर सकते हैं, एक प्रोफ़ाइल से दूसरे प्रोफ़ाइल पर जा सकते हैं, और प्रोफ़ाइल मिटा सकते हैं.

अगर आपको एलपीए खुद बनाना है, तो आपको और ज़्यादा सख्त टेस्टिंग हो रही है. आपको मॉडम वेंडर, eUICC चिप या ई-सिम ओएस वेंडर, SM-DP+ वेंडर, और मोबाइल और इंटरनेट सेवा देने वाली कंपनियां, जो समस्याओं को हल करती हैं और आपके एलपीए को आरएसपी आर्किटेक्चर में बनाया गया है. मैन्युअल रूप से टेस्ट करने के लिए, अपरिहार्य. जांच के बेहतरीन कवरेज के लिए, आपको जीएसएमए एसजीपी.23 आरएसपी टेस्ट प्लान.