背景

都知道 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 图标;
  • plistApp 下载配置文件。

由客户端生成 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的更多相关文章

  1. 又到周末了,我们一起来研究【浏览器如何检测是否安装app】吧

    前言 扯淡 这个月比较倒霉,我送了女朋友一台笔记本电脑作为生日礼物,结果15天一过电脑就坏了,悲剧的我还把电脑盒子给扔了!淘宝不给换更不给退 于是被女朋友臭骂了一过星期后,今天本来在公司有任务的,但是 ...

  2. 分享一段js,判断是否是在iPhone中的Safari浏览器打开的页面

    头部引用jquery包 将下面的一段js写在</body>的前面 <script type="text/javascript"> var ua = navi ...

  3. 浏览器判断是否安装APP

    浏览器判断是否安装APP http://blog.csdn.net/henrywulibin/article/details/52087041 从浏览器中打开我们的应用 http://blog.csd ...

  4. php页面判断是 iphone还是andriod的浏览器&通过 URL types在浏览器打开app(转)

    http://blog.csdn.net/totogo2010/article/details/8925483 解决一个二维码不同手机扫描下载时跳转的问题 判断后跳转对应的app下载 <?php ...

  5. 【原】无脑操作:Chrome浏览器安装Vue.js devtool

    学习Vue.js时,Chrome浏览器安装Vue.js devtool能很方便的查看Vue对象.组件.事件等. 本文以Chrome浏览器插件Vue.js devtools_3.1.2_0.crx的安装 ...

  6. 手把手教你Chrome浏览器安装Postman(含下载云盘链接)【转载】

    转载自:http://www.ljwit.com/archives/php/278.html 说明: Postman不多介绍,是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.本文主要 ...

  7. 在浏览器判断是否安装app,并打开相应的页面

    1.代码功能: 判断手机/平板是否安装app 如果安装 则调用app的scheme,传入url当作参数,来做后续操作 如果没有安装 则跳转到app store/google play 下载app 2. ...

  8. 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装”

    (摘自http://blog.sina.com.cn/s/blog_14eea47cb0102w25n.html) 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装” 1.打开火 ...

  9. iOS7.1企业版发布后用户通过sarafi浏览器安装无效的解决方案

    关于iOS7.1企业版发布后,用户通过sarafi浏览器安装无效的解决方案: 通过测试,已经完美解决. 方案一: iOS7.1企业应用无法安装应用程序 因为证书无效的解决方案 http://blog. ...

  10. chrome 浏览器安装 postman

    chrome 浏览器安装 postman(插件下载见文章末尾) 1.安装方法 将下载的crx插件拖拽到chrome浏览器即可安装成功. 2.特殊情况 问题: chrome73版本后拖拽安装chrome ...

随机推荐

  1. IP: dns-lookup : 查询域名的公网IP地址 解决 DNS域名解析绑架的问题例如访问 raw.githubusercontent.com 的文件

    示例:https://github.com/orgs/community/discussions/42655 https://github.com/mwaskom/seaborn-data/blob/ ...

  2. win11正式版账号锁定无法登录的问题

    有一些雨林木风官网的win11正式版系统用户,因为电脑一段时间不操作后,系统就自动锁定了.而唤醒以后常用户的登录账号却被禁止使用,导致无法登录系统了,这什么情况啊要如何解决呢?接下来,雨林木风小编就来 ...

  3. 根据Word模板导出word文档,包含文本标签替换为图片,生成列表数据,以及标签替换等功能

    一.前言 最近项目开发中,有一个根据word模板和指定的数据导出word文件的需求,word模板文件如下,需要将指定标签替换为数据中指定的字段,表格根据第一行的标签生成列表数据,将指定的标签替换为图片 ...

  4. AI Compass前沿速览:可灵创意工坊、字节Coze Studio&Coze Loop、通义万相2.2 、智谱GLM-4.5、腾讯混元3D世界模型开源

    AI Compass前沿速览:可灵创意工坊.字节Coze Studio&Coze Loop.通义万相2.2 .智谱GLM-4.5.腾讯混元3D世界模型开源 AI-Compass 致力于构建最全 ...

  5. MyEMS能源管理系统后台配置-组合设备管理

    MyEMS开源能源管理系统适用于建筑.工厂.商场.医院.园区的电.水.气等能源数据采集.分析.报表,还有光伏.储能.充电桩.微电网.设备控制.故障诊断.工单管理.人工智能优化等可选功能. 本文介绍My ...

  6. EndNote:如何对论文中指定的个别引用设置其他样式

    01 问题 目前的需要是论文中正文部分的引用的样式不进行修改,而对表格内的样式修改为author et al.(year)的样式. 02 说明 EenNote版本: X9 引用样式需要为EenNote ...

  7. 你是如何确定随机 TTL 的取值范围的?不同业务场景下,这个范围会有怎样的变化?

    确定随机 TTL 的取值范围的 1.基于业务数据的更新频率 首先要分析业务数据的更新特性.如果数据更新较为频繁,那么 TTL 的取值范围应该相对较小.例如,股票价格数据,其价格可能每分钟甚至每秒都在变 ...

  8. [题解]POJ3675 Telescope——求多边形与圆相交部分的面积

    POJ3675 Telescope 题意简述 多测.每次给定一个\(N\)边形(保证相邻输入的顶点在多边形上也是邻接的),再给定一个以\((0,0)\)为圆心,半径为\(r\)的圆. 请计算出多边形和 ...

  9. centos 释放磁盘空间

    1.排查是哪些大文件占用该系统根空间 find / -xdev -size +1G -exec ls -l {} \; find / -type f -size +1G -exec du -h {} ...

  10. Mac find 去除 “Permission denied” 信息的方法

    Mac 下查找文件,最简单的方法应该是 mdfind filename 等同于 mdfind -name filename 不过,mdfind 貌似无法查找隐藏文件,比如,你要查找.zshrc,那么, ...