利用MobileInstallation实现IPA程序安装后,最近有网友问起同步推、91等在线一键安装APP的实现,于是这两天抽了时间研究了一下。一开始以为可以通过调用MobileInstallation Framework来安装,仔细想想后,实在不可能通过一网页调用到系统级文件,更别说调用系统私有库里面的方法来安装。最后只好从同步推等网站入手。
此处先描述一下同步推在线一键安装的流程:
-
先用iPhone上的Safari打开同步推,可以看到
在线安装
的按钮,同时网站也给出了一键安装的条件:安装要求:已越狱,并安装了appsync
!如下图示: -
点击
在线安装
后,弹出一个UIAlertView,提示“tui.tongbu.com”要安装“同步推1.12(需越狱)online”
-
点击弹出对话框的
安装
后,系统自动退回桌面,这时可以看到同步推开始下载并自动安装。
以上便是同步推在线一键安装的基本操作流程,不难看出,关键代码应该是在点击在线安装
后,网站执行了某个方法后弹出安装提示框。查看网页源代码可以看到在线安装
这个位置代码如下:
明显点击后,调用了方法install,继续往下则看到install方法的代码:
上述代码被简单加密过,解密后如下
lDGyJ1
是什么呢?往前一点有这么一段代码:
没错网站正是通过判断当前浏览器userAgent,用lDGyJ1
来标记当前浏览器是否为iOS设备。
在install
方法中,当lDGyJ1
不为0时(即当然为iOS设备),则跳转至:
http://server.tongbu.com/cloud/downapp.aspx?channel=channel
在浏览器输入上述网址,发现又跳转到:
itms-services://?action=download-manifest&url=http://tui.tongbu.com/channel/tbtui_v1.12_online.plist
上述地址正是一键安装玄机所在,而核心则是itms-services协议跟plist配置文件。
itms-services协议实际上常用于iOS企业应用的无线部署,详见这里!
plist配置文件实为一个xml清单文件,其内容大概如下:
至此,我们只要稍稍修改上面的plist文件,便可实现自己的一键安装。需要修改的地方主要有:
-
<key>assets里两个url,即software-package和display-image的URL,前者是所要安装的IPA地址,后者是安装时桌面显示的图标。
-
<key>metadata里主要修改bundle-identifier和bundle-version,具体是什么就不用介绍了,但是要注意一定要跟所安装的IPA包内容一致,不然无法安装成功。另外可以修改title和subtitle,定制安装时弹出框的内容。