ios黑科技之实现91助手的效果(app内下载并安装另一个app)
今天分享一个非常牛逼,非常装逼的黑科技--ios应用内下载并安装另一个应用,中间不需要经过appstore。
其实这个技术,就是我们实现91助手或者同步推的效果,他们也可以在他们的应用里面下载并安装其他的app。下面教程分两步走
第一步,自动下载并安装另一个app,中间不需要经过appstore 第二步,基于第一步,实现和91助手、同步推一模一样,自己管理下载和安装(支持断点续传、下载管理器等)不过这个技术并不可以上线appstore(91助手和同步推那些也没有上线appstore)。
除非你是像同步推类型的公司,否则这个技术只是用来装逼。
学这个技术前,首先要知道itms-services协议,这个技术是基于itms-services协议的。
itms-services:学名叫:OTA (Over The Air) 空中下载,是Apple在 iOS4 中新加的一项技术,目的是让开发者能够脱离Appstore,实现从自己的服务器下载并安装iOS应用。简单地说,就是用户只需要在Safari中点开一条链接,就能直接在主界面中安装App,不需要通过App Store。
当然,这里面还涉及到苹果签名之类的东西,大家就自行百度了,这里就不解释了。 这里的演示,我就直接通过苹果签名过的ipa进行演示,大家也可以像我这样做,就不用自己弄签名这么复杂了。下面详细介绍怎么做
1 首先我们要获取已经签名的ipa文件,在mac里面打开itunes,点搜索,下面我搜索 git,以这个app为例,点击获取。
2 输入你的appid 和 密码
3 下载后,在资料库里面找到 刚刚的app,右键点击 在Finder显示
4 好了,ipa下载下来了,而且这个ipa已经通过了签名(你的appid已经有这个ipa的使用权了)
5 接下来把ipa上传到 7牛里面,
6 然后编写plist文件
items assets kind software-package url http://xxx.xxx.com/xxxx.ipa metadata bundle-identifier 请填上你的开发者证书用户名 bundle-version 版本 kind software title 请填上标题
7 把plist文件上传的GitHub,然后点击GitHub的
8 最后一步,手机safari通过itms-services协议下载,在手机safari 输入
itms-services://?action=download-manifest&url=https://raw.githubusercontent.com/xxxx/xxxx.plist
url后面就是刚刚在GitHub的plist链接
下载成功。并且可以成功运行。
刚刚上面的流程是这样做
第一步完成了,总结一下:
上面的演示简单来说,就是只要用户在appstore下载过这个app,就有这个app的使用权(签名) 我们之后进行itms-services下载的ipa文件,就可以直接使用 如果这个ipa文件我们没有使用权(没有签名) 那么这个app打开的时候就会不停的要我们输入appid和密码 就算输入对了也没有反应(以前直接是闪退,不允许使用) 原因是苹果检查到你的appid没有这个ipa的使用权(签名)。下面开始牛逼的第二步教程:
你会发现,上面的下载是跟appstore一样的,他会在你手机的桌面直接进行下载,并且下载完之后直接进行自动安装。 但这样,我们就无法管理下载了(虽然用私用api可以查看,不过这种办法不好用)如果我想实现像91助手那样的功能,可以用下载管理器去管理 每个ipa包的下载,可以暂停,可以继续,支持断点续传,可以控制ipa下载后是否要安装,自己可以选择ipa安装包的安装后是否删除。
那么继续往下看在上面第六点那里,其实plist里面的ipa路径,系统是帮我自动 下载-安装,**那如果我已经下载好了呢? 是不是就不用下载,直接帮我安装呢?
没错,如果已经下载好了,那么系统会帮我们直接安装 **然后我们会有个思路,能不能先把网盘的ipa下载好 然后把plist里面的url换成我们沙盒的地址呢? 然后系统检测到沙盒的ipa已经下载好了,那么就可以从沙盒直接安装。
想法是对的,不过直接换成沙盒的话,我试过,是不行的 原因是ios8开始,沙盒的地址每次都会随机生成的,而且就算写了沙盒地址,前面的协议规定一定要http 所以不可以直接写沙盒地址。 既然不允许访问沙盒,又只可以访问http,那我访问自己的ip不就可以了吗。 **没错,访问自己的ip 像这样 ** 所以我们自己在程序里面做一个虚拟http服务器,访问本机的ip就等于访问本机的沙盒。 具体流程图如下:好的,有了想法之后,接下来就是实现了
流程1 在源码里面有虚拟的http服务器,可以直接用 流程2 源码里面封装好,可以设置ipa路径,可以设置成你们的网盘路径 流程3 源码里面封装好,可以设置https的plist路径,可以设置成你们的路径 流程4 以下是plist文件,其中url那里改成 注意端口要和源码里面的虚拟服务器端口一致 流程5 下载好之后会提示安装items assets kind software-package url http://127.0.0.1:10001/xxxx.ipa metadata bundle-identifier com.www.m2m bundle-version 4.5.6 kind software title pinglide
下面附上我的源码,里面已经包含下载管理器和虚拟服务器等
源码介绍: 实现和91助手、同步推的效果 已经封装好下载管理器,可以用下载管理器去管理 每个ipa包的下载 下载可以暂停,可以继续 支持断点续传(就算退出app,下次进入app依然保持上次的断点续传) 支持后台下载(按home键出去桌面之后依然保持下载) 支持设置最大并行下载数(默认是3个同时下载) 可以控制ipa下载后是否要安装 自己可以选择ipa安装包是否删除
使用说明:
1.快速添加一个下载ipa任务[[DownloadManager manager] addDownloadTaskWithUrl:@"http://xxxx.com/xxxx.ipa" andPlistUrl:@"https://raw.githubusercontent.com/xxxxx/xxxxx.plist" andGameName:@"xxxxx" andGameId:@"xxxxx" andType:@"ipa"];
2.下载过程中,进度的监听,我是直接返回任务数组的数据源,可以通过数组里面的OneDownloadItem 获取每个任务
[[DownloadManager manager] progressBlock:^(NSArray *allModelArr){}];
3.下载完成后的监听,返回是单个任务的完成回调
[[DownloadManager manager] completeBlock:^(OneDownloadItem *oneItem) {}];
ps:我里面的虚拟服务器端口默认设置成10001,你可以按需自定义,直接用我的源码可以下载ipa,不过你们安装不到,因为你们appid没有得到app的签名(使用权),所以记得跟着我上面第一步的教程走一下,就可以安装了
感谢第三方插件HTTPServer、MJExtension
欢迎star
原创文章,不允许转载
参考
小礼物走一走,来简书关注我