前端实现iPhone绕过AppStore从浏览器安装App

背景
都知道 iPhone 苹果手机应用只能通过 AppStore 进行安装,测试包只能通过官方提供的 TestFlight 等工具安装,而且通常有较长的审核流程,无法及时更新安装包,非常不方便。本文主要介绍前端实现对签名成功的 App直接通过浏览器下载安装,开发者可以及时提供测试 App。
主要流程
- 前提条件,苹果
App必须签名成功,这一步由iOS应用开发者完成。 - 上传到服务器,获得信息和下载地址,得到两个文件,一个是
plist文件和ipa文件,及app图标。 - 通过访问
plist文件来达到下载ipa文件和图片的目的,使用了苹果safari浏览器自带协议,用a标签或者window.open方式打开plist地址。 - 信任设备并安装。
itms-services:///?action=download-manifest&url=一个https地址
下面是几个过程的具体实现
具体实现
上传资源到服务器
公司文件可部署到公司服务器,自己测试文件可以使用 github 等免费提供文件地址的服务。
ipa:需要安装的苹果App打包文件,由iOS客户端提供;logo:图片格式的App图标;plist:App下载配置文件。
由客户端生成 plist 文件
app.plist:由客户端配置或更改下面 ipa 下载地址、App 图标地址及 App 描述信息。
<?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>https://ipa 下载地址</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>https://app 图标地址</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.xxxx.xxxx.xxxx</string>
<key>bundle-version</key>
<string>0.1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>APP名称</string>
<key>subtitle</key>
<string>App描述</string>
</dict>
</dict>
</array>
</dict>
</plist>
下载页面
install.html:提供给用户的下载 html 页面,具体 样式 和 功能可根据自己的需求调整。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<button id="button">下载</button>
<script>
document.getElementById('button').addEventListener('click', function() {
window.open('itms-services:///?action=download-manifest&url=https://pan.xchjw.cn/download/app/CorpPrivateInstall.plist', '_self')
})
</script>
</body>
</html>
实现效果
将下载地址提供给需要的人,点击下载按钮即可实现 App 安装。

市场上很多的分发平台,如蒲公英就是这么做的。
注意:
- 只可在苹果
safari浏览器中实现下载,其他浏览器中打开可做一些引导提示。 - 需要注意的是从
ios7.1开始,http推送plist已经不能用了,只能使用https推送,因此访问这个文件的地址必须是https开头的。你可以配置自己的服务器支持https服务,也可以借助第三方工具。
其他第三方app托管下载服务
我们不必这么麻烦自己部署这么多文件,完全可以借助第三方应用内测分发平台,比较出名的有下面几个:
- fir.im:免费应用内测托管平台,
iOS应用Beta测试分发,Android应用内测分发 - 蒲公英:免费的应用托管平台,
App应用众测分发。 - Pre.im:APP内测托管平台首选 -
Beta测试,免费的应用内测托管平台。 - TestFlight Beta Testing:苹果官方测试平台工具。
文章地址:https://www.cnblogs.com/dragonir/p/14412729.html 作者:dragonir
前端实现iPhone绕过AppStore从浏览器安装App的更多相关文章
- 又到周末了,我们一起来研究【浏览器如何检测是否安装app】吧
前言 扯淡 这个月比较倒霉,我送了女朋友一台笔记本电脑作为生日礼物,结果15天一过电脑就坏了,悲剧的我还把电脑盒子给扔了!淘宝不给换更不给退 于是被女朋友臭骂了一过星期后,今天本来在公司有任务的,但是 ...
- 分享一段js,判断是否是在iPhone中的Safari浏览器打开的页面
头部引用jquery包 将下面的一段js写在</body>的前面 <script type="text/javascript"> var ua = navi ...
- 浏览器判断是否安装APP
浏览器判断是否安装APP http://blog.csdn.net/henrywulibin/article/details/52087041 从浏览器中打开我们的应用 http://blog.csd ...
- php页面判断是 iphone还是andriod的浏览器&通过 URL types在浏览器打开app(转)
http://blog.csdn.net/totogo2010/article/details/8925483 解决一个二维码不同手机扫描下载时跳转的问题 判断后跳转对应的app下载 <?php ...
- 【原】无脑操作:Chrome浏览器安装Vue.js devtool
学习Vue.js时,Chrome浏览器安装Vue.js devtool能很方便的查看Vue对象.组件.事件等. 本文以Chrome浏览器插件Vue.js devtools_3.1.2_0.crx的安装 ...
- 手把手教你Chrome浏览器安装Postman(含下载云盘链接)【转载】
转载自:http://www.ljwit.com/archives/php/278.html 说明: Postman不多介绍,是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.本文主要 ...
- 在浏览器判断是否安装app,并打开相应的页面
1.代码功能: 判断手机/平板是否安装app 如果安装 则调用app的scheme,传入url当作参数,来做后续操作 如果没有安装 则跳转到app store/google play 下载app 2. ...
- 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装”
(摘自http://blog.sina.com.cn/s/blog_14eea47cb0102w25n.html) 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装” 1.打开火 ...
- iOS7.1企业版发布后用户通过sarafi浏览器安装无效的解决方案
关于iOS7.1企业版发布后,用户通过sarafi浏览器安装无效的解决方案: 通过测试,已经完美解决. 方案一: iOS7.1企业应用无法安装应用程序 因为证书无效的解决方案 http://blog. ...
- chrome 浏览器安装 postman
chrome 浏览器安装 postman(插件下载见文章末尾) 1.安装方法 将下载的crx插件拖拽到chrome浏览器即可安装成功. 2.特殊情况 问题: chrome73版本后拖拽安装chrome ...
随机推荐
- webstorm激活码2
A0W7XBZNUZ-eyJsaWNlbnNlSWQiOiJBMFc3WEJaTlVaIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5r+A5rS7IGlkZWEubWVkZW1pb ...
- pygame小游戏打飞机_4显示敌人
显示敌人 通过定义函数,引入函数进行敌人图像的引用 # 引用pygame import pygame # 使程序初始化 pygame.init() # 设置图像参数 screen = pygame.d ...
- 深入Android
『Android开发精要』推荐 https://www.cnblogs.com/duguguiyu/archive/2012/09/28/2707697.html 深入Android [一] -- 序 ...
- Origin2024如何绘制3D彩色饼图?
饼图是科研中经常用到的图表之一,当我们需要展示部分占整体的比例时,相信很多人都会想到饼图,可以非常直观地体现各部分的占比,之前给大家分享了Origin绘制2D饼图,本期给大家分享绘制3D饼图的操作方法 ...
- 从.NET到Go:我和AI搓了一个高性能对象映射库Go版Mapster
从.NET到Go:我用AI一起搓了一个高性能对象映射库 背景 作为一名从.NET开发转向Go的开发者,我深深体会到了语言迁移带来的"阵痛",缺乏称手的"兵器"呀 ...
- springboot中的Lombok的使用
1.Lombok 属于一种对实体类进行简化配置的功能操作,通过@Data实现实体类中get和set方法省略行为. 2.测试方式 第一步:创建一个springboot的项目,并同时选择需要 ...
- FinGenius - 首个A股博弈多智能体应用
一.项目简介 FinGenius 是全球首个A股AI金融未来博弈多智能体应用,不是技术工程师一拍脑袋的产物,而是扎根A股1700多天的市场真实观察,不断推翻100多个app版本,打造出的一个完全颠覆于 ...
- 【QML与C++的通讯机制】如何在QML中使用C++类,以及如何在C++中获取QML的内容
仅作学习,原文:https://developer.aliyun.com/article/1463150 1.C++和QML之间的分布关系 特点/比较维度 QML C++ Qt 语言和语法 基于Jav ...
- 解決 VMware Workstation 与 Device/Credential Guard 不相容,无法启动虚拟机的问题
问题: 打开 VMware Workstation 准备运行虚拟机时,报错如下图 原因: Windows 系統的 Hyper-V 不相容导致 解决方案: 通過命令关闭 Hyper-V(控制面板关闭 H ...
- WordPress 自定义字段(Custom Fields)详细介绍和使用
什么是 WordPress 自定义字段 Custom Fields 我们在使用 WordPress 撰写日志或者页面的时候,都会在编辑框下面看到自定义字段(Custom Fields),那么什么是自定 ...