HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

uni-app 尺寸单位更改及历史版本兼容说明

rpx upx

注意:本文仅对使用过HBuilderX 0.1.45-48的用户有意义,集中在2018年8月。之后的用户无需关心此文。

自HBuilderX 0.1.49 之后创建的uni-app项目,使用 rpx(upx) 作为响应式尺寸单位,rpx 可以根据屏幕宽度进行自适应;在新创建的uni-app项目中,px 是传统css尺寸单位。

但历史版本的uni-app曾使用 px 作为响应式尺寸单位(作用同 rpx ),uni-app 框架保留了对历史创建项目的向下兼容,开发者可按如下方式维护升级历史项目。

方案1:继续保留 px 为响应式尺寸单位

uni-app 历史项目可以继续将 px 作为响应式尺寸单位,继续之前的尺寸换算,框架会自动处理。

Tips 1:动态绑定的 style不支持响应式尺寸单位

<!-- - 静态px赋值,此时为响应式单位 -->  
<view class="test" style="width:200px"></view>  
<!-- - 动态绑定不生效,此时变成传统css单位 -->  
<view class="test" :style="{width:winWidth + 'px;'}"></view>  

Tips 2:若在历史项目中引入了使用px作为传统css尺寸单位的的示例组件,比如 hello uni-app 中新增的 多列选择、联动选择示例(含城市选择),则会导致同一项目中,px既作为响应式尺寸单位,又作为传统css尺寸单位,导致混乱,此时建议按照如下方案2的步骤,将历史项目的px升级替换为rpx(注意更改manifest.json文件),然后再引入使用px作为传统css尺寸单位的的示例组件

方案2:使用 rpx 作为响应式尺寸单位

开发者可以按如下步骤将 px 升级为 rpx:

  • 全局搜索 px 替换为 rpx
  • 在manifest.json根节点下,增加"transformPx":false

注意:如此替换升级后,px 恢复为传统的css尺寸单位,不再根据屏幕宽度自动响应。

继续阅读 »

注意:本文仅对使用过HBuilderX 0.1.45-48的用户有意义,集中在2018年8月。之后的用户无需关心此文。

自HBuilderX 0.1.49 之后创建的uni-app项目,使用 rpx(upx) 作为响应式尺寸单位,rpx 可以根据屏幕宽度进行自适应;在新创建的uni-app项目中,px 是传统css尺寸单位。

但历史版本的uni-app曾使用 px 作为响应式尺寸单位(作用同 rpx ),uni-app 框架保留了对历史创建项目的向下兼容,开发者可按如下方式维护升级历史项目。

方案1:继续保留 px 为响应式尺寸单位

uni-app 历史项目可以继续将 px 作为响应式尺寸单位,继续之前的尺寸换算,框架会自动处理。

Tips 1:动态绑定的 style不支持响应式尺寸单位

<!-- - 静态px赋值,此时为响应式单位 -->  
<view class="test" style="width:200px"></view>  
<!-- - 动态绑定不生效,此时变成传统css单位 -->  
<view class="test" :style="{width:winWidth + 'px;'}"></view>  

Tips 2:若在历史项目中引入了使用px作为传统css尺寸单位的的示例组件,比如 hello uni-app 中新增的 多列选择、联动选择示例(含城市选择),则会导致同一项目中,px既作为响应式尺寸单位,又作为传统css尺寸单位,导致混乱,此时建议按照如下方案2的步骤,将历史项目的px升级替换为rpx(注意更改manifest.json文件),然后再引入使用px作为传统css尺寸单位的的示例组件

方案2:使用 rpx 作为响应式尺寸单位

开发者可以按如下步骤将 px 升级为 rpx:

  • 全局搜索 px 替换为 rpx
  • 在manifest.json根节点下,增加"transformPx":false

注意:如此替换升级后,px 恢复为传统的css尺寸单位,不再根据屏幕宽度自动响应。

收起阅读 »

安卓index.html 如何传参数啊? 只能设置appBasePath啊

目前安卓只能这样:
/**

  • 5+内核初始化完成时触发
  • */
    @Override
    public void onCoreInitEnd(ICore coreHandler) {
    String appBasePath = "/apps/H5928EE6E";
    String args = "{url:'http://www.baidu.com'}";

    app = SDK.startWebApp(activity, appBasePath, args, new IWebviewStateListener() {  
        // 设置Webview事件监听,可在监监听内获取WebIvew加载内容的进度  
        @Override  
        public Object onCallBack(int pType, Object pArgs) {  
            switch (pType) {  
            case IWebviewStateListener.ON_WEBVIEW_READY:  
    
                IWebview webview = ((IWebview) pArgs);  

只能设置appBasePath,不能像苹果那样可以设置路径到index.html 这一层,如果能设置到index.html这一层到话,我就可以在index.html后面加参数,比如:/apps/H5928EE6E/www/......./index.html?param=xxx
,我知道可以设置args,然后通过plus.runtime...来获取,但是 我需要的是在plusReady之前就能获取到参数。
麻烦了。

继续阅读 »

目前安卓只能这样:
/**

  • 5+内核初始化完成时触发
  • */
    @Override
    public void onCoreInitEnd(ICore coreHandler) {
    String appBasePath = "/apps/H5928EE6E";
    String args = "{url:'http://www.baidu.com'}";

    app = SDK.startWebApp(activity, appBasePath, args, new IWebviewStateListener() {  
        // 设置Webview事件监听,可在监监听内获取WebIvew加载内容的进度  
        @Override  
        public Object onCallBack(int pType, Object pArgs) {  
            switch (pType) {  
            case IWebviewStateListener.ON_WEBVIEW_READY:  
    
                IWebview webview = ((IWebview) pArgs);  

只能设置appBasePath,不能像苹果那样可以设置路径到index.html 这一层,如果能设置到index.html这一层到话,我就可以在index.html后面加参数,比如:/apps/H5928EE6E/www/......./index.html?param=xxx
,我知道可以设置args,然后通过plus.runtime...来获取,但是 我需要的是在plusReady之前就能获取到参数。
麻烦了。

收起阅读 »

一套 B2B2C 积分返还商城模板

该模板基于MUI开发尽量保证MUI的原有功能并结合了iconfont图标库、大大提升填补了MUI缺少及美化页面,美化页面如下:

主页美化、产品列表(筛选)、产品详情(加入购物车弹层、右上角下拉)、商家详情(基于MUI多页面切换)、购物车(购物车多选)、购物车订单结算、会员中心美化(居中弹层)、收货地址(地区选择)、关于我们(基于MUI多页面切换)、订单列表、订单详情(物流查询页面)、产品评论(星级评价)、登录注册页面美化。
http://www.8sk.cn/Download/760.html

继续阅读 »

该模板基于MUI开发尽量保证MUI的原有功能并结合了iconfont图标库、大大提升填补了MUI缺少及美化页面,美化页面如下:

主页美化、产品列表(筛选)、产品详情(加入购物车弹层、右上角下拉)、商家详情(基于MUI多页面切换)、购物车(购物车多选)、购物车订单结算、会员中心美化(居中弹层)、收货地址(地区选择)、关于我们(基于MUI多页面切换)、订单列表、订单详情(物流查询页面)、产品评论(星级评价)、登录注册页面美化。
http://www.8sk.cn/Download/760.html

收起阅读 »

HTML编程之如何使用JS实现前端缓存

  在前端浏览器中,有些数据(比如数据字典中的数据),可以在第一次请求的时候全部拿过来保存在js对象中,以后需要的时候就不用每次都去请求服务器了。对于那些大量使用数据字典来填充下拉框的页面,这种方法可以极大地减少对服务器的访问。因此这种方法特别适用于使用iframe的框架。

  具体实现思路和方法如下:

  创建一个cache.js文件:

  1、前端页面,定义那些数据需要一次性拿到前端缓存,定义一个对象来保存这些数据:

  /**

  * 定义需要在用户登录的时候获取到本地的数据字典类别

  */

  var clsCodes = {"clsCodes" :

  ["BOOL",

  "STATUS",

  "USER_TYPE",

  "REPORT_STATUS"

  ]

  };

  /**

  * 获取数据字典到本地

  */

  var dicts;

  2、前端页面,定义一个函数来调用后台接口获取数据,然后保存到本地缓存对象(dicts)中。

  function getDicts() {

  $.post(getContextPath() + "/api/sys/getDictList",

  clsCodes,

  function(resultBean, status, xhRequest) {

  if (resultBean.data != undefined) {

  dicts = resultBean.data;

  }

  },

  'json');

  }

  在主页面加载的时候调用这个方法一次性获取数据并缓存起来。这样,以后需要同样的数据,就直接从本地对象dicts中获取了。如果大家还存在疑问的话,可以留言咨询,我们可以共同学习,一起进步。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

继续阅读 »

  在前端浏览器中,有些数据(比如数据字典中的数据),可以在第一次请求的时候全部拿过来保存在js对象中,以后需要的时候就不用每次都去请求服务器了。对于那些大量使用数据字典来填充下拉框的页面,这种方法可以极大地减少对服务器的访问。因此这种方法特别适用于使用iframe的框架。

  具体实现思路和方法如下:

  创建一个cache.js文件:

  1、前端页面,定义那些数据需要一次性拿到前端缓存,定义一个对象来保存这些数据:

  /**

  * 定义需要在用户登录的时候获取到本地的数据字典类别

  */

  var clsCodes = {"clsCodes" :

  ["BOOL",

  "STATUS",

  "USER_TYPE",

  "REPORT_STATUS"

  ]

  };

  /**

  * 获取数据字典到本地

  */

  var dicts;

  2、前端页面,定义一个函数来调用后台接口获取数据,然后保存到本地缓存对象(dicts)中。

  function getDicts() {

  $.post(getContextPath() + "/api/sys/getDictList",

  clsCodes,

  function(resultBean, status, xhRequest) {

  if (resultBean.data != undefined) {

  dicts = resultBean.data;

  }

  },

  'json');

  }

  在主页面加载的时候调用这个方法一次性获取数据并缓存起来。这样,以后需要同样的数据,就直接从本地对象dicts中获取了。如果大家还存在疑问的话,可以留言咨询,我们可以共同学习,一起进步。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

收起阅读 »

hbuildX打包苹果企业版证书,发布出去是内测版。用hbuilder 打包是正常的企业版

hbuildX打包苹果企业版证书,发布出去是内测版。用hbuilder 打包是正常的企业版

hbuildX打包苹果企业版证书,发布出去是内测版。用hbuilder 打包是正常的企业版

如何批量安装apk到手机

多光标 批量安装apk

如果你有多个apk在电脑上,期望批量安装到手机上,那么本文就是你想要的。
HBuilderX的多光标对于批量操作有巨大效率帮助。
分享下我自己的经验。

第1步. 资源管理器里新建一个installapks.bat(文件名随意,可以用txt改后缀),点右键使用HBuilderX打开

第2步. 把资源管理器的一堆apk选中,拖入HBuilderX的这个bat编辑器,或者在资源管理器里复制然后粘贴到HBuilderX的编辑器里,得到如下文档内容:

file:///D:/Downloads/65624.apk  
file:///D:/Downloads/13641.apk  
file:///D:/Downloads/74707.apk  
file:///D:/Downloads/43805.apk  
file:///D:/Downloads/72811.apk  
file:///D:/Downloads/93502.apk  
file:///D:/Downloads/24900.apk  
file:///D:/Downloads/51039.apk  
file:///D:/Downloads/31703.apk  
file:///D:/Downloads/80758.apk

注:如果你在HBuilderX的markdown文档里粘贴,会自动变成这种超链接格式,此时按Ctrl+z会还原为文本格式。

第3步. 复制一段文字"adb install -r "到剪切板

第4步. 清除每行开头的"file:///"并替换为"adb install -r "

这里方法很多种:

  • 按下alt,鼠标拖选,执行列选择,选中整列的"file:///"然后粘贴
  • 选中一个"file:///",然后Ctrl+h执行替换,在右上角的替换框里粘贴"adb install -r ",点全部替换
    得到如下文档内容:
    adb install -r D:/Downloads/65624.apk  
    adb install -r D:/Downloads/13641.apk  
    adb install -r D:/Downloads/74707.apk  
    adb install -r D:/Downloads/43805.apk  
    adb install -r D:/Downloads/72811.apk  
    adb install -r D:/Downloads/93502.apk  
    adb install -r D:/Downloads/24900.apk  
    adb install -r D:/Downloads/51039.apk  
    adb install -r D:/Downloads/31703.apk  
    adb install -r D:/Downloads/80758.apk

    第5步. 确保adb命令的存在

    如果你本机电脑的adb已经在环境变量里了,那就可以直接双击运行这个bat文件了。
    如果没有adb,那么HBuilderX的"工具-插件管理"里安装"App开发真机运行"插件时会自带一个adb,如你用HBuilderX开发app则会自动安装这个插件。
    它的目录在HBuilderX的plugins\launcher\base\下
    此时在这个bat文件的第一行,加入如下文字内容:cd D:\Software\HBuilderX\plugins\launcher\base
    然后保存,在资源管理器里双击bat运行即可
    完整文档格式如下:

    cd D:\Software\HBuilderX\plugins\launcher\base  
    adb install -r D:/Downloads/65624.apk  
    adb install -r D:/Downloads/13641.apk  
    adb install -r D:/Downloads/74707.apk  
    adb install -r D:/Downloads/43805.apk  
    adb install -r D:/Downloads/72811.apk  
    adb install -r D:/Downloads/93502.apk  
    adb install -r D:/Downloads/24900.apk  
    adb install -r D:/Downloads/51039.apk  
    adb install -r D:/Downloads/31703.apk  
    adb install -r D:/Downloads/80758.apk
继续阅读 »

如果你有多个apk在电脑上,期望批量安装到手机上,那么本文就是你想要的。
HBuilderX的多光标对于批量操作有巨大效率帮助。
分享下我自己的经验。

第1步. 资源管理器里新建一个installapks.bat(文件名随意,可以用txt改后缀),点右键使用HBuilderX打开

第2步. 把资源管理器的一堆apk选中,拖入HBuilderX的这个bat编辑器,或者在资源管理器里复制然后粘贴到HBuilderX的编辑器里,得到如下文档内容:

file:///D:/Downloads/65624.apk  
file:///D:/Downloads/13641.apk  
file:///D:/Downloads/74707.apk  
file:///D:/Downloads/43805.apk  
file:///D:/Downloads/72811.apk  
file:///D:/Downloads/93502.apk  
file:///D:/Downloads/24900.apk  
file:///D:/Downloads/51039.apk  
file:///D:/Downloads/31703.apk  
file:///D:/Downloads/80758.apk

注:如果你在HBuilderX的markdown文档里粘贴,会自动变成这种超链接格式,此时按Ctrl+z会还原为文本格式。

第3步. 复制一段文字"adb install -r "到剪切板

第4步. 清除每行开头的"file:///"并替换为"adb install -r "

这里方法很多种:

  • 按下alt,鼠标拖选,执行列选择,选中整列的"file:///"然后粘贴
  • 选中一个"file:///",然后Ctrl+h执行替换,在右上角的替换框里粘贴"adb install -r ",点全部替换
    得到如下文档内容:
    adb install -r D:/Downloads/65624.apk  
    adb install -r D:/Downloads/13641.apk  
    adb install -r D:/Downloads/74707.apk  
    adb install -r D:/Downloads/43805.apk  
    adb install -r D:/Downloads/72811.apk  
    adb install -r D:/Downloads/93502.apk  
    adb install -r D:/Downloads/24900.apk  
    adb install -r D:/Downloads/51039.apk  
    adb install -r D:/Downloads/31703.apk  
    adb install -r D:/Downloads/80758.apk

    第5步. 确保adb命令的存在

    如果你本机电脑的adb已经在环境变量里了,那就可以直接双击运行这个bat文件了。
    如果没有adb,那么HBuilderX的"工具-插件管理"里安装"App开发真机运行"插件时会自带一个adb,如你用HBuilderX开发app则会自动安装这个插件。
    它的目录在HBuilderX的plugins\launcher\base\下
    此时在这个bat文件的第一行,加入如下文字内容:cd D:\Software\HBuilderX\plugins\launcher\base
    然后保存,在资源管理器里双击bat运行即可
    完整文档格式如下:

    cd D:\Software\HBuilderX\plugins\launcher\base  
    adb install -r D:/Downloads/65624.apk  
    adb install -r D:/Downloads/13641.apk  
    adb install -r D:/Downloads/74707.apk  
    adb install -r D:/Downloads/43805.apk  
    adb install -r D:/Downloads/72811.apk  
    adb install -r D:/Downloads/93502.apk  
    adb install -r D:/Downloads/24900.apk  
    adb install -r D:/Downloads/51039.apk  
    adb install -r D:/Downloads/31703.apk  
    adb install -r D:/Downloads/80758.apk
收起阅读 »

云打包失败,也没有任何报错。原因是图片名称含中文

uni_app HBuilder 云打包

记录一个云打包不成功但是又没有任何错误提示的问题以及我的排错方式

直接说问题所在: 项目中引用了包含中文名字的图片,经过验证,把名字改成不含中文就打包成功,再改成中文就失败

出现问题:

第一天还成功打包过这个项目,第二天就打包不成功。
打包的状态知道编译完成,然后没有动静了,没有弹框提示,也没有报错,尝试多次还是一样。

可能原因:

1、官方云打包暂时出问题 (咨询后排除)
2、编辑器出问题 (通过新建项目运行打包,打包成功,此项排除)
3、项目本身问题

第三个问题的排除方法:

上一次打包成功后新增了代码,同时还合并了同事的代码。
1、通过git回滚,定位是哪一个commit出的问题
2、再查看出问题的那个版本里有了哪些改变
3、一个个排除这些改变

最后定位到了中文名称图片的问题,折腾了大半天,终于解决了问题。
不知道这个算不算bug,还是说官方已经说明不能用中文名的图片或者文件,只是我没有看到而已。
当时使用的HX是8月23号发的版本

继续阅读 »

记录一个云打包不成功但是又没有任何错误提示的问题以及我的排错方式

直接说问题所在: 项目中引用了包含中文名字的图片,经过验证,把名字改成不含中文就打包成功,再改成中文就失败

出现问题:

第一天还成功打包过这个项目,第二天就打包不成功。
打包的状态知道编译完成,然后没有动静了,没有弹框提示,也没有报错,尝试多次还是一样。

可能原因:

1、官方云打包暂时出问题 (咨询后排除)
2、编辑器出问题 (通过新建项目运行打包,打包成功,此项排除)
3、项目本身问题

第三个问题的排除方法:

上一次打包成功后新增了代码,同时还合并了同事的代码。
1、通过git回滚,定位是哪一个commit出的问题
2、再查看出问题的那个版本里有了哪些改变
3、一个个排除这些改变

最后定位到了中文名称图片的问题,折腾了大半天,终于解决了问题。
不知道这个算不算bug,还是说官方已经说明不能用中文名的图片或者文件,只是我没有看到而已。
当时使用的HX是8月23号发的版本

收起阅读 »

终于解决:uni.getLocation 这个大bug终于确定了,官方还请跟进一下

targetSdkVersion

经过几天的辗转反侧,终于从坑里面走出来!

miui 在 "targetSdkVersion" : 26, 无法获得 uni.getLocation.

目前解决办法,targetSdkVersion 改成 23就好了。

但是 谷歌和小米商店,已经强制 targetSdkVersion 必须是 26. 请官方修改哦。

目前 uniapp 默认的targetSDKVersion 是 21,所以你怎么测试,都是可以,都觉得我的无理取闹!

继续阅读 »

经过几天的辗转反侧,终于从坑里面走出来!

miui 在 "targetSdkVersion" : 26, 无法获得 uni.getLocation.

目前解决办法,targetSdkVersion 改成 23就好了。

但是 谷歌和小米商店,已经强制 targetSdkVersion 必须是 26. 请官方修改哦。

目前 uniapp 默认的targetSDKVersion 是 21,所以你怎么测试,都是可以,都觉得我的无理取闹!

收起阅读 »

uni-app 在 miui9.6 无法获得定位:uni.getLocation,三星,苹果,美图测试正常。

uni-app 在 miui9.6 无法获得定位:uni.getLocation,三星,苹果,美图测试正常。

H5+ miui9.6 定位 测试正常。

uni-app 在 miui9.6 无法获得定位:uni.getLocation,三星,苹果,美图测试正常。

H5+ miui9.6 定位 测试正常。

分享一个wap2app升级检测-安卓/苹果设备【详细】

升级更新 wap2app

这是一个比较详细的教程
客户端的检测代码+服务端的php代码就可以检测了!

需要注意的是,检测更新在真机调试的情况下是没有效果的,一定要发行原生安装包 安装在手机测试才有效果

1.客户端app.js添加检测代码

  /************升级检测代码开始********** */  
        var ua = navigator.userAgent;  
        //Html5Plus环境,但不是流应用环境  
        if(ua.indexOf('Html5Plus') > -1 && ua.indexOf('StreamApp') == -1) {  
            var server = "http://****.com/c***.php"; //检查更新地址  
            var req = { //升级检测数据  
                "appid": plus.runtime.appid,  
                "version": plus.runtime.version,  
                "imei": plus.device.imei,  
                "plus":plus.os.name  
            };  
            //注释部分是wap2app封装的post请求。示例使用get请求  
            wap2app.ajax.get(server, req, function(rsp) {  
                if(rsp && rsp.status) {  
                    //需要更新,提示用户  
                    plus.nativeUI.confirm(rsp.note, function(event) {  
                        if(0 == event.index) { //用户点击了“立即更新”按钮  
                            plus.runtime.openURL(rsp.url);  
                        }  
                    }, rsp.title, ["立即更新", "取  消"]);  
                }  
            });  
        }  
        /************升级检测代码结束********** */

2.可能刚接触wap2app封装的人不知道把检测代码添加到app.js里的哪个位置,那我就把我已经添加好检测代码的app.js全部代码发出来吧

App({  
    options: {  
        debug: false  
    },  
    /**  
     * 当wap2app初始化完成时,会触发 onLaunch  
     */  
    onLaunch: function() {  
        console.log('launch');  
        /************升级检测代码开始********** */  
        var ua = navigator.userAgent;  
        //Html5Plus环境,但不是流应用环境  
        if(ua.indexOf('Html5Plus') > -1 && ua.indexOf('StreamApp') == -1) {  
            var server = "http://****.com/c***.php"; //检查更新地址  
            var req = { //升级检测数据  
                "appid": plus.runtime.appid,  
                "version": plus.runtime.version,  
                "imei": plus.device.imei,  
                "plus":plus.os.name  
            };  
            //注释部分是wap2app封装的post请求。示例使用get请求  
            wap2app.ajax.get(server, req, function(rsp) {  
                if(rsp && rsp.status) {  
                    //需要更新,提示用户  
                    plus.nativeUI.confirm(rsp.note, function(event) {  
                        if(0 == event.index) { //用户点击了“立即更新”按钮  
                            plus.runtime.openURL(rsp.url);  
                        }  
                    }, rsp.title, ["立即更新", "取  消"]);  
                }  
            });  
        }  
        /************升级检测代码结束********** */  
    },  
    /**  
     * 当wap2app启动,或从后台进入前台显示,会触发 onShow  
     */  
    onShow: function() {  
        console.log('show');  
    },  
    /**  
     * 当wap2app从前台进入后台,会触发 onHide  
     */  
    onHide: function() {  
        console.log('hide');  
    }  
});  
Page('__W2A__www.xxxx.com', { //首页扩展配置  
    onShow: function() {  

    },  
    onClose: function() {  

    }  
});

3.服务端那边是一个PHP文件
官方文档那边有验证客户端appid的,被我去掉了

代码如下:

<?php  
error_reporting(E_ALL^E_NOTICE^E_WARNING);  
header('Content-Type:text/html;charset=utf-8');  
function down(){  
$appid = $_GET['appid'];  
$version = $_GET['version'];  
$os= $_GET['plus'];   
$imei= $_GET['imei'];   
$rsp = array('status' => 0);  
if (isset($appid) && isset($version)) {  
if($version !== "1.1"){ //最新版本号  
$rsp['status'] = 1;  
$rsp['title'] = "Hello 版本更新";  
$rsp['note'] = "本次更新了,此为自定义内容";  
if($os == 'Android'){  
$rsp['url'] = "http://***.com/***.apk"; //安卓安装包地址  
}else{  
$rsp['url'] = "https://itunes.apple.com/cn/app/xxx"; //苹果点击更新后跳转的地址,可以是自己的网页的,也可以是苹果商店的  
}}}exit(json_encode($rsp));}  
$data=down($getdh);    
echo $data;

4.服务端那边php文件里的【最新版本号】要大于之前安装包的版本号才会检测更新

  1. 要改的地方也就客户端app.js里的检测地址、服务器端PHP的版本号、安卓下载地址,苹果点击更新按钮后跳转的地址、更新弹窗提示文字。

继续阅读 »

这是一个比较详细的教程
客户端的检测代码+服务端的php代码就可以检测了!

需要注意的是,检测更新在真机调试的情况下是没有效果的,一定要发行原生安装包 安装在手机测试才有效果

1.客户端app.js添加检测代码

  /************升级检测代码开始********** */  
        var ua = navigator.userAgent;  
        //Html5Plus环境,但不是流应用环境  
        if(ua.indexOf('Html5Plus') > -1 && ua.indexOf('StreamApp') == -1) {  
            var server = "http://****.com/c***.php"; //检查更新地址  
            var req = { //升级检测数据  
                "appid": plus.runtime.appid,  
                "version": plus.runtime.version,  
                "imei": plus.device.imei,  
                "plus":plus.os.name  
            };  
            //注释部分是wap2app封装的post请求。示例使用get请求  
            wap2app.ajax.get(server, req, function(rsp) {  
                if(rsp && rsp.status) {  
                    //需要更新,提示用户  
                    plus.nativeUI.confirm(rsp.note, function(event) {  
                        if(0 == event.index) { //用户点击了“立即更新”按钮  
                            plus.runtime.openURL(rsp.url);  
                        }  
                    }, rsp.title, ["立即更新", "取  消"]);  
                }  
            });  
        }  
        /************升级检测代码结束********** */

2.可能刚接触wap2app封装的人不知道把检测代码添加到app.js里的哪个位置,那我就把我已经添加好检测代码的app.js全部代码发出来吧

App({  
    options: {  
        debug: false  
    },  
    /**  
     * 当wap2app初始化完成时,会触发 onLaunch  
     */  
    onLaunch: function() {  
        console.log('launch');  
        /************升级检测代码开始********** */  
        var ua = navigator.userAgent;  
        //Html5Plus环境,但不是流应用环境  
        if(ua.indexOf('Html5Plus') > -1 && ua.indexOf('StreamApp') == -1) {  
            var server = "http://****.com/c***.php"; //检查更新地址  
            var req = { //升级检测数据  
                "appid": plus.runtime.appid,  
                "version": plus.runtime.version,  
                "imei": plus.device.imei,  
                "plus":plus.os.name  
            };  
            //注释部分是wap2app封装的post请求。示例使用get请求  
            wap2app.ajax.get(server, req, function(rsp) {  
                if(rsp && rsp.status) {  
                    //需要更新,提示用户  
                    plus.nativeUI.confirm(rsp.note, function(event) {  
                        if(0 == event.index) { //用户点击了“立即更新”按钮  
                            plus.runtime.openURL(rsp.url);  
                        }  
                    }, rsp.title, ["立即更新", "取  消"]);  
                }  
            });  
        }  
        /************升级检测代码结束********** */  
    },  
    /**  
     * 当wap2app启动,或从后台进入前台显示,会触发 onShow  
     */  
    onShow: function() {  
        console.log('show');  
    },  
    /**  
     * 当wap2app从前台进入后台,会触发 onHide  
     */  
    onHide: function() {  
        console.log('hide');  
    }  
});  
Page('__W2A__www.xxxx.com', { //首页扩展配置  
    onShow: function() {  

    },  
    onClose: function() {  

    }  
});

3.服务端那边是一个PHP文件
官方文档那边有验证客户端appid的,被我去掉了

代码如下:

<?php  
error_reporting(E_ALL^E_NOTICE^E_WARNING);  
header('Content-Type:text/html;charset=utf-8');  
function down(){  
$appid = $_GET['appid'];  
$version = $_GET['version'];  
$os= $_GET['plus'];   
$imei= $_GET['imei'];   
$rsp = array('status' => 0);  
if (isset($appid) && isset($version)) {  
if($version !== "1.1"){ //最新版本号  
$rsp['status'] = 1;  
$rsp['title'] = "Hello 版本更新";  
$rsp['note'] = "本次更新了,此为自定义内容";  
if($os == 'Android'){  
$rsp['url'] = "http://***.com/***.apk"; //安卓安装包地址  
}else{  
$rsp['url'] = "https://itunes.apple.com/cn/app/xxx"; //苹果点击更新后跳转的地址,可以是自己的网页的,也可以是苹果商店的  
}}}exit(json_encode($rsp));}  
$data=down($getdh);    
echo $data;

4.服务端那边php文件里的【最新版本号】要大于之前安装包的版本号才会检测更新

  1. 要改的地方也就客户端app.js里的检测地址、服务器端PHP的版本号、安卓下载地址,苹果点击更新按钮后跳转的地址、更新弹窗提示文字。

收起阅读 »

没有微信小程序APPID时候,在uni-app中使用测试APPID代替

很多时候微信小程序的正式APPID还没有注册下来,没有APPID小程序开发功能并不完整。这个时候就可以在小程序开发者工具中先获取测试APPID,然后配置到HX项目中。

第一步:先在微信开发者工具里面获取到测试APPID,如图


点击小程序获取测试APPID

第二步:在uni-app配置项中加入APPID即可,如图

再次编译后,微信开发者工具就可以拥有全部的开发功能了

继续阅读 »

很多时候微信小程序的正式APPID还没有注册下来,没有APPID小程序开发功能并不完整。这个时候就可以在小程序开发者工具中先获取测试APPID,然后配置到HX项目中。

第一步:先在微信开发者工具里面获取到测试APPID,如图


点击小程序获取测试APPID

第二步:在uni-app配置项中加入APPID即可,如图

再次编译后,微信开发者工具就可以拥有全部的开发功能了

收起阅读 »

郑州小程序开发比较适合什么行业投资

微信小程序 小程序

  郑州小程序开发认为目前小程序主要的优势就是在流量上的优势,而小程序的出现也让越来越多的人相信,小程序的仍然有很大的发展空间,那么小程序开发有哪些类型呢,对于投资者来说哪些行业适合做小程序呢? 今天就为大家分析解答一下吧。

  1、在线点餐小程序 。对于生意火爆的餐厅来说,最影响服务质量的一个因素之一,就是消费者排队时间长。如果商家开发有自己的小程序,消费者便能自主下单,还能选择座位,结账支付后直接退出页面即可,操作过程简单,也不会占用手机内存。

  2、电商小程序。这是目前最为常见的小程序类型。这类型小程序具有产品展示和支付功能,用户可以直接通过小程序挑选和购买商品,不需要跳转到第三方平台。电商小程序的优势是,缩短了用户的决策路径,降低了用户的决策时间,让交易变得更高效。而且小程序还带有客服功能,消费过程中同样可以实现一对一交流。

  3、酒店预订小程序。网络预定酒店已经成为八零九零后出行的普遍方式,除了优惠力度大以外,网络预订很便捷,也是吸引他们的主要原因。酒店预订类小程序同样具备导航功能和在线支付功能。小程序与官网配合使用,也是提高品牌知名度的有效方法,无论是酒店还是民宿,有个自己的小程序,也是很有必要。

  4、互动功能类。互动类的小程序近期也出现得比较多,不过这类小程序一旦造成刷屏,就很容易被封号,总之,还是要按照微信规则来进行开发和推广。微信小程序开发成本低,技术难度小,用户体验更佳,无论哪种类型的商家,都能在小程序中挖掘到最适合自己的引流方式。

  微信小程序已经成为互联网的一匹黑马,从刚刚发布时的不被看好,到现在的火爆,中间不到两年的时间,虽然经历了一些起伏,但小程序毫无疑问已经成为目前各企业抢占流量的主要入口。即便是不太关注互联网行业的普通用户,也能充分感受到小程序的发展速度。所以对于企业投资者来说,现在要做的就是抓住机遇,开发一款适合自己行业的小程序来盈利。
本文由专业的郑州小程序开发燚轩科技整理发布,如需转载请注明出处。

继续阅读 »

  郑州小程序开发认为目前小程序主要的优势就是在流量上的优势,而小程序的出现也让越来越多的人相信,小程序的仍然有很大的发展空间,那么小程序开发有哪些类型呢,对于投资者来说哪些行业适合做小程序呢? 今天就为大家分析解答一下吧。

  1、在线点餐小程序 。对于生意火爆的餐厅来说,最影响服务质量的一个因素之一,就是消费者排队时间长。如果商家开发有自己的小程序,消费者便能自主下单,还能选择座位,结账支付后直接退出页面即可,操作过程简单,也不会占用手机内存。

  2、电商小程序。这是目前最为常见的小程序类型。这类型小程序具有产品展示和支付功能,用户可以直接通过小程序挑选和购买商品,不需要跳转到第三方平台。电商小程序的优势是,缩短了用户的决策路径,降低了用户的决策时间,让交易变得更高效。而且小程序还带有客服功能,消费过程中同样可以实现一对一交流。

  3、酒店预订小程序。网络预定酒店已经成为八零九零后出行的普遍方式,除了优惠力度大以外,网络预订很便捷,也是吸引他们的主要原因。酒店预订类小程序同样具备导航功能和在线支付功能。小程序与官网配合使用,也是提高品牌知名度的有效方法,无论是酒店还是民宿,有个自己的小程序,也是很有必要。

  4、互动功能类。互动类的小程序近期也出现得比较多,不过这类小程序一旦造成刷屏,就很容易被封号,总之,还是要按照微信规则来进行开发和推广。微信小程序开发成本低,技术难度小,用户体验更佳,无论哪种类型的商家,都能在小程序中挖掘到最适合自己的引流方式。

  微信小程序已经成为互联网的一匹黑马,从刚刚发布时的不被看好,到现在的火爆,中间不到两年的时间,虽然经历了一些起伏,但小程序毫无疑问已经成为目前各企业抢占流量的主要入口。即便是不太关注互联网行业的普通用户,也能充分感受到小程序的发展速度。所以对于企业投资者来说,现在要做的就是抓住机遇,开发一款适合自己行业的小程序来盈利。
本文由专业的郑州小程序开发燚轩科技整理发布,如需转载请注明出处。

收起阅读 »