说明:
扫码下载,在苹果系统中、微信、浏览器下载,都会跳转到对应的地址。
如果是安卓,那么就要区分一下喽。
安卓 浏览器 直接下载 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; }
或者上传到微信云
上传到腾讯微云。这个方法也是一个变相改变路径的过程,将我们的程序上传到腾讯的微云上