精华内容
下载资源
问答
  • 详细的搭建Android OTA服务器方法,可使用windows或者Linux,推荐使用Linux服务器搭建
  • 全志一整套OTA服务器客户端搭建资料
  • 全志OTA服务器完整文档tomcat6+服务器端+客户端源代码
  • VKX更新 VK X这样的OTA服务器
  • timg.jpegOTA,Over-the-Air的简写,OTA升级就是通过GPRS、3G、无线网络下载升级补丁升级,不用通过有线连接来升级。...OTA升级大致过程设备向服务器进行版本更新检测请求服务器将更新信息返回到设备端设...

    69edbd1b290a

    timg.jpeg

    OTA,Over-the-Air的简写,OTA升级就是通过GPRS、3G、无线网络下载升级补丁升级,不用通过有线连接来升级。Android的应用或者是整个系统,都可以通过OTA的方式进行版本的更新升级。

    OTA具体原理自行google,或者参考这篇文章。本文和接下来的两篇文章主要介绍的是具体的实现过程。

    OTA升级大致过程

    设备向服务器进行版本更新检测请求

    服务器将更新信息返回到设备端

    设备通过返回信息下载指定的更新文件

    下载完成后设备安装升级

    Android单个应用和整个系统的升级方式存在差异,接下来两篇文章会分别介绍实现。

    本文重点实现升级过程中的第二步,搭建一个服务器Demo,以方便后续的测试工作。服务器用的nodejs,使用较为简单,没接触过的也可以跟着下面的步骤将服务器搭建在本地运行起来。

    OTA服务器搭建

    安装nodejs

    用的是Mac系统,安装命令

    brew install node

    查看是否安装完成

    $ node -v

    v6.2.0

    npm 是专门管理nodejs包的工具,用来方便地安装第三方模块,安装nodejs时应该也默认同时安装了npm,可以命令查看

    $ npm -v

    3.8.9

    运行

    安装完成后,先实现个简单的Demo,只需简单几行代码便可在本地运行起一个服务器。

    先创建一个文件夹 Server,在文件夹充创建文件 SimpleServer.js

    用文本编辑工具打开SimpleServer.js,代码实现:

    var http = require('http');

    var server = http.createServer(function(req, res) {

    res.end('Hello!');

    }).listen(3001);

    console.log('Server listening at port: 3001');

    然后打开命令行工具,cd 到 Server 目录下,敲入命令运行服务器:

    node SimpleServer.js

    命令行打印输出:

    Server listening at port: 3001

    此时服务器开始监听来自本地端口3001的请求。

    打开浏览器,地址栏输入 Hello!。即一个最简单的服务器。

    Express框架

    上边实现的服务器对任何请求都返回Hello!文本,现实中服务器当然没那么简单。OTA服务器在接到请求时需要返回对应信息,并提供更新文件的下载接口。

    Express 是一种保持最低程度规模的灵活 Node.js Web 应用程序框架,为 Web 和移动应用程序提供一组强大的功能。Express 提供的各种 HTTP 实用程序方法和中间件能帮助我们方便的处理网络请求。具体可参考官方文档

    使用Express应用生成器快速搭建框架

    使用以下命令安装 express:

    npm install express-generator -g

    输入如下命令,在当前目录下创建名为 ota 的 Express 应用

    express --view=pug ota

    看结果打印,在ota目录下自动创建了对应文件

    69edbd1b290a

    1.jpg

    cd 到 ota 目录下,安装需要的依赖

    cd ota/

    npm install

    完成后,在node_modules目录下会下载好项目需要的第三方依赖模块

    69edbd1b290a

    2.jpg

    项目的运行文件为 bin/www,打开查看源文件,可看到服务器运行端口默认情况下为 3000

    69edbd1b290a

    3.jpg

    命令行运行服务器

    node bin/www

    Express框架默认生成的界面

    69edbd1b290a

    4.jpg

    同时可以看到访问服务器时命令行的打印信息

    69edbd1b290a

    5.jpg

    Ps. 关闭服务器时,在命令行敲 Ctrl + C,如果通过 Ctrl + Z 或者直接关闭命令行窗口界面的方式来退出服务器,会导致服务器监听的端口一直被占用,再次重启服务器时会失败。此时要么修改服务器监听的端口,要么将原端口所对应的进程杀掉。

    杀指定端口进程方法,通过 lsof -i:端口号 查看端口对应PID, 然后 kill -9 PID

    杀掉node相关的进程

    69edbd1b290a

    6.jpg

    OTA服务器实现

    ota更新文件

    在项目根目录下创建文件夹 ota_file,将更新文件命名为 update.zip 放在该目录下

    69edbd1b290a

    7.jpg

    路由实现

    获取更新信息

    直接打开文件 routes/index.js,看到代码

    /* GET home page. */

    router.get('/', function(req, res, next) {

    res.render('index', { title: 'Express' });

    });

    大概可以理解为,对于 / 请求,服务器会通过代码 res.render('index', { title: 'Express' });,将指定页面返回到浏览器,即我们看到的页面。

    对于 /update_info 请求,我们实现个类似的处理方式

    具体代码:

    router.get('/update_info', function(req, res, next) {

    var name = req.query.versionName;

    console.log('current version:' + name);

    var info = {

    'url': '/ota_file/update.zip',

    'updateMessage': 'Fix bugs.',

    'versionName': 'v2',

    'md5': ''

    };

    var dir = process.cwd() + '/ota_file'

    var filePath = path.join(dir, 'update.zip');

    var md5 = getFileMD5(filePath);

    info.md5 = md5;

    res.writeHead(200, {'Content-Type': 'application/json;charset=utf-8'});

    res.end(JSON.stringify(info));

    });

    var name = req.query.versionName;

    获取请求中 versionName 参数的值。

    检测是否有更新时,设备会将当前版本做为参数发送到服务器,通过与服务器最新的版本进行对比以决定是否需要升级。

    var info = {

    'url': '/ota_file/update.zip',

    'updateMessage': 'Fix bugs.',

    'versionName': 'v2',

    'md5': ''

    };

    url:更新文件的下载地址

    updateMessage:用来描述新版本的更新信息

    versionName:新版本的版本名称

    md5:更新文件的md5值,用来和设备下载完成的更新包后md5值对比,保证下载完成的文件和服务器的文件一致

    获取更新文件的md5值,filePath 为更新文件的目录

    var dir = process.cwd() + '/ota_file'

    var filePath = path.join(dir, 'update.zip');

    var md5 = getFileMD5(filePath);

    info.md5 = md5;

    最后将 info 转成 json 格式返回

    res.writeHead(200, {'Content-Type': 'application/json;charset=utf-8'});

    res.end(JSON.stringify(info));

    Android设备最终获取到json格式的数据,通过特定字段将对应的值解析出来。

    getFileMD5 函数用来获取文件md5值,实现代码:

    function getFileMD5(filePath) {

    var buffer = fs.readFileSync(filePath);

    var fsHash = crypto.createHash('md5');

    fsHash.update(buffer);

    var md5 = fsHash.digest('hex');

    console.log("文件的MD5是:%s", md5);

    return md5;

    }

    一些处理操作用到了系统特定的模块,使用前需要引入

    var express = require('express');

    var router = express.Router();

    // add module

    var fs = require('fs');

    var path = require('path');

    var crypto = require('crypto');

    加上代码后,重新运行服务器,进行更新信息的请求,可以看到浏览器返回了对应的json数据

    69edbd1b290a

    8.jpg

    提供文件下载

    返回的json数据中可看到其中

    'url': '/ota_file/update.zip'

    /ota_file/update.zip 即为我们下载文件的路径

    文件的下载路由实现代码

    router.get('/ota_file/:filename', function(req, res, next) {

    var filename = req.params.filename;

    var dir = process.cwd() + '/ota_file'

    var filePath = path.join(dir, filename);

    fs.exists(filePath, function(exist) {

    if (exist) {

    console.log('downloading:' + filename);

    res.download(filePath);

    }

    else {

    res.set('Content-type', 'text/html');

    res.end('File not exist.');

    }

    });

    });

    /ota_file/update.zip 中的 update.zip 对应 /ota_file/:filename 中的 filename,所以下载请求的文件名可通过 filename 参数获取

    var filename = req.params.filename;

    通过文件名合成文件路径

    var dir = process.cwd() + '/ota_file'

    var filePath = path.join(dir, filename);

    fs.exists 检验指定文件路径是否存在,若是则进行文件下载

    服务器的文件下载通过内置的 download 方法实现。

    res.download(filePath);

    download 方法实现了http的断点续传协议,用浏览器下载时可尝试暂停下载,再继续下载时会延续之前的下载进度。

    Ps. 下载也可通过打开文件将数据流写到客户端的方式来实现,不过过程略麻烦,若要实现断点续传还得根据http协议range属性自行处理。

    文件下载实现完成后,重启服务器生效,浏览器输入 localhost:3000/ota_file/update.zip,回车后可看到文件下载到了本地

    69edbd1b290a

    9.jpg

    以上

    服务器大概实现完成。实际生产环境中的处理流程会做更多判断和容错,这里只做了简单处理,用来方便给后续Android OTA升级提供测试。

    关注 ota/routes/index.js 文件即可

    展开全文
  • ESP-OTA-服务器 非常简单的OTA固件服务器,适用于内置和 。 主要目的是提供固件文件并传递MD5哈希值-以验证闪存。 选项: -s --bind监听地址(默认值:8092 ) -d --data-dir数据存储位置。 <data>/<project>/ ...
  • 我采用的方式是在服务器上使用nginx配置下载路径,也就是修改配置文件即可。 配置信息如下: server { listen 443 ssl; listen 8082; server_name localhost; #charset koi8-r; #access_log logs/host.access.log...

    我使用ESP32的OTA升级SDK,需要使用https协议下载固件包。

    我采用的方式是在服务器上使用nginx配置下载路径,也就是修改配置文件即可。
    注意需要指定证书、key、端口号等,还需要将nginx的ssl功能打开,打开ssl功能可以参考网上资料很容易。

    配置信息如下:

    server {
            listen       443 ssl;
            listen       8082;
            server_name  yourhttpsurl;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            ssl_certificate      /usr/local/nginx/cert/ca-cert.pem;
            ssl_certificate_key  /usr/local/nginx/cert/ca-key.pem;
    
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;
    
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            location /images/ {
                alias /zxc/picture/;
                autoindex on;
            }
    
    
            location /upgrate/ {
                alias /zxc/update_esp32/;
                autoindex on;
            }
    

    /upgrate为http访问路径,直接访问https://yourhttpsurl/upgrate/xxx.bin就可以进行固件的下载了,固件的路径为/zxc/update_esp32/。

    展开全文
  • 1.1 Mac自带 Apache 服务器 Mac 自带 Apache 服务器,我们在终端输入sudo apachectl -k start打开网页输入localhost,发现网页会显示如下: It works! Apache 服务器启动成功。 1.2 修改系统文件前先备份 例如需要...

    第一步 编辑前的准备

    1.1 Mac自带 Apache 服务器

    Mac 自带 Apache 服务器,我们在终端输入sudo apachectl -k start打开网页输入localhost,发现网页会显示如下:

    It works!

    Apache 服务器启动成功。

    1.2 修改系统文件前先备份

    例如需要修改/etc/apache2文件夹下 http.conf 文件

    1. 切换工作目录下:

    cd /etc/apache2

    1. 备份文件,只需要执行一次:

    sudo cp httpd.conf httpd.conf.bak

    1. 如果操作出现错误!可以使用命令,恢复备份的 httpd.conf 文件:

    sudo cp httpd.conf.bak httpd.conf

    1.3 通过 Xcode 或者 vim 修改系统文件

    通过 Xcode 修改比较简单,将文件脱出到桌面一份,修改后拖回原来的文件夹覆盖即可。

    注意的是,在系统目录下是不可以直接用 Xcode 修改的,可将文件复制到桌面上,用 Xcode 打开修改,然后拖入系统目录下覆盖即可。

    通过 vim 修改文件,可直接修改系统文件,修改比较方便。以下修改系统配置文件用到vim,如果不习惯使用vim修改,可使用 Xcode 编辑修改。

    1.4 vim 简单操作

    1. 例如当前目录下有一个 httpd.conf 文件,需要修改第 100 行为 abcdef。
    2. 输入命令sudo vim httpd.conf
    3. 鼠标滚动或者按上下键光标移动到第 100 行,按 i 键进入编辑模式 将第 100 行内容删除并替换为 abcdef 。
    4. esc键退出编辑。
    5. 输入:wq退出并保存;如果编辑错误输入:q!不保存文件,强制退出vi。

    二、配置Apache服务器Http服务

    2.1 创建 web 文件夹

    我们在当前用户根目录下新建一个web文件夹,然后放入一些文件,如图所示:

    2.2 编辑 http.conf 文件

    1. 切换工作目录下:cd /etc/apache2

    2. 备份文件:sudo cp httpd.conf httpd.conf.bak

    3. 用vim编辑httpd.conf文件:sudo vim httpd.conf

    4. 将下面路径更改为你自己web网页路径(约245行)

    DocumentRoot "/Library/WebServer/Documents"
    <Directory "/Library/WebServer/Documents”>
    
    修改为我当前用户目录下建立的一个 web 文件夹
    
    DocumentRoot "/Users/lf/web"
    <Directory "/Users/lf/web”>
    复制代码
    1. 为了便于浏览 web 文件夹,添加 Indexes 字段
    Options FollowSymLinks Multiviews
    
    修改为
    
    Options Indexes FollowSymLinks Multiviews
    复制代码

    1. 将下面的#号注释去掉,开启PHP(约177行)
    #LoadModule php7_module libexec/apache2/libphp7.so
    
    修改为
    
    LoadModule php7_module libexec/apache2/libphp7.so
    
    较旧的系统为(#LoadModule php5_module libexec/apache2/libphp5.so)
    复制代码

    1. 然后按 ESC 键退出编辑,输入:wq保存退出。

    2. 终端中输入sudo apachectl -k restart重启 Apache 服务器。

    3. 开启 apache 服务器.打开浏览器,搜索框中输入127.0.0.1或者localhost就可以看到我们之前添加的网络资源。

    2.3 Apache 常用操作命令

    # 启动 apache 服务器
    sudo apachectl -k start
    
    # 重新启动 apache 服务器
    sudo apachectl -k restart
    
    # 关闭 apache 服务器
    sudo apachectl -k stop
    复制代码

    2.4 重启时报错

    重启的时候发现报错,但不影响使用

    AH00558: httpd: Could not reliably determine the server's fully
    
    qualified domain name, using LFdeMacBook-Pro.local. Set the
    
    'ServerName' directive globally to suppress this message
    复制代码

    如果想解决此报错,可再次编辑 httpd.conf 文件

    sudo vim httpd.conf

    将下面的#号注释去掉,并修改(约221行)

    #ServerName www.example.com:80
    
    修改为
    
    ServerName localhost:80
    复制代码

    然后终端输入下面指令重启即可。

    sudo apachectl -k restart
    复制代码

    三、生成 Apache 服务器 Https 服务用的自签名证书

    iOS7.1 以后, Apple 不再支持 HTTP 方式的 OTA ,所以需要为 Apache 开启 HTTPS 服务,并利用 OpenSSL 制作自签名证书。

    3.1 生成服务器私钥 server.key

    sudo mkdir /private/etc/apache2/ssl 
    
    cd /private/etc/apache2/ssl
    
    sudo openssl genrsa -out server.key 1024
    复制代码

    生成如下所示文件

    3.2 生成签署申请

    sudo openssl req -new -key server.key -out server.csr
    复制代码

    注意:需要完整填写各项信息,注意Common Name必须是服务器 ip 或域名,其他信息可以随意填写。例如我需要把 ipa 安装包放在 192.168.1.188 的内网服务器上,则Common Name就填写 192.168.1.188 。如果这一步漏填信息,可能会导致最后生成的 ca 文件是空的。

    3.3 生成 CA 私钥ca.crt

    sudo openssl req  -new -x509 -days 365 -key server.key -out ca.crt
    复制代码

    填写信息和上面的填写的一样即可,注意Common Name必须填写,这里还是填写192.168.1.188即可。

    3.4 创建文件和文件夹

    在 ssl 目录下创建 demoCA 文件夹,然后进入 demoCA ,创建一个 index.txt 和 serial文件,index.txt 为空, serial 内容为01,然后在 demoCA 中再创建一个空文件夹 newcerts

    sudo mkdir demoCA && cd demoCA
    
    sudo mkdir newcerts
    
    sudo touch index.txt
    
    sudo touch serial
    复制代码

    使用 Xcode 或者 vim 编辑 serial 文件,第一行写入 01 保存即可。

    3.5 签名生成server.crt

    执行命令,返回到ssl文件夹下面

    cd /private/etc/apache2/ssl
    复制代码

    然后执行命令,用ca进行签名生成server.crt

    sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile server.key
    复制代码

    这一步可能会报如下错误

    Using configuration from /private/etc/ssl/openssl.cnf
    
    variable lookup failed for ca::default_ca140736040362952:
    
    error:0E06D06C:configuration file routines:NCONF_get_string:
    
    no value:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/
    
    libressl-22.50.2/libressl/crypto/conf/conf_lib.c:323:group=ca name=default_ca
    复制代码

    这是由于/private/etc/ssl/文件夹下缺少 openssl.cnf 的问题,解决办法是拷贝一份,输入命令

    cp /usr/local/etc/openssl/openssl.cnf /private/etc/ssl/openssl.cnf
    复制代码

    使用Xcode或者vim修改/private/etc/ssl/openssl.cnf文件,这里使用vim直接修改

    sudo vim /private/etc/ssl/openssl.cnf
    复制代码
    dir		= ./demoCA		# Where everything is kept
    修改为当前你的demoCA路径
    dir		=  /private/etc/apache2/ssl/demoCA
    复制代码

    修改完成后再执行命令

    sudo openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile server.key
    复制代码

    会提示有效期和生成证书,都输入y即可。

    Certificate is to be certified until Nov 10 06:39:36 2019 GMT (365 days)
    Sign the certificate? [y/n]:y
    (翻译)证书有效期至11月10日06:39:36 2019 GMT(365天)
    1 out of 1 certificate requests certified, commit? [y/n]y
    签署的证书吗?
    (翻译)1 / 1的证书请求被认证,提交?
    复制代码

    此时我们看到 HTTPS 证书已经生成完成。

    四、配置HTTPS服务

    4.1 编辑 httpd.conf 文件

    sudo vim /private/etc/apache2/httpd.conf
    复制代码

    把以下四行代码前头的注释去掉

    LoadModule ssl_module libexec/apache2/mod_ssl.so
    
    LoadModule socache_shmcb_module
    
    libexec/apache2/mod_socache_shmcb.so
    
    Include /private/etc/apache2/extra/httpd-ssl.conf
    
    Include /private/etc/apache2/extra/httpd-vhosts.conf
    复制代码

    注意:如果你的 httpd.conf 中缺少了某行,你可以自行添加进去即可。

    4.2 编辑 httpd-ssl.conf 文件

    编辑前先备份 httpd-ssl.conf 文件

    cd /private/etc/apache2/extra/ && sudo cp httpd-ssl.conf httpd-ssl.conf.bak
    
    sudo vim /private/etc/apache2/extra/httpd-ssl.conf
    复制代码

    把以下两行代码的注释去掉,并编辑为你的证书路径

    SSLCertificateFile "/private/etc/apache2/server.crt"
    SSLCertificateKeyFile "/private/etc/apache2/server.key"
    
    然后修改路径,改成你的证书文件路径
    
    SSLCertificateFile "/private/etc/apache2/ssl/server.crt"
    SSLCertificateKeyFile "/private/etc/apache2/ssl/server.key"
    复制代码

    4.3 编辑 httpd-vhosts.conf 文件

    编辑前先备份 httpd-vhosts.conf 文件

    cd /private/etc/apache2/extra/ && sudo cp httpd-vhosts.conf httpd-vhosts.conf.bak
    
    sudo vim /private/etc/apache2/extra/httpd-vhosts.conf
    复制代码

    将 <VirtualHost *:80> 中的第二个修改

    <VirtualHost *:80>
        ServerAdmin 192.168.1.188
        DocumentRoot "/Users/lf/web"
        ServerName 192.168.1.188
        ErrorLog "/private/var/log/apache2/dummy-host2.example.com-error_log"
        CustomLog "/private/var/log/apache2/dummy-host2.example.com-access_log" common
    </VirtualHost>
    复制代码

    然后在文件末尾添加 443 端口服务

    <VirtualHost *:443> 
        SSLEngine on 
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
        SSLCertificateFile /private/etc/apache2/ssl/server.crt
        SSLCertificateKeyFile /private/etc/apache2/ssl/server.key
        ServerName 192.168.1.188
        DocumentRoot "/Users/lf/web"
    </VirtualHost>
    复制代码

    注意:

    • SSLCertificateFile 填写生成的 server.crt
    • SSLCertificateKeyFile 填写生成的 server.key
    • ServerName 填写你的 ip
    • DocumentRoot 填写你的站点路径

    4.4 检查 Apache 配置

    sudo apachectl configtest
    复制代码

    如果它提示:Syntax OK,那就完成90%了,如果它提示有错,那就要根据错误提示自行解决了。

    我在这个环节遇到了一个错误

    SSLSessionCache: 'shmcb' session cachenot supported 
    (known names: ). Maybe you need toload the appropriate
    socache module (mod_socache_shmcb?).
    复制代码

    解决办法如下:

    sudo vim /private/etc/apache2/httpd.conf
    复制代码

    然后把以下代码的注释去掉

    LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so
    复制代码

    去掉注释后,保存,重新检查配置,直到成功。

    注意: 从网上查找的路径可能是LoadModule socache_shmcb_module modules/mod_socache_shmcb.so, 但我的配置文件中,路径跟上述的不一致,但结尾都是mod_socache_shmcb.so就对了。

    解决方案是参考这篇文章的stackoverflow问答

    重启 Apache 服务sudo apachectl -k restart, 这样就可以用 https 访问本地服务器了。

    五、放置资源文件

    5.1 网站资源文件

    如下图所示,在/Users/lf/web文件夹下放置的资源如下:

    文件夹名称可任意取,只要在 index.html 和 plist 文件夹中路径对应即可。index.html 不要改名字,默认。

    • ca.crt CA证书,将/private/etc/apache2/ssl/ca.crt拷贝一份到当前 web 文件夹下
    • ipa 文件夹,放置 ipa 资源包
    • plist 文件夹,放置 plist 文件
    • index.html 索引网页,放置链接下载安装证书和ipa
    • images 文件夹,按照 Xcode 要求放置一个 57×57 和 512×512 的 png 图片,还没发现什么用途。

    5.2 放置 ipa 包

    APP 打包,导出 ipa 包就没必要多说了,可以导出 Ad Hoc 或者 Development 的 ipa 包,将 ipa 放在放在 web 文件夹下 ipa 文件夹中。

    5.3 放置plist文件

    想在线安装,还需要一个 plist 文件,每个 ipa 包对应一个 plist 文件,将https://192.168.1.188/ipa/LFDev_4.2.1.ipa更改为生成证书时的 ip 或者域名,然后对应 ipa 文件路径即可,例如这里的路经是,在当前 web 文件夹下的 ipa 文件夹中,名称为 LFDev_4.2.1.ipa 的 ipa 文件。

    plist 文件格式如下:

    <?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://192.168.1.188/ipa/LFDev_4.2.1.ipa</string>
                </dict>
                <dict>
                   <key>kind</key>
                   <string>display-image</string>
                   <key>url</key>
                   <string>https://192.168.1.188/images/image_57×57.png</string>
                </dict>
                <dict>
                   <key>kind</key>
                   <string>full-size-image</string>
                   <key>url</key>
                   <string>https://192.168.1.188/images/image_512×512.png</string>
                </dict>
             </array>
             <key>metadata</key>
             <dict>
                <key>bundle-identifier</key>
                <string>com.xxx.yyy</string>
                <key>bundle-version</key>
                <string>4.2.0</string>
                <key>kind</key>
                <string>software</string>
                <key>title</key>
                <string>Cxx</string>
             </dict>
          </dict>
       </array>
    </dict>
    </plist>
    复制代码
    • bundle-identifier的值com.xxx.yyy更改为你应用的Bundle ID
    • bundle-version的值4.2.0更改为你应用的版本version
    • title的值Cxx更改为你应用的名称,下载时会弹出安装提示此名称

    5.4 创建索引下载网页 index.html

    /Users/lf/web文件夹下还需要一个 index.html 文件, 手机首次使用 OTA 安装,必须先下载安装 ca.crt 证书,然后再点击安装 ipa。 url 中必须填写 https 开头的 plist 文件下载地址,plist 文件中对应 ipa 文件的下载地址。

    <html>
        <head>
          <meta name="viewport"content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes"/>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </head>
        <body>
            <h4>手机首次下载请先"点击安装SSL证书",并根据提示安装信任证书</h4>
            在 iOS 10.3 及更高版本中,手动安装包含证书有效负载的描述文件时,这个证书不会自动受 SSL 信任。
            当安装通过电子邮件发送或从网站下载的描述文件时,您必须手动开启受 SSL 信任。
            要为这个证书开启受 SSL 信任,请前往“设置”>“通用”>“关于本机”>“证书信任设置”。在“针对根证书启用完全信任”下,开启信任这个证书。
            <a title="iPhone" href="https://192.168.1.188/ca.crt">?点击安装SSL证书?</a>
            <hr>
            <a href="itms-services://?action=download-manifest&url=https://192.168.1.188/plist/LFAdHoc_4.2.0.plist" class="app_link">?点击安装4.2.0生产版本?</a>
            <hr>
            <a href="itms-services://?action=download-manifest&url=https://192.168.1.188/plist/LFDev_4.2.1.plist" class="app_link">?点击安装4.2.1开发版本?</a>
            <hr>
            <a href="itms-services://?action=download-manifest&url=https://192.168.1.188/plist/LFVali_4.2.1.plist" class="app_link">?点击安装4.2.1验证版本?</a>
            <hr>
        </body>
    </html>
    复制代码

    如果是想 ipa 放在局域网电脑上面,则将当做打包服务器的电脑 ip 手动设置固定 ip:192.168.1.188,然后手机和电脑连接同一个路由器,iphone 的 Safari 浏览器中输入 192.168.1.188 或者 192.168.1.188/index.html 即可,点击安装 SSL 证书,然后点击安装 ipa 包。

    5.5 iOS 10.3 后必须设置证书信任

    如果下载 ipa 时出现无法连接到192.168.*.*的错误,则需要手动设置信任。

    iOS7.0 以后必须使用 HTTPS 进行,iOS 10 之前的设备,直接安装自签名根证书后就可以安装 iOS 应用,但是在 iOS 10.3 以上的设备上,安装后还需要到“关于本机”那里手动开启信任。

    苹果官网提示,在 iOS 中信任手动安装的证书描述文件 support.apple.com/zh-cn/HT204…

    在 iOS 10.3 及更高版本中,手动安装包含证书有效负载的描述文件时, 这个证书不会自动受 SSL 信任。 当安装通过电子邮件发送或从网站下载的描述文件时, 您必须手动开启受 SSL 信任。 要为这个证书开启受 SSL 信任, 请前往“设置”>“通用”>“关于本机”>“证书信任设置”。 在“针对根证书启用完全信任”下,开启信任这个证书。

    六、参考资料

    http://stackoverflow.com/questions/20127138/apache-2-4-configuration-for-ssl-not-working

    展开全文
  • 搭建iOS二维码扫描安装OTA服务器

    千次阅读 2016-05-20 17:56:50
    因为本文主要是介绍怎么实现OTA的安装,所以服务器搭建部分只做基本的指导(不过会详细说明怎么配置HTTPS),详细搭建方法还请大家自行Google^_^。 好吧,iOS开发都是用的Mac OS X,而Mac OS X中正好自带了Apache服务...

    搭建Web服务器
    因为本文主要是介绍怎么实现OTA的安装,所以服务器搭建部分只做基本的指导(不过会详细说明怎么配置HTTPS),详细搭建方法还请大家自行Google^_^。
    好吧,iOS开发都是用的Mac OS X,而Mac OS X中正好自带了Apache服务,所以这里我们只需要简单的在终端中敲击一行命令,就能启动Web服务了。

    sudo apachectl start

    这时我们在浏览器中输入”http://127.0.0.1/“,如果出现It Works!,那么恭喜你Web服务器启动成功。

    Web文件目录是:”/Library/WebServer/Documents/”, 系统级根目录默认没有开启目录列表, 开启方法:编辑 “/etc/apache2/httpd.conf “文件。 搜索找到

    展开全文
  • 目录一、同一局域网下通过游览器更新二、通过网络服务器获取固件1、第三方云平台(1)固件保存及固件地址链接获取(2)ESP32代码设置2、python下的SimpleHTTPServer方法(1)云服务器设置(2)ESP32代码设置(3)关闭...
  • 之前写了OTA服务端和客户端代码,在本地局域网用wamp测试过,想放到公网上去测试下。 于是想到用云服务器,找来找去发现还是华为的实惠,1元体验15天,还是2G内存,对本人测试来说已经足够了。 由于本人在服务器这块...
  • 因为用的云服务器是ubuntu裸机,所以软件都需要自己安装。 这个过程遇到很多问题花费了好多时间,也好,就当学习了。 1. FTP上传失败问题???  前面通过ftp客户端已经可以连上云服务器了,但是上传文件失败!...
  • 一是https协议,OTA HTTPS 协议可以工作了。 二是消息推送,推送用的是openfire+asmack方案,目前只能给所有用户广播消息,如果针对不同项目用户,服务器端还需要单独开发插件支持,这个后面继续研究。 三是服务器...
  • 由于网上的文章较多而且也比较乱,所以我这里整理一份总结且供参考学习 搭建平台版本说明 Ubuntu版本: 16.04.6 STL apache版本:apache2 tomcat版本:tomcat8 jave版本:openjdk version “1.8.0_222” ...
  • 在 iOS 10.3 以上的设备上,安装后还需要到“关于本机”那里手动开启信任 如果怎么弄都一直出现提示“无法连接到”,很有可能这就是根本原因所在了 推荐使用 skytoup/AppServer: 在线下载、安装App的服务器 ...
  • 在 iOS 10.3 以上的设备上,安装后还需要到“关于本机”那里手动开启信任 如果怎么弄都一直出现提示“无法连接到”,很有可能这就是根本原因所在了 推荐使用 skytoup/AppServer: 在线下载、安装App的服务器 ...
  •  [根据服务器地址作相应变动] 10. 测试访问地址为:   http://192.168.181.2:8080/update/form.jsp  [根据服务器地址作相应变动] 11. xml 中下地址可以为:   http://192.168.181.2/update/update.zip  ...
  • moto388手机ota服务器的构建

    千次阅读 2003-01-20 09:51:00
    下面是构建388ota网站的步骤: 1. 服务器端工具:Apache Tomcathttp://jakarta.apache.org/tomcat/index.html2. 按要求将jar文件和jad文件准备好(下面称为test.jar和test.jad)3. 在Tomcat的安装目录下的webapp/ROOT...
  • d MMC -v -i ~/OTA/msm8660_surf-target_files-eng.tangzm_B.zip ~/OTA/msm8660_surf-target_files-eng.tangzm_B.zip ~/OTA/update.zip ~/OTA/update.zip 就是升级用的差分包。 注: -x pagesize=4096 是...
  •  =================================OTA服务器的搭建和发布================================================  手机软件的升级搭建,会用到访问apache服务器,和编译差分包。其中搭建源服务器的流程是: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,578
精华内容 2,231
关键字:

ota服务器