我是使用APNs服务进行IOS MDM开发的新手。我们正在开发适用于ios的MDM,目前尚处于初期阶段。我们最近有一个为Apple创建的开发者帐户。我已经浏览了许多网站和链接,但是对于如何向ios设备发送命令仍然不满意。
通过下面的论坛,我了解到我们需要首先检查设备状态,然后将命令发送到设备。
Sending mdm payload

我的查询是怎么做。我没有在Java中找到任何代码片段,实际上我们可以用来向ios设备发送“DeviceLock”之类的命令。谁能为我的程序提供一小段Java代码,以便我也可以使用相同的代码将策略应用于设备。

请帮助..感谢您的阅读。

最佳答案

更新:

  • 要将任何命令发送到设备,我们首先需要安装MDM
    配置文件到设备配置文件中,其中将包含服务器网址
    设备将使用它来轮询命令
    设备接收推送通知。
  • 推荐http://media.blackhat.com/bh-us-11/Schuetz/BH_US_11_Schuetz_InsideAppleMDM_WP.pdf
    有关详细注册,请参阅“发送推送通知
    上面的链接中提供了详细的设备命令。
  • 要发送推送通知,我们需要拥有一个可以从苹果的身份门户创建的apns推送证书,请参阅:http://www.softhinker.com/in-the-news/iosmdmvendorcsrsigning
  • 对于mdm,我们将推送通知有效载荷作为{mdm:“PushMagicToken-of-device”}发送到APNs
  • 当设备收到推送通知时,它将联系mdm服务器的server-url以执行命令。

  • 回答您的问题:(PS用于通信的Java)

    Q1。 “您能否以请求的形式建议我服务器如何与设备交互以及设备与服务器交互”

    答案:当设备从APN接收到推送通知时,设备将与服务器进行交互。它将与您在mdm有效负载中提供的键ServerUrl的URL联系。

    这是PUT请求方法类型,设备以plist格式向服务器发送空闲状态。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    <key>Status</key>
    <string>Idle</string>
    <key>UDID</key>
    <string> [ redacted ] </string>
    </dict>
    </plist>
    

    与设备的所有通信均使用Plist(属性列表格式)完成,设备可以轻松理解此格式。

    Q2:“这意味着您以什么形式从服务器发送命令,以及如何检查命令是否完成并将反馈发送到设备”

    服务器也以plist的形式向设备发送命令。
    例如:下面是设备发送空闲状态响应时从我的mdm服务器发送的DeviceLock命令的plist。
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
        <dict>
            <key>Command</key>
            <dict>
                <key>RequestType</key>
                <string>DeviceLock</string>
            </dict>
            <key>CommandUUID</key>
            <string>ph_mdm_command_uuid</string>
        </dict>
    </plist>
    

    请注意:每个命令都有一个CommandUUID字段,我们可以使用该字段在服务器端检查当前命令,它维护当前 session 。无论我们使用CommandUUID发送到设备的命令是什么,设备都会以相同的CommandUUID响应该命令的状态。

    因此,作为对DeviceLock命令RequestType的响应,设备发送回响应:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>CommandUUID</key>
        <string>ph_mdm_command_uuid</string>
        <key>Status</key>
        <string>Acknowledged</string>
        <key>UDID</key>
        <string>device_udid</string>
    </dict>
    </plist>
    

    这里的CommandUUID与服务器发送的命令类似,UDID是被调查的设备,状态为Acknowledged,表示命令已在设备上成功执行。

    注意:所有这些都以字节的形式在Java响应中发送。如果您的意思是我将响应发送到设备的格式。

    我假设向设备发送反馈意味着发送下一个请求或停止轮询:
    如果您有要发送到设备的命令列表,则应遵循类似的步骤,因为当前我们一次只能发送一个命令。
    如果没有要执行的命令,并且您希望设备停止轮询,则需要发送空响应。有关更多详细信息,请参考iOS MDM - How to close or stop connection after device responds back with valid response

    希望这消除了疑虑。
    如果您正处于注册阶段,请先阅读@Victor的评论。
    如有任何疑问,请通知我。
    目前,我已经在iOS设备上成功运行了mdm安装程序。

    谢谢。

    10-05 20:22
    查看更多