(eSIM集成iOS) 如何使用受限API“addPlan”在iOS设备中启用eSIM配置文件

18

在到处搜索后,我发现可以使用以下API将eSIM添加到iPhone中。

func addPlan(with: CTCellularPlanProvisioningRequest, completionHandler: (CTCellularPlanProvisioningAddPlanResult) -> Void)

我不知道为什么,但完成处理程序没有返回CTCellularPlanProvisioningAddPlanResult的结果,只是打印以下错误信息。

Domain=NSCocoaErrorDomain Code=4099 "The connection to service named
com.apple.commcenter.coretelephony.xpc was invalidated." UserInfo=
{NSDebugDescription=The connection to service named
com.apple.commcenter.coretelephony.xpc was invalidated.

我想了解这个API的工作原理,你可以看到我的代码如下

let ctpr = CTCellularPlanProvisioningRequest()
ctpr.address = "SMDP+"
ctpr.confirmationCode = ""
ctpr.eid = ""
ctpr.iccid = ""

let ctcp =  CTCellularPlanProvisioning()
ctcp.addPlan(with: ctpr) { (result) in
    print(result)
}

我正在使用CoreTelephony框架

非常感谢任何帮助

在检查了其他应用之后,我发现GigSky也在做同样的事情,有人知道他们是如何实现的吗?

更新:

目前,我找到了权限请求URL,请参见下面的链接

https://developer.apple.com//contact/request/esim-access-entitlement

我已经申请了,但苹果没有回复。


感谢您的回复。我知道eSIM仅适用于iOS> 12的选定设备,并且运营商应支持它。我确实拥有实际的eSIM和最新的设备,我知道如何手动链接eSIM,方法是进入设置并添加蜂窝数据计划,然后扫描QR码,但我想自动化此过程,以便用户无需手动扫描代码。我相信addPlan函数可以做到这一点,并且可以创建eSIM配置文件。 - Nick
难道你不应该在注册计划后从运营商那里获得这些数据吗?我认为这就是QR码扫描的用途。 - AlexM
那么为什么addPlan函数有一个CTCellularPlanProvisioningRequest对象作为参数?这个函数是做什么用的? - Nick
我确实拥有eSIM配置文件,supportsCellularPlan()方法返回true,但是当调用addPlan方法时,我收到了相同的错误“code=4099”。你有任何新的信息吗? - fbenedet
@fbenedet 还没有。 - Nick
显示剩余9条评论
2个回答

14

通过这个流程,你可以将eSIM功能集成到你的iOS应用中。

步骤1

使用你的开发者帐户请求eSIM授权 从这里请求

步骤2

苹果将在一段时间后批准该授权(对我来说需要几个月) 你可以从你的应用程序配置设置中检查苹果是否已经批准了该授权 应用程序配置设置(证书管理器)

步骤3

下载App Dev和Distribution profile(选择eSIM授权作为第2步)。

步骤4

使用下面的键和值更新你的info.plist

<key>CarrierDescriptors</key>

<array>
     <dict>
     <key>MCC</key> //Mobile country code
         <string>’mnc value’</string>
     <key>MNC</key> // Mobile network code
         <string>’mnc value’</string>
     </dict>
</array>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.CommCenter.fine-grained</key>
<array>
    <string>spi</string>
    <string>sim-authentication</string>
    <string>identity</string>
</array>
<key>com.apple.wlan.authentication</key>
<true/>
<key>keychain-access-groups</key>
<array>
    <string>apple</string>
    <string>com.apple.identities</string>
    <string>com.apple.certificates</string>
</array>
<key>com.apple.private.system-keychain</key>
<true/>

步骤五(可选)

使用以下密钥和值更新你的{appname}.entitlements

<key>com.apple.CommCenter.fine-grained</key>
<array>
    <string>public-cellular-plan</string>
</array> 

第六步 添加eSIM配置文件的代码

 let ctpr = CTCellularPlanProvisioningRequest()
 ctpr.address = "Your eSIM profile address"
 ctpr.matchingID = "Confirmation id"

 if #available(iOS 12.0, *) {
        let ctcp =  CTCellularPlanProvisioning()
        ctcp.addPlan(with: ctpr) { (result) in
            switch result {
            case .unknown:
                self.showGenericSingleButtonCustomAlert(description: "Sorry unknown error")
            case .fail:
                self.showGenericSingleButtonCustomAlert(description: "Oops! something went wrong")
            case .success:
                self.showGenericSingleButtonCustomAlert(description: "Yay! eSIM installed successfully")
            @unknown default:
                self.showGenericSingleButtonCustomAlert(description: "Oops! something went wrong")
            }
        }
    }

1
哦,是的,你需要在Xcode中更新你的个人资料,使用新的个人资料。 - Nick
1
@nareshkolindala,你需要确保你的API已经得到了Apple的批准,并尝试在信息PList中添加权限。我不确定应该添加哪一个。 - Nick
1
感谢 @Narayana。 - Nick
1
嗨@Nick,我们需要添加CarrierDescriptors才能正常工作,所以我已经编辑了你的答案,请检查并批准。 - Narayana Rao Routhu
大家,我无法让这个工作起来。我不知道我漏掉了什么,有人可以帮忙吗?我也在这个问题上发布了一个帖子。https://stackoverflow.com/q/77270654/4795651 - undefined
显示剩余12条评论

4

这个API只适用于运营商。您需要从Apple获取特殊权限才能在应用程序中调用它,否则您将会遇到所提到的错误。

关于eSIM的一些澄清:

  • 现在大多数运营商采用的最简单方法是通过从设备设置中扫描QR码来添加eSIM,这不需要运营商应用上进行任何开发。
  • 另一种方式是使用运营商应用安装eSIM配置文件,这只能通过由苹果提供的特殊权限来完成。该权限允许您调用您在问题中提到的CTCellularPlanProvisioning.addPlan(with: ) API。

如何添加该权限? - Nick
您需要通过开发者门户向苹果提交该权限的请求,该请求将会被审核并手动批准。 - Krimboss
1
你能告诉我那个权限的名称吗? - Nick
1
@IbrahimAl-Mahfooz 你需要先与你的苹果销售代表沟通。你必须获得使用这个受限API的资格。假定你已经有了在 SM-DP+ 上执行 ES2+ DownloadOrder,ConfirmOrder 和(可能)ReleaseProfile 的过程。根据你的运营商设置,你可以选择将 eSIM“链接”到 EID(在这种情况下,不会生成匹配 ID),或者使用“分配”一个 eSIM,并使用 MatchingID 添加计划。希望这可以帮到你。-Hussam - h q
iOS支持通过长按网站上的二维码进行扫描,但遗憾的是(在iOS 17上),这并不支持eSIM的注册。 - undefined
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接