【原创】我所理解的自动更新-外网web服务器配置
ClientDownload和ClientUpdate共享渠道配置信息:
channel-0.php //以appstore的渠道为例
<?php
define('APPNAME', 'TOKENAPPNAME');//应用版本号
define('SERVER_MAJOR_VERSION', 'TOKENMAJORVER');//最新应用版本号
define('SERVER_MAJOR_VERSION_TXT', 'TOKENMAJORTXT');//最新应用版本描述
define('SERVER_RESOURCE_VERSION', ' TOKENRESOURCE_VER ');//最新资源版本号
define('SERVER_IOS_URL', 'http://version.mygame.com/TOKENMAJORVER/major/app.ipa');//ipa下载
define('SERVER_ITMS_URL', ''itms-services://?action=download-manifest&url=https://raw.githubusercontent.com/****-http.plist');//浏览器直接安装ipa
define('SERVER_APPSTORE_URL', ' http://itunes.apple.com/gb/app/yin/idxxxxxxxx');//去appstore安装
define('SERVER_ANDROID_URL', 'http://version.mygame.com/TOKENMAJORVER/major/app.apk');//apk下载
define('SERVER_DOWNLOAD_URL', 'http://version.mygame.com/TOKENMAJORVERSION/minor/fullres.zip');//资源整包下载
define('SERVER_APP_MD5', 'TOKENRESOURCE_MD5');//资源包MD5
define('SERVER_RESOURCE_BASE_PATH',’http://version.mygame.com/TOKENMAJORVERSION/minor/fullres/');//资源散文件
define('SERVER_RESOURCE_DIFF_PATH', ' http://version.mygame.com/TOKENMAJORVERSION/minor/diff/');//资源差异文件目录
?>
其他渠道的配置文件,结构一致
ClientDownload配置:
index.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
/*Usage:index.php?channelid=1*/
$channelid = $_GET['channelid']; //渠道
if (!isset($channelid)) {
echo 'fk with no appver';
return;
}
$channelfile = "channel-".$channelid.".php";
if (!file_exists($channelfile)) {
echo "fk with no appver"; //渠道不存在
return;
}
require($channelfile);
?>
<table align='center'>
<tr>
<?php
echo "<tr><td align='center'><a href='".constant('SERVER_ANDROID_URL')."'>下载".constant('APPNAME').constant('SERVER_MAJOR_VERSION_TXT')."Android版本</a></td></tr>";
echo "<tr><td align='center'><a href='".constant('SERVER_IOS_URL')."'>下载".constant('APPNAME').constant('SERVER_MAJOR_VERSION_TXT')."IPA版本</a></td></tr>";
echo "<tr><td align='center'><a href='".constant('SERVER_ITMS_URL')."'>点我直接安装".constant('APPNAME').constant('SERVER_MAJOR_VERSION_TXT')."</a></td></tr>";
echo "<tr><td align='center'><a href='".constant('SERVER_APPSTORE_URL')."'>去APPSTORE安装".constant('APPNAME').constant('SERVER_MAJOR_VERSION_TXT')."</a></td></tr>";
?>
</tr>
</table>
</body>
</html>
ClientUpdate配置:
check.php
<?php
/*
Usage:
check.php?channelid=1&appver=2&resver=3
返回值描述
1.客户端程序版本小于服务器程序版本,需要去appstore更新
2.资源版本为0,第一次进入游戏时的版本[SERVER_MAJOR_VERSION SERVER_RESOURCE_VERSION SERVER_APP_MD5 SERVER_DOWNLOAD_URL SERVER_RESOURCE_BASE_PATH]
3.资源版本大于0,但是小于服务器资源版本[SERVER_RESOURCE_VERSION MD5(PACKFILE) PACKFILE_URL SERVER_RESOURCE_BASE_PATH]
4.资源版本大于0,并且跟服务器资源版本匹配
错误 404
*/
$channelid = $$_GET["appver"]; //渠道
if (!isset($channelid)) {
echo "fk with no appver";
return;
}
$channelfile = "channel-" . $channelid . ".php";
if (!file_exists($channelfile)) {
echo "fk with no appver"; //渠道不存在
return;
}
require($channelfile);
$appver = $_GET["appver"]; //客户端程序版本
if (!isset($appver)) {
echo "fk with no appver";
return;
}
//客户端程序版本号不可能小于0
if ($appver <= 0) {
echo "fk with no appver";
return;
}
//客户端资源版本
$resver = $_GET["resver"];
if (!isset($resver)) {
echo "fk with no resver";
return;
}
//客户端资源版本号不可能小于0
if ($resver < 0) {
echo "fk with no resver";
return;
}
$SERVER_MAJOR_VERSION = constant('SERVER_MAJOR_VERSION');
$SERVER_MAJOR_VERSION_TXT = constant('SERVER_MAJOR_VERSION_TXT');
$SERVER_RESOURCE_VERSION = constant('SERVER_RESOURCE_VERSION');
$SERVER_DOWNLOAD_URL = constant('SERVER_DOWNLOAD_URL');
$SERVER_APP_MD5 = constant('SERVER_APP_MD5');
$SERVER_RESOURCE_BASE_PATH = constant('SERVER_RESOURCE_BASE_PATH');
$SERVER_RESOURCE_DIFF_PATH = constant('SERVER_RESOURCE_DIFF_PATH');
if ($appver < $SERVER_MAJOR_VERSION) {
$echo '1'.';'.$SERVER_MAJOR_VERSION_TXT;
return;
}
if ($resver == 0) {
echo '2;'.$SERVER_RESOURCE_VERSION.';'.$SERVER_APP_MD5.';'.$SERVER_DOWNLOAD_URL.';'.$SERVER_RESOURCE_BASE_PATH;
return;
}
if ($resver >= $SERVER_RESOURCE_VERSION) {
echo '4';
return;
}
$filename = 'minor/'.$SERVER_RESOURCE_VERSION.'/'.$resver.'.zip';
$url = $SERVER_RESOURCE_DIFF_PATH.$SERVER_RESOURCE_VERSION.'/'.$resver.'.zip';
$file_md5 = md5_file($filename);
if ($file_md5 == FALSE) {
echo '404';
return;
}
echo '3;'.$SERVER_RESOURCE_VERSION.';'.$file_md5.';'.$url.';'.= $SERVER_RESOURCE_BASE_PATH;
?>
【原创】我所理解的自动更新-概要
【原创】我所理解的自动更新-环境搭建和协议制定
【原创】我所理解的自动更新-外网web服务器配置
【原创】我所理解的自动更新-APP发布与后台发布
【原创】我所理解的自动更新-资源打包流程
【原创】我所理解的自动更新-客户端更新流程
【原创】我所理解的自动更新-知识点讲解
【原创】我所理解的自动更新-外网web服务器配置的更多相关文章
- 【原创】我所理解的自动更新-APP发布与后台发布
发布后台 创建渠道:添加新的渠道,设置渠道名称,自动生成渠道id. 查看渠道:查看渠道基本信息,渠道app版本号,资源版本号,是否开启更新. 创建/更新APP:选择打包ios,androi ...
- Linux下搭建SVN服务器及自动更新项目文件到web目录(www)的方法
首先搭建SVN服务器 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion ...
- Linux防火墙配置—访问外网WEB
一.实验目标 1.本次实验在"Linux基础网络搭建实验"的基础上,在外网虚拟机上搭建WEB服务,并分别配置外网和网关的防火墙规则,使内网能够访问WEB服务 2.Linux基础网络 ...
- 本地Server发布外网Web应用(Oray实现)
主要讲解如何将本地当做服务器,发布Web应用至外网访问. 准备条件: 1.web应用服务(此处为Tomcat作为web应用服务器): 2.花生壳应用: 第一步,正常搭建本地web项目,应用名为 ...
- ngrok外网登录本地Web服务器
首先在网上下载ngrok软件,然后cmd到其目录下,运行ngrok http 80即可打开服务器,然后自动生成外网连接,然后C:\inetpub\wwwroot下放置html网页,在公网即可打开
- jenkins外网slave配置
背景: 客户提供了测试服务器,但不能外网直连需要通过windows跳板进行进行连接. 方案设定将windows跳板机配置为远程slave节点. 技术支持: jenkins-slave windows ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架(五)预加载和Electron自动更新
导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更 ...
- Hibernate中的对象状态,及自动更新原因
Hibernate的对象有三种状态,分别为:瞬时状态 (Transient). 持久化状态(Persistent).游离状态(Detached).对它的深入理解,才能更好的理解hibernate的运行 ...
- fedora23没有/var/log/messages &如何禁用后台自动更新软件?
警告!! Linux是一个非常敏感的操作系统,若删除文件错误,很容易造成系统崩溃. fedora23没有/var/log/messages 不是没有messages这个文件,而是 从 fc core ...
随机推荐
- java并发控制:lock
一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 在上面一篇文章中,我们了解到如果一个代码块被syn ...
- bzoj2500: 幸福的道路(树形dp+单调队列)
好题.. 先找出每个节点的树上最长路 由树形DP完成 节点x,设其最长路的子节点为y 对于y的最长路,有向上和向下两种情况: down:y向子节点的最长路g[y][0] up:x的次长路的g[x][1 ...
- stl循环删除
struct st_data { st_data(int i) : id(i) {} int id; }; 对于STL标准序列容器vector/deque/list(以vector为例) 当我们需清空 ...
- 机器学习常用Python扩展包
在Ubuntu下安装Python模块通常有3种方法:1)使用apt-get:2)使用pip命令(推荐);3)easy_instal 可安装方法参考:[转]linux和windows下安装python集 ...
- AOP学习心得&jdk动态代理与cglib比较
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- php 验证(检查)日期格式是否正确
/** * 检查指定字符串是否为日期格式 年-月-日 * @param $date 日期字符串 * @return bool true 是日期格式 false 不是日期格式 */function va ...
- 更换Mac记录
1. 重装Mac (1)格式化硬盘 (2)重装系统 (3)修改各种配置:电脑名.键盘等 2. 安装必要软件 (1)QQ.微信.网易云音乐等 (2)火狐.谷歌.SourceTree等 (3)安装Git ...
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- [skill][gdb] gdb 多线程调试
中文快速入门: http://coolshell.cn/articles/3643.html (关于多线程的部署说的并不太对) 进阶: 多进程相关概念: inferiors 是什么? http://m ...
- 源码网站(msdn.itellyou.cn) good
verysource 100万源码http://www.verysource.com/category/delphi-vcl/ MSDN DOWNLOADhttp://msdn.itellyou.cn ...