说明:
扫码下载,在苹果系统中、微信、浏览器下载,都会跳转到对应的地址。
如果是安卓,那么就要区分一下喽。
安卓 浏览器 直接下载 apk 文件是没有问题的,可以直接下载。
那么在微信端如何进行下载呢?
如何确定是不是微信呢? $_SERVER['HTTP_USER_AGENT'] 判断里面有没有 MicroMessenger
MicroMessenger
如果包含,就是微信。
那么解决微信扫码下载肿么办?
解决方案有很多种,我选择了一种通用的方式:
如果是安卓,就先打开一个页面: 然后通过 右侧 的三个点 ,点击 在浏览器中打开。
下面图片自行做一张吧,呵呵,这里就不提供喽。

然后重新访问到这个下载页后,会走到 android() 方法,
那么就能在浏览器直接下载apk文件了。
先上代码
<?php
defined('BASEPATH') OR exit('No allow direct access script.');
class Download extends qb_Controller {
/**
* 根据扫码进入下载
*/
public function index() {
errorLog('当前平台platform:' . $this->getPlatform());
switch ($this->getPlatform()) {
case 'ios':
$this->ios();
break;
case 'android':
$this->android();
break;
case 'android_wx':
$this->android_wx();
break;
default:
//显示页面
goRedirect(302, 'home/index');
}
}
private function android_wx() {
$result = [];
$this->smarty->view('download', $result);
}
/**
* 安卓下载
*/
private function android() {
$result = $this->Download_model->downfile('android');
if ($result['result']['appPackageUrl'])
redirect($result['result']['appPackageUrl'], 'get', 302);
else {
$result = ['type' => 'android', 'message' => '下载文件未找到'];
$this->smarty->view('download', $result);
}
}
private function ios() {
//如果已经存在,就跳转到这里
//redirect('https://itunes.apple.com/cn/app/id1322819356');
$result = ['type' => 'ios', 'message' => '您好iOS客户端暂未上线,敬请期待。'];
$this->smarty->view('download', $result);
}
private function getPlatform() {
$this->load->library("User_agent");
$platform = strtolower($this->agent->platform());
$isWeixin = strpos(strtolower($this->agent->agent_string()), 'micromessenger') !== FALSE;
if ($platform === 'android' && $isWeixin) {
$platform = 'android_wx';
}
return $platform;
}
}
Download_model.php
<?php
class Download_model extends Base_Model {
const HEADER = [
'imei' => 'xxxxxx', //选填
'deviceToken' => 'xxxxxx',
'version' => STATIC_DATE,
'platform' => 'czccb',
'content-type' => 'application/json'
];
private $source = '';
protected function _init() {
$this->_host = APP_DOWNLOAD_URL;
}
/**
* 请求远程地址
* @link
public function downfile($platform) {
$param = [];
$this->source = $platform;
$result = $this->fetchPost('/api/pub/v3/fp/getProductVersionByAppType', $param);
return $result;
}
protected function fetchBefore($url, $data) {
$header = [
'source' => $this->source
];
$this->setRequestHeader(self::HEADER + $header);
return jsonencode(['content' => $data]);
}
protected function fetchAfter($url, $data) {
if (!empty($data['result']) && is_string($data['result'])) {
$data['result'] = jsondecode($data['result']);
} else {
show_error('Download请求错误');
}
return $data;
}
protected function fetchFinish($data) {
if (!is_array($data)) {
showError();
}
switch ($data['status']) {
case '00000000' : //成功
break;
default:
showError($data['message'] ?: API_FAILURE_MSG);
}
return $data;
}
}JS判断是不是微信
if(ua.match(/MicroMessenger/i) == 'micromessenger'){
return true;
}else{
return false;
}或者上传到微信云
上传到腾讯微云。这个方法也是一个变相改变路径的过程,将我们的程序上传到腾讯的微云上