以编程方式验证 MDM 配置文件(配置)是否已成功推送到 iOS 设备?

asp*_*zae 5 objective-c mdm ios provisioning-profile configuration-profile

我正在编写一个 iOS 客户端应用程序,该应用程序向服务器发送请求,该服务器转身并请求通过外部 MDM (AirWatch) 将更新的配置文件推送到我的设备。我相信配置文件显示在Settings -> General -> Profiles. 当 MDM 处理完配置文件推送(已发送或已排队,我不确定)时,它会响应调用服务器说“是的配置文件已推送”,后者将该响应响应给我的客户端应用程序。

问题是配置文件实际推送/安装在设备上大约需要 30 秒,而 Web 服务响应比这要短得多。所以我的客户端应用程序认为配置描述文件已经安装,并且它允许应用程序在配置文件仍然不可用时继续。我希望能够检测到配置文件何时成功推送到我的设备,并且不允许应用程序继续运行直到之后。我的另一个选择是制作一个弹出窗口,说明配置文件已成功推送,但我仍然需要检测正在安装的配置文件。

2013 年关于 stackoverflow 的大部分问答似乎都说不可能查询配置文件,但我想知道人们最近是否尝试过任何变通方法。我想到了以下可能性 - 但我不知道哪个是首选,或者是否可以使用 iOS7(截至 2/12/2014)。

  1. 查询我需要的已安装配置文件(从我见过的大多数问答中听起来不可能;不知道 iOS7 的更新是否改变了这一点)
    • 如果我知道我正在寻找的确切个人资料名称怎么办?
  2. 为 MDM 推送添加通知侦听器
    • 使用registerForRemoteNotificationTypes/didReceiveRemoteNotificationdidFinishLaunchingWithOptions
    • MDM 推送可能发生在我的应用程序之外,因此沙盒可能会妨碍
    • 你能监听 MDM 使用的端口吗?
  3. 侦听对配置文件配置设置的更改
  4. 在服务器上添加一个请求来查询设备的已安装配置文件,并在向客户端发送响应之前调用该请求
  5. 通过在配置文件中包含自签名证书并对其进行验证来进行证书验证
    • 看起来有点笨拙,我不确定我的 MDM 是否允许我这样做
  6. 使用可达性方法

作为说明,我查看了以下链接以及更多链接:

提前致谢!

lid*_*ker 5

您的应用程序无法确定是否已安装配置描述文件,因为不存在允许应用程序查询其已安装配置文件的(公共)API,您也无法确定 MDM 推送通知是否已发送到设备。您必须依靠 MDM (AirWatch) 来确定配置文件是否已安装。

当 AirWatch 将配置文件推送到设备时,它将收到配置文件已安装的确认消息,但直到 AirWatch 重新查询所有已安装的配置文件时,它才会报告配置文件已安装。我所看到的是,在 AirWatch 发送配置文件安装命令后不久,它将重新查询设备上的配置文件列表,因此只需轮询服务器几次并等待直到看到配置文件已安装即可。我没有花太多时间详细了解 AirWatch REST API,但我认为这是可能的。

除此之外,我能看到的唯一其他选项是您使用 Reachability 执行某些操作来检测是否正在设置 VPN 隧道。