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为例,点击获取。

02.png


2 输入你的appid 和 密码


3 下载后,在资料库里面找到 刚刚的app,右键点击 在Finder显示

03.png

04.png

05.png


4 好了,ipa下载下来了,而且这个ipa已经通过了签名(你的appid已经有这个ipa的使用权了)


5 接下来把ipa上传到 7牛里面,

06.png


6 然后编写plist文件

07.png


<?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>items</key> <array> <dict> <key>assets</key> <array> <dict> <key>kind</key> <string>software-package</string> <key>url</key> <string>http://xxx.xxx.com/xxxx.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>请填上你的开发者证书用户名</string> <key>bundle-version</key> <string>版本</string> <key>kind</key> <string>software</string> <key>title</key> <string>请填上标题</string> </dict> </dict> </array> </dict> </plist> 

7 把plist文件上传的GitHub,然后点击GitHub的

08.png


8 最后一步,手机safari通过itms-services协议下载,在手机safari 输入

itms-services://?action=download-manifest&url=https://raw.githubusercontent.com/xxxx/xxxx.plist

url后面就是刚刚在GitHub的plist链接


下载成功。并且可以成功运行。


刚刚上面的流程是这样做

01.png


第一步完成了,总结一下:
上面的演示简单来说,就是只要用户在appstore下载过这个app,就有这个app的使用权(签名)
我们之后进行itms-services下载的ipa文件,就可以直接使用
如果这个ipa文件我们没有使用权(没有签名)
那么这个app打开的时候就会不停的要我们输入appid和密码
就算输入对了也没有反应(以前直接是闪退,不允许使用)
原因是苹果检查到你的appid没有这个ipa的使用权(签名)。


下面开始牛逼的第二步教程:
你会发现,上面的下载是跟appstore一样的,他会在你手机的桌面直接进行下载,并且下载完之后直接进行自动安装。
但这样,我们就无法管理下载了(虽然用私用api可以查看,不过这种办法不好用)

如果我想实现像91助手那样的功能,可以用下载管理器去管理 每个ipa包的下载,可以暂停,可以继续,支持断点续传,可以控制ipa下载后是否要安装,自己可以选择ipa安装包的安装后是否删除。
那么继续往下看

在上面第六点那里,其实plist里面的ipa路径,系统是帮我自动 下载-安装,**那如果我已经下载好了呢? 是不是就不用下载,直接帮我安装呢?
没错,如果已经下载好了,那么系统会帮我们直接安装 **

09.png


然后我们会有个思路,能不能先把网盘的ipa下载好
然后把plist里面的url换成我们沙盒的地址呢?
然后系统检测到沙盒的ipa已经下载好了,那么就可以从沙盒直接安装。

想法是对的,不过直接换成沙盒的话,我试过,是不行的
原因是ios8开始,沙盒的地址每次都会随机生成的,而且就算写了沙盒地址,前面的协议规定一定要http
所以不可以直接写沙盒地址。
既然不允许访问沙盒,又只可以访问http,那我访问自己的ip不就可以了吗。
**没错,访问自己的ip
像这样 http://127.0.0.1/xxx.ipa **
所以我们自己在程序里面做一个虚拟http服务器,访问本机的ip就等于访问本机的沙盒。
具体流程图如下:

10.png

好的,有了想法之后,接下来就是实现了
流程1 在源码里面有虚拟的http服务器,可以直接用
流程2 源码里面封装好,可以设置ipa路径,可以设置成你们的网盘路径
流程3 源码里面封装好,可以设置https的plist路径,可以设置成你们的路径
流程4 以下是plist文件,其中url那里改成http://127.0.0.1:10001/xxxx.ipa 注意端口要和源码里面的虚拟服务器端口一致
流程5 下载好之后会提示安装

<?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>items</key> <array> <dict> <key>assets</key> <array> <dict> <key>kind</key> <string>software-package</string> <key>url</key> <string>http://127.0.0.1:10001/xxxx.ipa</string> </dict> </array> <key>metadata</key> <dict> <key>bundle-identifier</key> <string>com.www.m2m</string> <key>bundle-version</key> <string>4.5.6</string> <key>kind</key> <string>software</string> <key>title</key> <string>pinglide</string> </dict> </dict> </array> </dict> </plist> 

下面附上我的源码,里面已经包含下载管理器和虚拟服务器等
https://github.com/lovelyjune/DownloadAndInstallIpa


源码介绍:
实现和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

原创文章,不允许转载



参考
http://www.cnblogs.com/star91/p/5018995.html

http://stephen830.iteye.com/blog/2101884

http://blog.sina.com.cn/s/blog_5f19ccb10101da5m.html

http://www.jianshu.com/p/35ca63ec0d8e

http://blog.csdn.net/markely/article/details/12752037

小礼物走一走,来简书关注我

ios应用内下载并安装另一个应用相关推荐

  1. 软件配置 | ios系统Clion下载、安装、配置环境

    软件配置 软件配置 | ios系统Clion下载.安装.配置环境 软件配置 下载.安装 g++ Clion 调试 参考链接 下载.安装 调试 本文总结ios系统下Clion下载.安装.配置环境过程和可 ...

  2. Xshell7下载、安装、连接linux系统教程(官网)

    一.下载 1.百度搜索xshell,找到官网,点击进去 2.点击下载 3.点击下面这个下载,上面的下载需要安装另一个软件 4.点击下载,等待下载完成即可 5.下载完成如图 二.安装 6.点击下一步 7 ...

  3. iOS软件源怎么找,怎么下载/签名安装?

    iOS软件源怎么找,怎么下载/签名安装? 大家都知道一般来说只有在苹果商店中才能下载安装使用App,因为苹果公司对App有一套严格的审核流程,通过签名机制来保证每一个安装到iOS设备上的App都是经过 ...

  4. 如何使用电脑共享给苹果iOS设备下载和安装APP

    现在的iTunes已经不能管理应用程序了, 而iMazing不但能够给具有文件共享功能的APP传输文档,还可以给设备安装或者卸载APP,极大地方便了使用者对应用程序的管理. 一.应用程序的下载 借助i ...

  5. iOS 快捷下载和安装并使用CocoaPods

    CocoaPods是什么? 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等.可能某个类库又用到其他类库,所以要使用它,手动一个个去下载所需类库十 ...

  6. python程序下载_Python 基础起步 (二) 5分钟内下载环境并运行第一个Python 程序

    下载并安装Anaconda 好啦,作为小白,我们的第一步是安装能够运行Python的环境,所谓环境就是指我们要安装一个软件,之后就能用它来写Python代码 (觉得我对环境解释特别智障的请绕行,我们是 ...

  7. 内码输入法手机版下载_windows7系统怎么下载和安装内码输入法?

    许多用户询问小编说 笔记本专用win7系统 如何下载和安装内码输入法?内码输入法有什么用途呢?通过内码输入法是可以输出自己编辑的字符的,然而win7系统中并没有自带内码输入法,之前xp系统自带有内码输 ...

  8. iOS应用发布流程(一)------相关app证书的申请、下载以及安装

    发布流程总结成三个步骤: iOS应用发布流程(一)------相关app证书的申请.下载以及安装 http://blog.csdn.net/ys371277787/article/details/50 ...

  9. Android Studio下载、安装、配置及连接真机开发第一个App ——入门选手快进

      最近的安卓测试给我心态搞蹦了,问也没人问,难受简直了!又是一轮自学之路(说实话这一路上教会我一个很大的道理就是一定要有愿意帮助你的老师,还有自己的自觉,一样也不能少.前者没有的话只能后者补了呜呜呜 ...

最新文章

  1. 【CVPR Oral】TensorFlow实现StarGAN代码全部开源,1天训练完
  2. 博客构建工具推荐(文本送书)
  3. 使用MyBatis和Spring构建Java Web应用程序
  4. maven 结合idea入门
  5. jquey 批量操作 checkbox
  6. Redis定时任务,
  7. 详解 MySQL 基准测试和 sysbench 工具
  8. php 监听模式,总结Laravel事件系统用法(监听事件,观察者模式)
  9. 计算机论文的写作方法有哪些,计算机专业毕业论文的写作方法指导
  10. 什么是JSONP及其实现原理
  11. 大牛程序员带你走进互联网:资历深不是优势,资源才是难得的宝藏!
  12. 号码认证一键免密登录,让验证更简单!
  13. I came, I saw, I hacked Automated Generation of Process-independent Attacks for ICS
  14. RJS参考之JavaScriptCollectionProxy
  15. ITK-SNAP截图时关闭十字定位线
  16. js moment.js 给定时间 获取自然月、周的时间轴
  17. 【基础练习】【DFS】codevs2806 红与黑题解
  18. java课程设计-音乐播放器,基于java的音乐播放器设计.doc
  19. qq农场私服php源代码,仿QQ农场源码、QQ牧场源代码(整合UCHOME)
  20. squid服务的应用[转]

热门文章

  1. C++基础入门丨1. 初识C++像极了C语言
  2. PCB之AD快速布局
  3. Android SDKManger 更新设置
  4. 42-面对对象编程(高级部分)1
  5. CCF大会腾源会专场即将召开,聚焦基础软件与开发语言未来发展
  6. 不同试验设计遗传力的计算方法
  7. Auto.JS简介与教程
  8. python离散事件仿真库SimPy官方教程
  9. python贪吃蛇小游戏制作思路详解
  10. MogileFS部署流程