Yerleşik SIM (eSIM veya eUICC) teknolojisi, mobil kullanıcıların şunları yapmasına olanak tanır: bir operatör profili indirin ve fiziksel SIM kart. GSMA tarafından desteklenen global bir spesifikasyondur ve herhangi bir mobil cihaz için uzaktan SIM temel hazırlığı (RSP) sağlayabilir. Android'i kullanmaya başlama 9 ile birlikte Android çerçevesi, eSIM'e erişme ve eSIM'i abonelik profillerini yönetme. Bu eUICC'ler API'ler, üçüncü tarafların kendi operatör uygulamalarını ve yerel profillerini geliştirmelerine olanak tanır. asistanlar (LPA'lar) kullanılabilir.
LPA, Android derleme görüntüsü eSIM'deki profillerin yönetimi genellikle SM-DP+ (uzaktan hizmet) ile eUICC çipini hazırlar, depolar ve cihazlara gönderir.) LPA APK'sı isteğe bağlı olarak Son kullanıcının tüm yerleşik abonelikleri yönetebileceği merkezi bir yer sağlaması profil. Android çerçevesi, en iyi uygulamaları otomatik olarak keşfedip kullanılabilir LPA'yı kullanır ve tüm eUICC işlemlerini bir LPA örneği üzerinden yönlendirir.
Şekil 1. Basitleştirilmiş RSP mimarisi
Operatör uygulaması oluşturmak isteyen mobil ağ operatörleri
API’lerin
EuiccManager
,
üst düzey profil yönetimi işlemleri sağlar; örneğin,
downloadSubscription()
, switchToSubscription()
ve
deleteSubscription()
.
Kendi LPA sistem uygulamasını oluşturmak isteyen bir cihaz OEM'siyseniz
uzat
EuiccService
Android çerçevesinin LPA hizmetlerinize bağlanmasını sağlayın. Ayrıca,
API'leri
EuiccCardManager
GSMA RSP 2.0 sürümüne dayalı ES10x işlevleri sağlayan.
Bu işlevler, eUICC çipine aşağıdaki gibi komutları göndermek için kullanılır:
prepareDownload()
, loadBoundProfilePackage()
, retrieveNotificationList()
,
ve resetMemory()
.
Şuradaki API'ler:
EuiccManager
düzgün uygulanmış bir LPA uygulamasının çalışmasını ve çağrıyı yapan kişinin
EuiccCardManager
API'ler LPA olmalıdır. Bu, Android çerçevesi tarafından zorunlu kılınır.
Android 10 veya sonraki sürümleri çalıştıran cihazlar birden fazla eSIM'e sahip cihazlar. Daha fazla bilgi için bkz. Birden fazla eSIM'i destekleme.
Operatör uygulaması oluştur
Android 9'daki eUICC API'leri, mobil şebeke operatörlerini Android'de kendi işletmelerini profil oluşturabilirsiniz. Buna abonelik profillerini indirme ve silme de dahildir operatöre ait olan ve operatöre ait bir profile geçmenin yanı sıra
Kullanıcı Adı Yöneticisi
EuiccManager
, uygulamaların
LPA. İndirme, silme ve geçiş yapan operatör uygulamaları da buna dahildir
operatöre ait aboneliklerin sayısı. LUI sistem uygulaması da dahildir.
Tüm yerleşik aboneliklerin yönetilmesi için merkezi bir konum/kullanıcı arayüzü sağlar ve
EuiccService
sağlayan uygulamadan farklı bir uygulama olabilir.
Bir operatör uygulamasının, herkese açık API'leri kullanmak için öncelikle
EuiccManager
- Context#getSystemService
:
EuiccManager mgr = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
Herhangi bir işlem gerçekleştirmeden önce cihazda eSIM'in desteklenip desteklenmediğini kontrol etmeniz gerekir
eSIM işlemleri. EuiccManager#isEnabled()
,true
android.hardware.telephony.euicc
özelliği tanımlanmış ve bir LPA paketi
gösterir.
if (mgr == null || !mgr.isEnabled()) {
return;
}
eUICC donanımı ve eSIM OS sürümü hakkında bilgi almak için:
EuiccInfo info = mgr.getEuiccInfo();
String osVer = info.getOsVersion();
downloadSubscription()
ve switchToSubscription()
gibi birçok API
Tamamlanması saniyeler, hatta dakikalar sürebileceğinden PendingIntent
geri çağırma.
PendingIntent
,
EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_
alan,
rastgele bir ayrıntılı sonuç kodunun yanı sıra çerçeve tanımlı hata kodları ve
LPA'dan EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE
olarak yayılır ve
günlük kaydı/hata ayıklama amacıyla takip edilecek operatör uygulaması PendingIntent
geri çağırma, BroadcastReceiver
olmalıdır.
İndirilebilir belirli bir aboneliği ( etkinleştirme kodu veya QR kodu kullanabilirsiniz.
// 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
içindeki izni tanımlayın ve kullanın:
<permission android:protectionLevel="signature" android:name="com.your.company.lpa.permission.BROADCAST" />
<uses-permission android:name="com.your.company.lpa.permission.BROADCAST"/>
Belirtilen abonelik kimliğiyle bir aboneliğe geçiş yapmak için:
// 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
API'lerinin ve kod örneklerinin tam listesi için şu sayfaya göz atın:
eUICC API'leri.
Çözülebilir hatalar
Sistemin eSIM işlemini tamamlayamadığı bazı durumlar olabilir
kullanıcı tarafından çözülebilir. Örneğin, downloadSubscription
profil meta verileri bir operatör onay kodunun belirtildiğini gösteriyorsa başarısız olabilir
gereklidir. Operatör uygulamasında operatör varsa switchToSubscription
de başarısız olabilir
ayrıcalıkları (yani profilin sahibi olan operatör)
mevcut durumda etkinleştirilmiş profil üzerinde operatör ayrıcalıklarına sahip değil ve bu nedenle
kullanıcı izni gereklidir.
Bu durumlarda, arayanın geri araması
EuiccManager#EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR
Geri çağırma
Intent
, arayanın aktardığı dahili ekstralar içeriyor
EuiccManager#startResolutionActivity
,
LUI üzerinden bir çözüm
talep edebilirsiniz. Onay kodunu kullanarak
yine bir örnek düşünelim,
EuiccManager#startResolutionActivity
kullanıcının onay kodu girmesine izin veren bir kullanıcı arayüzü ekranını tetikleme;
Kod girildikten sonra indirme işlemi devam ettirilir. Bu yaklaşım
operatör uygulamasına kullanıcı arayüzünün ne zaman gösterileceği konusunda tam kontrol sağlar
LPA/LUI, kullanıcı tarafından kurtarılabilir öğelerin yeni işlenmesini eklemek için genişletilebilir bir yöntem
ve sorunlarınızı daha hızlı bir şekilde anlamanızı sağlar.
Android 9, bu çözümlenebilir hataları
EuiccService
LUI'nin ele alması gereken:
/**
* 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";
Operatör ayrıcalıkları
EuiccManager
adlı kendi operatör uygulamanızı geliştiren bir operatörseniz
profilleri bir cihaza indirmek için, profiliniz operatörü içermelidir.
operatör uygulamanıza karşılık gelen ayrıcalık kurallarını değiştirebilirsiniz. Bu
çünkü farklı operatörlere ait abonelik profilleri bir arada
eUICC'sini sağlamalı ve her operatör uygulamasının yalnızca
operatöre ait profil oluşturabilirsiniz. Örneğin, A operatörü şunları yapamaz:
B operatörüne ait bir profili indirme, etkinleştirme veya devre dışı bırakma.
Android, bir profile yalnızca sahibinin erişebildiğinden emin olmak için aşağıdakileri yapan bir mekanizma kullanır:
profil sahibinin uygulamasına (yani operatör uygulamasına) özel ayrıcalıklar tanıyabilir. İlgili içeriği oluşturmak için kullanılan
Android platformu, profilin erişim kuralı dosyasında depolanan sertifikaları yükler
(ARF) sunar ve bu sertifikalarla imzalanan uygulamaların arama yapmasına izin verir
EuiccManager
API'ye. Genel süreç aşağıda açıklanmıştır:
- Operatör, operatör uygulaması APK'sını imzalar; "the" apksigner araç, ortak anahtar sertifikasını APK'ya ekler.
Operatör/SM-DP+, bir profili ve ARF'yi de içeren meta verilerini hazırlar içerir:
- Operatör uygulamasının ortak anahtar sertifikasının imzası (SHA-1 veya SHA-256) (zorunlu)
- Kargo şirketinin paket adı (kesinlikle önerilir)
Operatör uygulaması,
EuiccManager
API ile bir eUICC işlemi gerçekleştirmeye çalışıyor.Android platformu, arayan uygulamanın SHA-1 veya SHA-256 karmasını doğrular. sertifika yetkilisinden alınan sertifikanın imzasıyla hedef profilin ARF'si. Operatör uygulamasının paket adı arayan uygulamanın paket adıyla da aynı olmalıdır.
İmza ve paket adı (varsa) doğrulandıktan sonra arayan uygulamasına hedef profil üzerinden operatör ayrıcalığı verildi.
Profil meta verileri profilin dışında da kullanılabileceğinden (böylece LPA, profil oluşturulmadan önce SM-DP+'dan profil meta verilerini alabilir ISD-R'den indirilmiş olması ya da profil devre dışı bırakıldığında ISD-R'den alması gerekir. profilde olduğu gibi operatör ayrıcalığı kuralı vardır.
eUICC OS ve SM-DP+, profilde özel bir etiketi (BF76
) desteklemelidir
meta verilerdir. Etiket içeriği, döndürülen operatör ayrıcalığı kurallarıyla aynı olmalıdır
tarafından tanımlanan erişim kuralı applet'ı (ARA) tarafından
UICC Operatörü Ayrıcalıkları:
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
}
}
Uygulama imzalama hakkında daha fazla bilgi için bkz. Uygulamanızı imzalayın. Operatör ayrıcalıklarıyla ilgili ayrıntılar için UICC Operatörü Ayrıcalıkları.
Yerel profil asistanı uygulaması oluşturun
Cihaz üreticileri kendi yerel profil asistanlarını (LPA) kullanabilir. Bunlar her kullanıcının en iyi uygulamaları paylaşacağız. Aşağıdaki bölümlerde genel hatlarıyla bir LPA uygulaması yapma ve bunu Android sistemiyle entegre etme.
Donanım/modem gereksinimleri
eUICC çipindeki LPA ve eSIM en az GSMA RSP'yi desteklemelidir (Uzaktan Kumanda SIM Temel Hazırlığı) 2.0 veya 2.2 sürümü. Ayrıca SM-DP+ ve SM-DS'yi de kullanmayı planlamalısınız. eşleşen bir RSP sürümüne sahip sunucular. Ayrıntılı RSP mimarisi için GSMA SGP.21 RSP Mimari Spesifikasyonu.
Buna ek olarak, Android'deki eUICC API'leriyle entegrasyon 9, cihaz modemi terminal özelliklerini göndermelidir Kodlanmış eUICC özellikleri desteğiyle (yerel profil yönetimi ve profil indirme). Ayrıca aşağıdaki yöntemlerin uygulanması gerekir:
- IRadio HAL v1.1:
setSimPower
IRadio HAL v1.2:
getIccCardStatus
IRadioConfig HAL 1.0 sürümü:
getSimSlotsStatus
IRadioConfig AIDL 1.0 sürümü:
getAllowedCarriers
Google LPA'nın, yalnızca izin verilen operatör için eSIM indirme veya aktarma işlemlerine izin vermesi için operatör kilit durumunu bilmesi gerekir. Aksi takdirde, kullanıcılar bir SIM indirip aktararak daha sonra cihazın operatör tarafından farklı bir operatöre kilitlendiğini fark edebilirler.
Tedarikçi firmalar veya OEM'ler IRadioSim.getAllowedCarriers()HAL API'yi uygulamalıdır.
RIL / Modem tedarikçisi, cihazın IRadioSimResponse.getAllowedCarriersResponse()HAL API'sının bir parçası olarak kilitlendiği operatörün kilit durumunu ve operatör kimliğini girmelidir.
Modem, eSIM'i varsayılan başlatma profilindeki açık tutun.
Android 10 çalıştıran cihazlarda kaldırılamayan eUICC
alan kimlik dizisi tanımlanmalıdır. Örneğin, bkz.
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>
Modem gereksinimlerinin tam listesi için bkz. eSIM Desteği için Modem Gereksinimleri.
Euicc Hizmeti
Bir LPA iki ayrı bileşenden oluşur (her ikisi de aynı APK): LPA arka ucu ve LPA kullanıcı arayüzü veya LUI.
LPA arka ucunu uygulamak için
EuiccService
ve bu hizmeti manifest dosyanızda beyan edin. Hizmet,
android.permission.BIND_EUICC_SERVICE
sistem iznini kullanarak yalnızca
bunun nasıl bağlanabileceğini konuşalım. Hizmet, aynı zamanda
android.service.euicc.EuiccService
işlemi Niyetin önceliği
filtrenin sıfır dışında bir değere ayarlanması gerekir.
cihazda bulunması gerekir. Örnek:
<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 çerçevesi dahili olarak etkin LPA'yı belirler ve
ve Android eUICC API'lerini desteklemek için gerektiği gibi. PackageManager
şunun için sorgulandı:
android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS
izni olan tüm uygulamalar,
Bu değer, android.service.euicc.EuiccService
işlemi için bir hizmet belirtir.
En yüksek önceliğe sahip hizmet seçilir. Hizmet bulunamazsa LPA
desteği devre dışı bırakıldı.
LUI'yi uygulamak için aşağıdaki işlemlerle ilgili bir etkinlik sağlamanız gerekir:
android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS
android.service.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION
Hizmette olduğu gibi, her etkinlik için aşağıdaki bilgilerin sağlanması zorunludur:
android.permission.BIND_EUICC_SERVICE
sistem izni. Her birinin
intent filtresini seçtikten sonra,
android.service.euicc.category.EUICC_UI
kategorisi ve sıfır olmayan bir öncelik.
Bu etkinliklere ilişkin uygulamaları seçmek için benzer bir mantık kullanılır.
proje yaşam döngüsü boyunca
EuiccService
.
Örnek:
<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>
Bu, söz konusu ekranları uygulayan kullanıcı arayüzünün farklı bir ağdan gelebileceği anlamına gelir.
APK'yı uygulayan
EuiccService
.
Tek bir APK'ya mı yoksa birden fazla APK'ya mı (örneğin,
EuiccService
ve LUI etkinlikleri sağlayan) bir tasarım seçimidir.
EuiccCardYöneticisi
EuiccCardManager
, eSIM çipiyle iletişim kurmak için kullanılan arayüzdür. Google
ES10 işlevleri sağlar (GSMA RSP spesifikasyonunda açıklandığı gibi) ve
hem de alt düzey APDU istek/yanıt komutlarını ve ASN.1 ayrıştırma sürecini destekler.
EuiccCardManager
bir sistem API'sidir ve yalnızca sistem ayrıcalığı olan kullanıcılar tarafından çağrılabilir
Şekil 2. Hem operatör uygulaması hem de LPA, Euicc API'lerini kullanır
EuiccCardManager
üzerinden sağlanan profil işlemi API'leri, çağrıyı yapanın
LPA'ya dokunun. Bu, Android çerçevesi tarafından zorunlu kılınır. Yani, arayan
EuiccService
öğesini uzatmalı ve manifest dosyanızda açıklandığı şekilde beyan edilmelidir:
geri dönüp bakarsınız.
EuiccManager
uygulamasına benzer şekilde, EuiccCardManager
API'lerini kullanmak için LPA'nız
önce şununla EuiccCardManager
örneğini al:
Context#getSystemService
:
EuiccCardManager cardMgr = (EuiccCardManager) context.getSystemService(Context.EUICC_CARD_SERVICE);
Sonra, eUICC'deki tüm profilleri almak için:
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
dahili olarak EuiccCardController
öğesine bağlanır (
telefon işlemi) AIDL arayüzü ve her EuiccCardManager
yöntemi üzerinden
farklı ve özel bir AIDL aracılığıyla telefon işleminden geri arama alır
arayüzü. EuiccCardManager
API'lerini kullanırken çağrı yapanın (LPA) şunu sağlaması gerekir:
Executor
geri çağırma işlevinin çağrıldığı nesne. Bu Executor
nesnesi şu cihazlarda çalışabilir:
tek bir ileti dizisinde veya seçtiğiniz bir ileti dizisi havuzunda
yayınlanabilir.
Çoğu EuiccCardManager
API aynı kullanım modeline sahip. Örneğin,
profil paketini eUICC'ye bağla:
...
cardMgr.loadBoundProfilePackage(eid, boundProfilePackage,
AsyncTask.THREAD_POOL_EXECUTOR, callback);
Belirli bir ICCID ile farklı bir profile geçmek için:
...
cardMgr.switchToProfile(eid, iccid, true /* refresh */,
AsyncTask.THREAD_POOL_EXECUTOR, callback);
eUICC çipinden varsayılan SM-DP+ adresini almak için:
...
cardMgr.requestDefaultSmdpAddress(eid, AsyncTask.THREAD_POOL_EXECUTOR,
callback);
Belirtilen bildirim etkinlikleriyle ilgili bildirim listesini almak için:
...
cardMgr.listNotifications(eid,
EuiccNotification.Event.INSTALL
| EuiccNotification.Event.DELETE /* events */,
AsyncTask.THREAD_POOL_EXECUTOR, callback);
Bir operatör uygulaması üzerinden eSIM profilini etkinleştirme
Android 9 veya sonraki sürümleri çalıştıran cihazlarda operatör uygulamalarından birini kullanarak
eSIM ve indirme profilleri. Operatör uygulaması, profilleri aşağıdaki yöntemlerle indirebilir.
arama
downloadSubscription
veya LPA'ya etkinleştirme kodu sağlayarak.
Bir operatör uygulaması sesli arama yaparak bir profili indirdiğinde
downloadSubscription
Çağrı, uygulamanın bir BF76
üzerinden profili yönetebilmesini zorunlu tutuyor
meta veri etiketi
için operatör ayrıcalığı kurallarını kodlayan
seçin. Bir profilde BF76
etiketi yoksa veya BF76
etiketi yoksa
arayan operatör uygulamasının imzasıyla eşleşirse indirme işlemi reddedilir.
Aşağıdaki bölümde bir operatör uygulaması aracılığıyla eSIM'i etkinleştirme kodu.
Etkinleştirme kodu kullanarak eSIM'i etkinleştirin
eSIM profilini etkinleştirmek için etkinleştirme kodu kullanıldığında LPA,
şuna ait etkinleştirme kodu:
operatör uygulamasını indirip profili indirir. Bu akış LPA tarafından başlatılabilir.
LPA, kullanıcı arayüzü akışının tamamını kontrol edebilir. Dolayısıyla, hiçbir operatör
gösteriliyor. Bu yaklaşım, BF76
etiket kontrolünü atlar ve ağ operatörleri
uygulama indirmesi de dahil olmak üzere eSIM etkinleştirme
eSIM profili ve hata işleme.
Operatör eUICC temel hazırlık hizmetini tanımlayın
LPA ve operatör uygulaması,
AIDL
arayüzler:
ICarrierEuiccProvisioningService
ve IGetActivationCodeCallback
. Kargo şirketi
uygulama bir ICarrierEuiccProvisioningService
arayüzü uygulamalı ve
bunu uygulama içinde
manifest beyanını kullanın.
LPA, ICarrierEuiccProvisioningService
öğesine bağlanmalı ve uygulamalıdır
IGetActivationCodeCallback
. Scrum ve Çevik’in nasıl uygulanacağı
Bir AIDL arayüzü gösteriliyorsa (Tanımlama ve AIDL arayüzü'ne bakın).
AIDL arayüzlerini tanımlamak için aşağıdaki AIDL dosyalarını oluşturun hem LPA hem de operatör uygulamaları için
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(); }
Örnek LPA uygulaması
Operatör uygulamasının ICarrierEuiccProvisioningService
uygulamasına bağlamak için
LPA, hem ICarrierEuiccProvisioningService.aidl
hem de
IGetActivationCodeCallback.aidl
ayarını projenize ekleyin
ServiceConnection
.
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
mCarrierProvisioningService = ICarrierEuiccProvisioningService.Stub.asInterface(iBinder);
}
Operatör uygulamasının ICarrierEuiccProvisioningService
cihazına bağlandıktan sonra
LPA, getActivationCode
veya RACI matrisi
getActivationCodeForEid
tarihine kadar operatör uygulamasından etkinleştirme kodunu alın
IGetActivationCodeCallback
saplama sınıfının uygulanmasını iletir.
getActivationCode
ile getActivationCodeForEid
arasındaki fark şu:
getActivationCodeForEid
, operatörün bir profili cihazın hesabına önceden bağlamasına olanak tanır.
İndirme işlemi başlamadan önce SIM kimliği belirleyin.
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
}
}
Operatör uygulaması için örnek uygulama
LPA'nın operatör uygulamasına bağlanması için operatör uygulaması
ICarrierEuiccProvisioningService.aidl
ve IGetActivationCodeCallback.aidl
-
ve ICarrierEuiccProvisioningService
hizmetini
AndroidManifest.xml
dosyası. Hizmet,
android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS
sistem izninin olması gerekir.
buna yalnızca sisteme özel bir uygulama olan LPA bağlanabilir. Hizmet,
aynı zamanda bir intent filtresi de
android.service.euicc.action.BIND_CARRIER_PROVISIONING_SERVICE
işlem.
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 operatör uygulaması hizmetini kullanmak için bir hizmet oluşturun, Stub
getActivationCode
ve getActivationCodeForEid
özelliklerini uygulayın.
yöntemlerine göz atın. Ardından LPA, profil etkinleştirmeyi getirmek için iki yöntemden birini çağırabilir
girin. Operatör uygulaması
Kod şöyle ise etkinleştirme koduyla IGetActivationCodeCallback#onSuccess
operatörün sunucusundan başarıyla alındı. Başarısız olursa operatör uygulaması
IGetActivationCodeCallback#onFailure
ile yanıt vermelidir.
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); } } }
LPA etkinleştirme akışında operatör uygulaması kullanıcı arayüzünü başlatın
LPA, Android 11 ve sonraki sürümleri çalıştıran cihazlarda bir operatör uygulamasının kullanıcı arayüzünü başlatın. Bir operatör uygulaması, operatörden gelen ek bilgileri gerektirebilir. kullanıcı tarafından bir kez daha gönderin. Örneğin, kargo şirketleri Kullanıcıların, telefon numaralarını etkinleştirmek veya başka taşıma işlemleri gerçekleştirmek için giriş yapmasını gerektirme kullanıma sunuyoruz.
Bir operatör uygulamasının LPA'da kullanıcı arayüzünü başlatma süreci şu şekildedir:
LPA, operatör uygulamasının etkinleştirme akışını başlatmak için
android.service.euicc.action.START_CARRIER_ACTIVATION
amacı işlemi içeren operatör uygulama paketi (Operatör uygulamasının alıcısı manifestoda,android:permission="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"
- LPA olmayan uygulamalardan niyet almaktan kaçının.)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);
Operatör uygulaması bu işlemleri kendi kullanıcı arayüzünü kullanarak yapar. Örneğin, günlük HTTP isteklerinde bulunmayıp operatörün arka ucuna göndermeyi unutmayın.
Operatör uygulaması, LPA'ya
setResult(int, Intent)
numaralı telefonu arayarak yanıt verir. vefinish()
.- Operatör uygulaması
RESULT_OK
ile yanıt verirse LPA etkinleştirme akışına devam eder. Operatör uygulaması LPA'nın operatöre bağlanmasına izin vermek yerine kullanıcı bir QR kodu taramalıdır hizmeti bulunduğunda, operatör uygulaması LPA'yaRESULT_OK
veIntent
örneğiylesetResult(int, Intent)
ekstra Boole değerini içerenandroid.telephony.euicc.extra.USE_QR_SCANNER
,true
olarak ayarlandı. LPA ardından ekstraları kontrol eder ve bağlama yerine QR tarayıcıyı başlatır operatör uygulamasınınICarrierEuiccProvisioningService
uygulaması. - Operatör uygulaması kilitlenirse veya
RESULT_CANCELED
ile yanıt verirse (bu varsayılan yanıt kodudur), LPA eSIM'i iptal eder etkinleştirme akışı. - Operatör uygulaması
RESULT_OK
veyaRESULT_CANCELED
ise LPA bunu hata olarak değerlendirir.
Güvenlik nedeniyle, LPA aşağıdaki şartları doğrudan kabul etmemelidir: LPA olmayan içeriğin genel olarak Arayanlar operatör uygulamasından etkinleştirme kodu alamıyor.
- Operatör uygulaması
Bir operatör uygulamasında LPA etkinleştirme akışını başlatın
Android 11'den itibaren operatör uygulamaları eUICC API'lerini kullanabilir eSIM için LUI başlatma etkinleştirme. Bu yöntem, LPA'nın eSIM etkinleştirme akışı kullanıcı arayüzünü gösterir. eSIM profili. LPA daha sonra eSIM profili etkinleştirme sona erer.
LPA,
android.service.euicc.action.START_EUICC_ACTIVATION
işlem. Öncelik olması durumunda, amaç filtresinin değeri sıfır dışında bir değere ayarlanmalıdır. uygulamalar olduğundan emin olun. Örnek:<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>
Operatör uygulaması bu işlemleri kendi kullanıcı arayüzünü kullanarak yapar. Örneğin, günlük HTTP isteklerinde bulunmayıp operatörün arka ucuna göndermeyi unutmayın.
Operatör uygulamasının bu noktada etkinleştirme sağlamaya hazır olması gerekir kodu yerine
ICarrierEuiccProvisioningService
uygulaması gerekir. İlgili içeriği oluşturmak için kullanılan operatör uygulaması LPA'yı başlatarakstartActivityForResult(Intent, int)
android.telephony.euicc.action.START_EUICC_ACTIVATION
eyleme dökülebilir. LPA, aynı zamanda ekstra boole değerini de kontrol eder.android.telephony.euicc.extra.USE_QR_SCANNER
Değertrue
ise LPA, kullanıcının profil QR kodunu tarayabilmesi için QR tarayıcıyı başlatır.LPA tarafında, LPA operatör uygulamasının Etkinleştirmeyi getirmek için
ICarrierEuiccProvisioningService
uygulaması kodu indirin ve ilgili profili indirin. LPA, İndirme sırasında, yükleme ekranı gibi kullanıcı arayüzü öğeleri.LPA etkinleştirme akışı tamamlandığında LPA, operatör uygulaması tarafından işlenir ve sonuç koduyla birlikte
onActivityResult(int, int, Intent)
- LPA, yeni eSIM profilini başarıyla indirirse
RESULT_OK
ile yanıt verir. - Kullanıcı LPA'da eSIM profili etkinleştirme işlemini iptal ederse
RESULT_CANCELED
ile yanıt verir. - LPA
RESULT_OK
dışında bir yanıt verirseRESULT_CANCELED
, operatör uygulaması bunu bir hata olarak değerlendirir.
LPA, güvenlik nedeniyle etkinleştirme kodunu kabul etmez ASA olmayan arayanların arama anlayamamasını sağlamak için operatör uygulamasından etkinleştirme kodu.
- LPA, yeni eSIM profilini başarıyla indirirse
Birden fazla eSIM desteği
Android 10 veya sonraki sürümleri çalıştıran cihazlarda
EuiccManager
sınıfında cihazlar desteklenir
birden fazla eSIM'i kullanabilirsiniz. Yükseltme yapılan tek bir eSIM'i olan cihazlar
Android 10
Platform olarak LPA uygulamasında herhangi bir değişiklik gerektirmemelidir.
EuiccManager
örneğini otomatik olarak varsayılan eUICC ile ilişkilendirir. İlgili içeriği oluşturmak için kullanılan
varsayılan eUICC, radyo HAL sürümüne sahip cihazlar için platform tarafından belirlenir
1.2 veya üzeri ve LPA tarafından şu radyo HAL sürümlerine sahip cihazlar için:
1.2.
Gereksinimler
Birden fazla eSIM'i desteklemek için cihazda birden fazla eUICC olmalıdır. Çıkarılabilir eUICC'lerin kullanılabileceği yerleşik bir eUICC ya da fiziksel bir SIM yuvası olmalıdır eklendi.
Birden fazla eSIM'i desteklemek için Radyo HAL sürüm 1.2 veya üzeri gerekir. HAL Radyosu sürüm 1.4 ve RadioConfig HAL sürüm 1.2 önerilir.
Uygulama
Birden fazla eSIM'i (çıkarılabilir eUICC'ler veya programlanabilir SIM'ler dahil) desteklemek için
LPA uygulanmalıdır
EuiccService
bu alana, arayan tarafından sağlanan kart kimliğine karşılık gelen alan kimliğini alır.
İlgili içeriği oluşturmak için kullanılan
non_removable_euicc_slots
şurada belirtilen kaynak:
arrays.xml
bir cihazın yerleşik cihazındaki yuva kimliklerini temsil eden bir tam sayı dizisidir
eUICC'ler. Platformun, uygulamanızın
eklenen eUICC'nin çıkarılabilir olup olmadığını gösterir.
Birden fazla eSIM'i olan cihazlar için operatör uygulaması
Birden fazla eSIM'i olan bir cihaz için operatör uygulaması geliştirirken
createForCardId
yöntemini EuiccManager
kullanarak belirli bir EuiccManager
nesnesini
belirtilen kart kimliği. Kart kimliği, UICC'yi benzersiz şekilde tanımlayan bir tam sayı değeridir.
veya cihazda bir eUICC olmalıdır.
Cihazın varsayılan eUICC'sinin kart kimliğini almak için
getCardIdForDefaultEuicc
yöntemini TelephonyManager
içinde değiştirebilirsiniz. Bu yöntem,
UNSUPPORTED_CARD_ID
radyo HAL sürümü 1.2'den düşükse ve
UNINITIALIZED_CARD_ID
cihaz eUICC'yi okumadıysa.
Kart kimliklerini şuradan da alabilirsiniz:
getUiccCardsInfo
ve TelephonyManager
içinde getUiccSlotsInfo
(system API) ve
getCardId
SubscriptionInfo
içinde.
Belirli bir kart kimliğiyle bir EuiccManager
nesnesi örneklendirildiğinde
işlemleri, söz konusu kart kimliğiyle eUICC'ye yönlendirilir. eUICC
erişilemez (örneğin, kapatıldığında veya kaldırıldığında) EuiccManager
hayır
daha uzun süre çalışır.
Bir operatör uygulaması oluşturmak için aşağıdaki kod örneklerini kullanabilirsiniz.
1. Örnek: Etkin aboneliği alma ve EuiccManager
örneğini örneklendirme
// 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);
Örnek 2: UICC'leri yineleyin ve bir için EuiccManager
çıkarılabilir 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);
}
Doğrulama
AOSP, bir LPA uygulaması içermez ve tüm Android sürümlerinde LPA'yı kullanabilirsiniz (her telefon eSIM'i desteklemez). Örneğin, bu nedenle uçtan uca CTS test durumu yoktur. Ancak temel test durumları, korunmasız eUICC API'lerinin sağlandığından emin olmak için AOSP'de Android derlemelerinde geçerlidir.
Derlemelerin aşağıdaki CTS test durumlarını geçtiğinden emin olmalısınız (herkese açık API'ler): /platform/cts/tests/tests/telephony/current/src/android/telephony/euicc/cts
Bir operatör uygulamasını kullanan operatörler normal şirket içi kalite kontrolü döngüleri düzenli bir şekilde kontrol etmeniz gerekir. Şurada: minimum olarak, operatör uygulaması tüm abonelik profillerini listeleyebilmelidir. sahibi olma, bir profili indirme ve yükleme, bir hizmeti etkinleştirme profil oluşturabilir, profiller arasında geçiş yapabilir ve profilleri silebilirsiniz.
Kendi LPA'nızı oluşturuyorsanız çok daha ayrıntılı olmalıdır. teşvik etmek anlamına gelir. Modem satıcınız, eUICC çipi veya eSIM OS tedarikçinizle birlikte çalışmalısınız. SM-DP+ tedarikçileri ile operatörlerinin ve operatörlerin, sorunları çözmek ve LPA'nızı RSP mimarisi içinde göstermeniz gerekir. İyi miktarda manuel test yapmak kaçınılmazdır. En iyi test kapsamı için GSMA SGP.23 RSP Test Planı.