You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Android eSIM运营商应用获取运营商权限及签名证书?

Android eSIM运营商应用开发解决方案

一、获取Carrier Privileges签名证书的渠道

Carrier Privileges的签名证书并非公开获取,需依托运营商资质对接完成:

  • 若客户是基础运营商:需联系GSMA完成eSIM信任体系注册,同时对接谷歌、三星、小米等主流Android设备厂商,提交运营商资质证明,将应用的签名公钥纳入设备的运营商信任列表。
  • 若客户是MVNO(虚拟运营商):需依托上游基础运营商已建立的信任关系,由基础运营商协助将应用签名绑定到其信任链下,无需单独对接GSMA和厂商。
  • 核心逻辑:Android系统的Carrier Privileges基于运营商-设备厂商-GSMA的三方信任链,只有被系统信任列表收录的签名应用,才能直接调用eSIM激活接口而无需系统权限。

二、无需系统权限的eSIM激活核心逻辑

当应用拥有Carrier Privileges后,可直接调用Android原生EuiccManager API完成激活,无需向用户申请WRITE_EMBEDDED_SUBSCRIPTIONS等危险权限,系统会自动授权。激活流程:

  1. 用户输入eSIM激活码(含SM-DP+地址)
  2. 应用通过EuiccManager构建下载请求并发起Profile下载
  3. 系统自动完成验证、下载、激活全流程

三、Xamarin/MAUI 代码实现示例

1. AndroidManifest权限配置

<uses-permission android:name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS" />
<uses-permission android:name="android.permission.READ_EMBEDDED_SUBSCRIPTIONS" />
<!-- 拥有Carrier Privileges后,系统会自动授予这些权限,无需用户确认 -->

2. eSIM激活代码

using Android.Telephony.IccEuicc;
using Android.Content;
using Android.OS;

public async Task<bool> ActivateEsim(string activationCode, string smdpAddress)
{
    var euiccManager = (EuiccManager)Android.App.Application.Context.GetSystemService(Context.EuiccService);
    
    // 检查设备是否支持eSIM
    if (!euiccManager.IsEnabled)
    {
        return false;
    }
    
    // 构建下载请求
    var subscriptionBuilder = new EuiccManager.DownloadableSubscription.Builder()
        .SetActivationCode(activationCode)
        .SetSmdpAddress(smdpAddress);
    
    // 发起下载操作
    var operation = euiccManager.DownloadSubscription(subscriptionBuilder.Build());
    
    // 异步获取操作结果
    var result = await operation.GetResultAsync();
    
    return result.ResultCode == EuiccManager.OperationResultSuccess;
}

3. 验证Carrier Privileges状态

using Android.Telephony;

public bool CheckCarrierPrivileges()
{
    var carrierConfigManager = (CarrierConfigManager)Android.App.Application.Context.GetSystemService(Context.CarrierConfigService);
    var subscriptionManager = SubscriptionManager.From(Android.App.Application.Context);
    
    // 获取当前默认数据订阅ID
    var defaultSubId = subscriptionManager.DefaultDataSubscriptionId;
    
    // 检查应用是否拥有对应运营商的权限
    return carrierConfigManager.HasCarrierPrivileges(defaultSubId);
}

内容的提问来源于stack exchange,提问作者Павел Чувак

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 23:35:23