डिवाइस आइडेंटिफ़ायर

Android 10, इसकी अनुमतियों में बदलाव करता है डिवाइस आइडेंटिफ़ायर की मदद से, सभी डिवाइस आइडेंटिफ़ायर को READ_PRIVILEGED_PHONE_STATE की अनुमति. इससे पहले Android 10, डिवाइस के स्थायी आइडेंटिफ़ायर (IMEI/MEID, IMSI, सिम, और बिल्ड सीरियल) को READ_PHONE_STATE रनटाइम की अनुमति. READ_PRIVILEGED_PHONE_STATE अनुमति सिर्फ़ यह सिर्फ़ उन ऐप्लिकेशन को दिया जाता है जो प्लैटफ़ॉर्म बटन और खास सिस्टम ऐप्लिकेशन का इस्तेमाल करके साइन किए गए हैं.

अनुमति से जुड़ी नई ज़रूरी शर्तों के बारे में ज़्यादा जानकारी यहां मिल सकती है TelephonyManager.java के लिए Javaडॉक पेज और Build.java शामिल हैं.

इस बदलाव से इन एपीआई पर असर पड़ेगा:

  • TelephonyManager#getDeviceId
  • TelephonyManager#getImei
  • TelephonyManager#getMeid
  • TelephonyManager#getSimSerialNumber
  • TelephonyManager#getSubscriberId
  • बिल्ड#getSerial

READ_PRIVILEGED_PHONE_स्टेट की अनुमति के बिना, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन का ऐक्सेस

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

विकल्प ब्यौरा सीमाएं
यूआईसीसी मोबाइल और इंटरनेट सेवा देने वाली कंपनी के खास अधिकार Android प्लैटफ़ॉर्म, यूआईसीसी पर सेव किए गए सर्टिफ़िकेट लोड करता है और अनुदान देता है खास को कॉल करने के लिए इन सर्टिफ़िकेट से साइन किए गए ऐप्लिकेशन को ऐक्सेस करने की अनुमति तरीकों का इस्तेमाल करना होगा. मोबाइल और इंटरनेट सेवा देने वाली लेगसी कंपनियों में पहले से काफ़ी ज़्यादा सिम इस्तेमाल होते हैं. हालांकि, यह आंकड़ा यह नहीं है आसानी से अपडेट हो सकता है. साथ ही, कैरियर जिनके पास नए सिम कार्ड में सिम के सर्टिफ़िकेट अपडेट करने में मदद मिलती है.
OEM की अनुमति वाली सूची डिवाइस देने के लिए, OEM OP_READ_DEVICE_IDENTIFIER का इस्तेमाल कर सकते हैं आइडेंटिफ़ायर की जगह, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन को अनुमति मिली है. मोबाइल और इंटरनेट सेवा देने वाली सभी कंपनियों के लिए, इस समाधान को बढ़ाया नहीं जा सकता.
टाइप ऐलोकेशन कोड (टीएसी) इसका इस्तेमाल करें getTypeAllocationCode तरीका, जिसमें बताया गया है Android 10 का इस्तेमाल करके, डिवाइस के मैन्युफ़ैक्चरर और मॉडल से जुड़े टीएसी को बिना अनुमति के सार्वजनिक किया जा सकता है जानकारी. किसी खास डिवाइस की पहचान करने के लिए, टीएसी में दी गई जानकारी काफ़ी नहीं है.
MSISDN मोबाइल और इंटरनेट सेवा देने वाली कंपनियां, इसके तहत उपलब्ध फ़ोन नंबर (MSISDN) का इस्तेमाल कर सकती हैं TelephonyManager के पास PHONE की अनुमति है ग्रुप में जोड़ सकते हैं. मोबाइल और इंटरनेट सेवा देने वाली कंपनियों को इसमें ज़्यादा निवेश करने की ज़रूरत होती है. मैप करने वाली सेवा देने वाली कंपनियां IMSI का इस्तेमाल करने वाली अपनी नेटवर्क कुंजियों के लिए, MSISDN पर स्विच करने के लिए तकनीकी संसाधन.

मोबाइल और इंटरनेट सेवा देने वाली कंपनी के सभी ऐप्लिकेशन, अपडेट करके डिवाइस आइडेंटिफ़ायर ऐक्सेस कर सकते हैं इस CarrierConfig.xml फ़ाइल के साइनिंग सर्टिफ़िकेट हैश मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन. जब मोबाइल और इंटरनेट सेवा देने वाली कंपनी का ऐप्लिकेशन, खास अधिकारों वाले ऐप्लिकेशन पढ़ने के लिए किसी तरीके को कॉल करता है यह प्लैटफ़ॉर्म, ऐप्लिकेशन के साइनिंग सर्टिफ़िकेट से मेल खाता है. हैश (SHA-1 या SHA-256 के हस्ताक्षर) CarrierConfig.xml फ़ाइल. अगर कोई मिलान मिलता है, तो अनुरोध किए गए जानकारी दिखाई जाती है. अगर कोई मिलान नहीं मिलता है, तो सुरक्षा से जुड़ा एक अपवाद वापस किया गया.

इस समाधान को लागू करने के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनियों को यह तरीका अपनाना होगा:

  1. अपडेट करें CarrierConfig.xml, जिस पर मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन और पैच सबमिट करें.
  2. OEM से अनुरोध करें कि वे अपने बिल्ड को QPR1+ (सुझाया गया) के साथ अपडेट करें या ये ज़रूरी प्लैटफ़ॉर्म पैच और वह पैच जिसमें शामिल है ऊपर चरण 1 से CarrierConfig.xml फ़ाइल अपडेट की गई.

लागू करना

अनुमति वाली सूची में बदलाव करें उन खास लोगों को READ_PRIVILEGED_PHONE_STATE अनुमति ऐसे ऐप्लिकेशन जिनके लिए डिवाइस आइडेंटिफ़ायर के ऐक्सेस की ज़रूरत होती है.

अनुमति वाली सूची में शामिल करने के बारे में ज़्यादा जानने के लिए, उन लोगों या संगठनों को अनुमति मिली है जिनके पास अनुमति है अनुमति वाली सूची में शामिल करना.

जिन एपीआई पर असर पड़ा है उन्हें शुरू करने के लिए, ऐप्लिकेशन को इनमें से किसी एक शर्त को पूरा करना होगा ज़रूरतें:

इनमें से किसी भी शर्त को पूरा न करने वाले ऐप्लिकेशन को ये शर्तें पूरी करनी होती हैं व्यवहार:

  • अगर ऐप्लिकेशन प्री-क्यू को टारगेट कर रहा है और उसमें READ_PHONE_STATE की अनुमति दी गई, SecurityException ट्रिगर होता है. यह मौजूदा प्री-क्यू व्यवहार है, क्योंकि यह अनुमति इन एपीआई को शुरू करने के लिए ज़रूरी है.
  • अगर ऐप्लिकेशन, प्री-Q को टारगेट कर रहा है और उसमें READ_PHONE_STATE की अनुमति दी गई है, तो इसे TelephonyManager के सभी एपीआई और Build.UNKNOWN के लिए, शून्य वैल्यू उपलब्ध है Build#getSerial तरीके के लिए.
  • अगर ऐप्लिकेशन Android 10 या उसके बाद के वर्शन को टारगेट करता है और किसी भी नए दस्तावेज़ से मेल नहीं खाता शर्तों को पूरा करते हैं, तो इसे Securityअपवाद मिलता है.

पुष्टि और जांच करना

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

नीचे दिए गए सीटीएस टेस्ट सिर्फ़ इस सुविधा के लिए हैं.

cts-tradefed run cts -m CtsCarrierApiTestCases -t
    android.carrierapi.cts.CarrierApiTest

cts-tradefed run cts -m CtsTelephonyTestCases -t
    android.telephony.cts.TelephonyManagerTest

cts-tradefed run cts -m CtsTelephony3TestCases

cts-tradefed run cts -m CtsPermissionTestCases -t
    android.permission.cts.TelephonyManagerPermissionTest

cts-tradefed run cts -m CtsDevicePolicyManagerTestCases -t
    com.android.cts.devicepolicy.DeviceOwnerTest#testDeviceOwnerCanGetDeviceIdentifiers

cts-tradefed run cts -m CtsDevicePolicyManagerTestCases -t
    com.android.cts.devicepolicy.ManagedProfileTest#testProfileOwnerCanGetDeviceIdentifiers

cts-tradefed run cts -m CtsDevicePolicyManagerTestCases -t
    com.android.cts.devicepolicy.ManagedProfileTest#testProfileOwnerCannotGetDeviceIdentifiersWithoutPermission

cts-tradefed run cts -m CtsDevicePolicyManagerTestCases -t
    com.android.cts.devicepolicy.DeviceOwnerTest#testDeviceOwnerCannotGetDeviceIdentifiersWithoutPermission

अक्सर पूछे जाने वाले सवाल

किसी दिए गए (एमसीसी, एमएनसी) के लिए CarrierConfig.xml में कितने ऐप्लिकेशन को अनुमति वाली सूची में शामिल किया जा सकता है?

कलेक्शन में सर्टिफ़िकेट हैश की संख्या की कोई सीमा नहीं है.

किसी ऐप्लिकेशन को अनुमति वाली सूची में शामिल करने के लिए, मुझे CarrierConfig.xml में किन CarrierConfig पैरामीटर का इस्तेमाल करना होगा?

विशिष्ट आपके कॉन्फ़िगर किए जा रहे एओएसपी विकल्पों में से CarrierConfig.xml:

<string-array name="carrier_certificate_string_array" num="2">
    <item value="BF02262E5EF59FDD53E57059082F1A7914F284B"/>
    <item value="9F3868A3E1DD19A5311D511A60CF94D975A344B"/>
</string-array>

क्या कोई ऐसा बुनियादी CarrierConfig टेंप्लेट है जिसका इस्तेमाल किया जा सकता है?

नीचे दिए गए टेंप्लेट का इस्तेमाल करें. इसे मिलते-जुलते एसेट का इस्तेमाल करें.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<carrier_config>
    <string-array name="carrier_certificate_string_array"
num="1">
        <item value="CERTIFICATE_HASH_HERE"/>
    </string-array>
</carrier_config>

डिवाइस आइडेंटिफ़ायर ऐक्सेस करने के लिए, क्या मोबाइल और इंटरनेट सेवा देने वाली कंपनी का सिम, डिवाइस में होना ज़रूरी है?

CarrierConfig.xml का इस्तेमाल, इनके आधार पर तय किया जाता है सिम कार्ड में अभी लगा हुआ है. इसका मतलब है कि अगर मोबाइल और इंटरनेट सेवा देने वाली कंपनी X का ऐप्लिकेशन मोबाइल और इंटरनेट सेवा देने वाली कंपनी Y का सिम डालने के दौरान, डिवाइस को ऐक्सेस करने की अनुमति पाएं. हालांकि, डिवाइस को हैश के लिए मैच करता है और सुरक्षा का अपवाद दिखाता है.

एक से ज़्यादा सिम वाले डिवाइस पर, मोबाइल और इंटरनेट सेवा देने वाली कंपनी #1 के पास सिर्फ़ सिम #1 और इसके साथ काम करता है.

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

साइनिंग सर्टिफ़िकेट को हैश में बदलने से पहले, उन्हें हैश में बदलना CarrierConfig.xml, ये काम करें:

  1. इसका इस्तेमाल करके, साइनिंग सर्टिफ़िकेट के हस्ताक्षर को बाइट कलेक्शन में बदलें toByteArray.
  2. का उपयोग करें बाइट अरे को हैश में बदलने के लिए MessageDigest बाइट[] प्रकार.
  3. हैश को byte[] से हेक्स स्ट्रिंग फ़ॉर्मैट में बदलें. उदाहरण के लिए, IccUtils.java देखें.

    List<String> certHashes = new ArrayList<>();
    PackageInfo pInfo; // Carrier app PackageInfo
    MessageDigest md =
    MessageDigest.getInstance("SHA-256");
    for (Signature signature : pInfo.signatures) {
        certHashes.add(bytesToHexString(md.digest(signature.toByteArray()));
    }
    
  4. अगर certHashes, वैल्यू के साथ 2 साइज़ का कलेक्शन है 12345 और 54321 में से, इन्हें कैरियर कॉन्फ़िगरेशन फ़ाइल.

    <string-array name="carrier_certificate_string_array" num="2">
        <item value="12345"/>
        <item value="54321"/>
    </string-array>