Android 10
korunmasını sağlamak için yalnızca cihaz tanımlayıcılarını
READ_PRIVILEGED_PHONE_STATE
izni. Şu tarihten önce:
Android 10, kalıcı cihaz tanımlayıcıları
(IMEI/MEID, IMSI, SIM ve derleme serileri)
READ_PHONE_STATE
çalışma zamanında istenen izin.
READ_PRIVILEGED_PHONE_STATE
izni yalnızca
platform anahtarıyla imzalanan uygulamalara ve ayrıcalıklı sistem uygulamalarına verilir.
Yeni izin şartlarıyla ilgili daha fazla bilgiyi şu adreste bulabilirsiniz: TelephonyManager.java için Javadoc sayfaları ve Build.java.
Bu değişiklik aşağıdaki API'leri etkiler:
- Telefon Yöneticisi#getDeviceId
- Telefon Yöneticisi#getImei
- Telefon Yöneticisi#getMeid
- Telefon Yöneticisi#getSimSerialNumber
- Telefon Yöneticisi#getAboneKimliği
- Derleme#getSerial
READ_PRIVILEGED_PHONE_STATE izni olmayan operatör uygulamalarına erişim
Şunlar için uygun olmayan önceden yüklenmiş operatör uygulamaları:
READ_PRIVILEGED_PHONE_STATE
izninin aşağıdaki tabloda yer alan seçeneklerden birini uygulayabileceğini lütfen unutmayın.
Seçenek | Açıklama | Sınırlamalar |
---|---|---|
UICC operatör ayrıcalıkları | Android platformu, UICC'de depolanan sertifikaları yükler ve bu sertifikalarla imzalanan uygulamaların özel çağrı yapma izni yöntemlerine göz atın. | Eski operatörlerin büyük ve yerleşik bir SIM nüfusu vardır. kolayca güncelleyebilirsiniz. Ayrıca, yeni sahiplik hakları SIM'ler (örneğin, MNO'lardan verilmiş SIM'lere sahip sanal mobil şebeke operatörleri) SIM'lerdeki sertifikaları güncelle. |
OEM izin verilenler listesine ekleme | OEM'ler, cihaz sağlamak için OP_READ_DEVICE_IDENTIFIER kullanabilir
izin verilenler listesindeki operatör uygulamalarına tanımlayıcılar. |
Bu çözüm tüm operatörler için ölçeklenebilir değildir. |
Tür tahsis kodu (TAC) | Şunu kullanın:
getTypeAllocationCode
yönteminde kullanılan
Android 10: Üretici ve modeli döndüren TAC'yi gösterir
bilgisi. |
TAC'deki bilgiler, belirli bir cihazı tanımlamak için yeterli değil. |
MSISDN | Operatörler şu telefon numarasını (MSISDN) kullanabilir:
PHONE izni olan TelephonyManager
arka uç sistemlerinde IMEI'yi aramak için kullanabilirsiniz. |
Bu, operatörlere ciddi yatırımlar yapmayı gerektiriyor. Harita yapan operatörler IMSI kullanan ağ anahtarları için MSISDN'ye geçmek için teknik kaynaklara bakın. |
Tüm operatör uygulamaları, güncelleme yaparak cihaz tanımlayıcılarına erişebilir
şu imza sertifikası karmasına sahip CarrierConfig.xml
dosyası:
operatör uygulaması. Operatör uygulaması, ayrıcalıklı okumayı yapmak için bir yöntem çağırdığında
kullanıyorsanız platform, uygulamanın imza sertifikasının bir eşleşmesini
karma (SHA-1 veya SHA-256 imzası) içeren
CarrierConfig.xml
dosyası. Bir eşleşme bulunursa istenen
bilgi döndürülür. Eşleşme bulunmazsa güvenlik istisnası
geri döndü.
Operatörler bu çözümü uygulamak için aşağıdaki adımları uygulamalıdır:
- Güncelleme
CarrierConfig.xml
operatör uygulaması ve yama gönderin. - OEM'lerden derlemelerini QPR1+ ile güncellemelerini isteyin (önerilir) VEYA
gerekli platform yamaları ve
yukarıdaki 1. adımda kopyaladığınız
CarrierConfig.xml
dosyasını güncelledi.
Uygulama
Şuna izin vermek için ayrıcalıklı izin izin verilenler listenizi güncelleyin:
Ayrıcalıklı olanlar için READ_PRIVILEGED_PHONE_STATE
izin
cihaz tanımlayıcılarına erişim gerektiren uygulamalar.
İzin verilenler listesine ekleme hakkında daha fazla bilgi edinmek için Ayrıcalıklı İzin Verilenler Listesine Ekleme.
Etkilenen API'leri çağırmak için uygulamanın aşağıdakilerden birini karşılaması gerekir koşullar:
- Uygulama önceden yüklenmiş ayrıcalıklı bir uygulamaysa
Şurada
READ_PRIVILEGED_PHONE_STATE
izin beyan edildi: AndroidManifest.xml. Uygulamanın da izin verilenler listesine eklenmesi gerekir bu ayrıcalıklı izni iptal eder. - Google Play üzerinden teslim edilen uygulamalar operatör ayrıcalıklarına sahip olmalıdır. UICC Operatörü'nde operatör ayrıcalıkları verme hakkında daha fazla bilgi Ayrıcalıklar sayfasına gidin.
- Bir cihaz veya profil sahibi uygulaması için
READ_PHONE_STATE
izni.
Bu şartlardan hiçbirini karşılamayan bir uygulama şu özelliklere sahiptir: davranış:
- Uygulama, Q öncesini hedefliyorsa ve
READ_PHONE_STATE
izin verildi,SecurityException
tetiklenir. Bu, söz konusu izin nedeniyle kaliteden önceki mevcut davranıştır API'leri çağırmak için gereklidir. - Uygulama, Q öncesini hedefliyorsa ve
READ_PHONE_STATE
izni verildi, Tüm TelephonyManager API'leri veBuild.UNKNOWN
için null değerBuild#getSerial
yöntemi için. - Uygulama Android 10 veya sonraki sürümleri hedefliyorsa ve yeni gereksinimlerin hiçbirine gerekli olduğunda bir SecurityException alır.
Doğrulama ve test etme
Uyumluluk Test Paketi (CTS), beklenen cihaz tanımlayıcısını doğrulayan testleri içerir özellikleri, cihaz özellikleri ve özellikleri olan uygulamalar için profil sahipleri ve cihaza erişmesi beklenen uygulamalar tanımlayıcılar.
Aşağıdaki CTS testleri bu özelliğe özgüdür.
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
SSS
Belirli bir (MM, MNC) için CarrierConfig.xml
içinde kaç uygulama izin verilenler listesine eklenebilir?
Diziye dahil edilen sertifika karmalarının sayısı için bir sınır yoktur.
Bir uygulamanın izin verilenler listesine eklenmesi için CarrierConfig.xml
ürününde hangi CarrierConfig parametrelerini kullanmam gerekir?
Aşağıdaki üst düzey yapılandırma öğesini kullanın:
Yapılandırmakta olduğunuz AOSP seçeneklerinden CarrierConfig.xml
:
<string-array name="carrier_certificate_string_array" num="2"> <item value="BF02262E5EF59FDD53E57059082F1A7914F284B"/> <item value="9F3868A3E1DD19A5311D511A60CF94D975A344B"/> </string-array>
Kullanabileceğim temel bir CarrierConfig şablonu var mı?
Aşağıdaki şablonu kullanın. Bu, emin olun.
<?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>
Cihaz tanımlayıcılarına erişmek için cihazda operatörün SIM'inin olması gerekir mi?
Kullanılan CarrierConfig.xml
,
Şu anda takılı olan SIM. Bu, X operatörünün uygulamasının uygulaması
Y operatörünün SIM'i takılıyken erişim ayrıcalıkları al, cihaz bulamaz
karma için bir eşleşme bulunur ve bir güvenlik istisnası döndürür.
Çoklu SIM kart kullanılan cihazlarda, 1 numaralı operatör yalnızca SIM 1 ve ve bu böyle devam eder.
Operatörler bir uygulamanın imzalama sertifikasını karmaya nasıl dönüştürür?
İmzalama sertifikalarını
CarrierConfig.xml
, aşağıdakileri yapın:
- Aşağıdaki komut dosyasını kullanarak imza sertifikasının imzasını bir bayt dizisine dönüştürün:
toByteArray
değerleridir. - kullan
Bayt dizisini bir karmaya dönüştürmek için
MessageDigest
bayt[] olduğunu unutmayın. -
Bayt[] taki karmayı onaltılık dize biçimine dönüştürün. Örneğin,
IccUtils.java
adlı makaleyi inceleyin.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
, değeri olan2
boyutunda bir diziyse (12345
ve54321
) aşağıdakini operatör yapılandırma dosyasını kullanın.<string-array name="carrier_certificate_string_array" num="2"> <item value="12345"/> <item value="54321"/> </string-array>