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
फ़ाइल. अगर कोई मिलान मिलता है, तो अनुरोध किए गए
जानकारी दिखाई जाती है. अगर कोई मिलान नहीं मिलता है, तो सुरक्षा से जुड़ा एक अपवाद
वापस किया गया.
इस समाधान को लागू करने के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनियों को यह तरीका अपनाना होगा:
- अपडेट करें
CarrierConfig.xml
, जिस पर मोबाइल और इंटरनेट सेवा देने वाली कंपनी के ऐप्लिकेशन और पैच सबमिट करें. - OEM से अनुरोध करें कि वे अपने बिल्ड को QPR1+ (सुझाया गया) के साथ अपडेट करें या ये
ज़रूरी प्लैटफ़ॉर्म पैच और वह पैच जिसमें शामिल है
ऊपर चरण 1 से
CarrierConfig.xml
फ़ाइल अपडेट की गई.
लागू करना
अनुमति वाली सूची में बदलाव करें
उन खास लोगों को READ_PRIVILEGED_PHONE_STATE
अनुमति
ऐसे ऐप्लिकेशन जिनके लिए डिवाइस आइडेंटिफ़ायर के ऐक्सेस की ज़रूरत होती है.
अनुमति वाली सूची में शामिल करने के बारे में ज़्यादा जानने के लिए, उन लोगों या संगठनों को अनुमति मिली है जिनके पास अनुमति है अनुमति वाली सूची में शामिल करना.
जिन एपीआई पर असर पड़ा है उन्हें शुरू करने के लिए, ऐप्लिकेशन को इनमें से किसी एक शर्त को पूरा करना होगा ज़रूरतें:
- अगर ऐप्लिकेशन पहले से लोड किया गया खास अधिकार वाला ऐप्लिकेशन है, तो उसे
READ_PRIVILEGED_PHONE_STATE
अनुमति का एलान इसमें किया गया AndroidManifest.xml. ऐप्लिकेशन को अनुमति वाली सूची में शामिल करना भी ज़रूरी है नहीं कर सकते. - Google Play से डिलीवर किए गए ऐप्लिकेशन के लिए, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के खास अधिकार होने ज़रूरी हैं. UICC मोबाइल और इंटरनेट सेवा देने वाली कंपनी पर, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के अधिकार देने के बारे में ज़्यादा जानें खास अधिकार पेज.
- डिवाइस या प्रोफ़ाइल के मालिक का ऐप्लिकेशन, जिसे
READ_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
, ये काम करें:
- इसका इस्तेमाल करके, साइनिंग सर्टिफ़िकेट के हस्ताक्षर को बाइट कलेक्शन में बदलें
toByteArray
. - का उपयोग करें
बाइट अरे को हैश में बदलने के लिए
MessageDigest
बाइट[] प्रकार. -
हैश को 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())); }
अगर
certHashes
, वैल्यू के साथ2
साइज़ का कलेक्शन है12345
और54321
में से, इन्हें कैरियर कॉन्फ़िगरेशन फ़ाइल.<string-array name="carrier_certificate_string_array" num="2"> <item value="12345"/> <item value="54321"/> </string-array>