一、RSP架构简介 RSP(RemoteSIMProvisioning),指远程SIM配置。利用eUICCeSIM技术,移动用户可以在没有实体SIM卡的情况下,下载运营商配置文件并激活运营商服务。GSMA规定的RSP架构如下: 图1RSP架构 SMDP(SubscriptionManagerDataPreparation),签约数据准备模块。SMDP负责根据运营商的请求,创建、生成、管理和保护运营商生成的配置文件。它还负责在绑定配置文件包内交付配置文件,使绑定配置文件包可用于安全交付。 SMDS(SubscriptionManagerDiscoveryServer),签约数据发现服务模块。SMDS提供一种机制,使SMDP可以与任何设备内的LDS进行通信。SMDP将目标设备的事件注册消息发送到SMDS,目标设备中的LDS轮询根SMDS,当SMDS有目标设备的事件id,则会响应SMDP的地址。 LPA(LocalProfileAssistant),本地签约数据文件辅助管理。分为LPAe(eUICC上的LPA)和LPAd(设备上的LPA)。LPA包括三个部分:本地发现服务(LDS,LocalDisCoveryService)、本地签约数据文件下载(LPD,LocalProfileDownload)以及本地用户接口(LUI,LocalUserInterface)。它们的作用分别是: (1)LDS:从SMDS获取SMDP登记的关于该eSIM的事件记录。 (2)LPD:作为eSIM与SMDP之间的代理,从SMDP获取Profile数据包,再转移到eSIM中。 (3)LUI:向用户提供Profile管理的功能,包括Profile的激活、去激活、删除等。 eUICC的内部高层架构如下: 图2eUICC示意图 ECASD(EmbeddedUICCControllingAuthoritySecurityDomain),eUICC控制权限安全域,负责eUICC上安全域所需证书的安全存储。一个eUICC上有且仅有一个ECASD。 ISDP(IssuerSecurityDomainProfile),是用于托管配置文件的安全容器(安全域)。ISDP与ProfilePackageinterpreter(配置文件解释器,负责对接受的绑定配置文件包进行解码解释)和作用于配置文件的下载与安装。ISDP是SMDP在eUICC上的代表。 ISDR(IssuerSecurityDomainroot),负责ISDP的生成,并管理ISDP的生命周期。 LPAServices,提供对LPA功能所需的服务和数据的必要访问: (1)根SMDS地址 (2)可选择存储的默认SMDP地址。 (3)促进从LPA传输的绑定配置文件包的接收。 (4)提供有关已安装配置文件及其配置文件元数据的信息。 (5)提供本地配置文件管理。 (6)为LPA提供与SMDS进行身份验证和交互的功能。 (7)确保对EID的访问仅限于LPA。 二、流程简介 1。LPA发起下载 LPA发起下载 2。通过激活码下载配置文件 通过激活码下载配置文件 3。本地配置文件管理 3。1激活配置文件 激活配置文件 3。2去激活配置文件 去激活配置文件 3。3删除配置文件 删除配置文件 三、开发LPA 1。LPA要求 (1)eUICC上的LPA和操作系统必须支持最低2。0或2。2版的GSMARSP。 (2)与(1)相匹配的RSP版本的SMDP和SMDS服务器。 (3)设备的调制解调器,见针对eSIM支持的调制解调器要求。 2。LPA实现 LPA是一款独立的系统应用,应包含在Android构建映像中。Android框架可自动发现可用的最佳LPA并与之连接,然后通过LPA实例路由所有eUICC操作。LPA由两个独立的组件(可在同一APK中实现)组成:LPA后端以及LPA界面(即LUI)。 实现LPA后端,需要扩展EuiccService并在清单文件中声明。此服务必须请求获得android。permission。BINDEUICCSERVICE系统权限,确保只有系统才能与之绑定。此服务还必须包含具有android。service。euicc。EuiccService操作的intent过滤器。应将该intent过滤器的优先级设置为非零值,以防设备上存在多个实现。清单文件声明如下: service android:name。EuiccServiceImpl android:permissionandroid。permission。BINDEUICCSERVICE service 实现LUI,需为以下操作提供一个Activity: android。service。euicc。action。MANAGEEMBEDDEDSUBSCRIPTIONS android。service。euicc。action。PROVISIONEMBEDDEDSUBSCRIPTION 每个Activity也都必须获得android。permission。BINDEUICCSERVICE系统权限,而且都应当包含具有适当操作的intent过滤器,并属于android。service。euicc。category。EUICCUI类别以及非零优先级。选择这些Activity的实现方案与选择EuiccService实现方案所使用的逻辑是相似的。清单文件示例如下: android:exportedtrue android:permissionandroid。permission。BINDEUICCSERVICE activity 实现与eUICC之间的通信,需要调用EuiccCardManager。 EuiccCardManager提供了ES10方法。这里的ES10可见图1和图2中的ES10a、ES10b、ES10c。 ES10a(LDSLPAServices):设备中的LDS使用ES10a接口获取来自eUICC的已配置根SMDS地址和可选的默认SMDP地址。 ES10b(LPDLPAServices):设备中的LPD和LPAServices使用ES10b将绑定配置文件传输到eUICC。 ES10c(LUILPAServices):设备中的LUI和LPAServices使用ES10c接口为终端用户提供本地配置文件管理功能。 获取EuiccCardManager实例: EuiccCardManagercardMgr(EuiccCardManager)context。getSystemService(Context。EUICCCARDSERVICE); LPA使用EuiccCardManager获取eUICC上的配置文件: ResultCallbackEuiccProfileInfo〔〕callback newResultCallbackEuiccProfileInfo〔〕(){ Override publicvoidonComplete(intresultCode, EuiccProfileInfo〔〕result){ if(resultCodeEuiccCardManagerReflector。RESULTOK){ handleresult }else{ handleerror } } }; cardMgr。requestAllProfiles(eid,AsyncTask。THREADPOOLEXECUTOR,callback); 在内部,EuiccCardManager会通过AIDL接口绑定到EuiccCardController(在Phone进程中运行),而且每个EuiccCardManager方法均会通过不同的专用AIDL接口从电话进程接收回调。使用EuiccCardManagerAPI时,调用方(LPA)必须提供Executor对象,以便通过该对象调用回调。此Executor对象可以在单个线程上运行,也可以在线程池上运行。 大多数EuiccCardManagerAPI都具有相同的使用模式。以下是另一些使用EuiccCardManager与eUICC进行通信的方法。 将绑定的配置文件包加载到eUICC: 。。。 cardMgr。loadBoundProfilePackage(eid,boundProfilePackage, AsyncTask。THREADPOOLEXECUTOR,callback); 切换为具有指定ICCID的其他配置文件: 。。。 cardMgr。switchToProfile(eid,iccid,truerefresh, AsyncTask。THREADPOOLEXECUTOR,callback); 通过eUICC获取默认的SMDP地址: 。。。 cardMgr。requestDefaultSmdpAddress(eid,AsyncTask。THREADPOOLEXECUTOR, callback); 检索指定通知事件的通知列表: 。。。 cardMgr。listNotifications(eid, EuiccNotification。Event。INSTALL EuiccNotification。Event。DELETEevents, AsyncTask。THREADPOOLEXECUTOR,callback); 3。LPA测试 AOSP中不提供端到端的CTS测试用例,只提供基本的测试用例,以确保公开的eUICCAPI在Androidbuild有效,见:针对eUICCAPI的CTS测试用例。 LPA则应进行更严格的测试,见:RSP测试规范:SGP。23v1。4。pdf。 四、参考文献 实现eSIM eSIM白皮书 RSP架构:SGP。21v2。2。pdf RSP测试规范:SGP。23v1。4。pdf