HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

iOS离线打包-高德地图配置

App离线打包

高德地图配置

Linker Flags、framework等添加方法请参考这个文档
1.添加下列Linker Flags: -llibMap、-lAMapImp

  1. 添加下列framework: MAMapKit.framework、AMapSearchKit.framework、OpenGlES.framework、CoreLocation.framework
  2. 添加下列文件: AMap.bundle
    4.申请key,如果没有key将会导致地图显示不出
    参考高德地图key申请章节
  3. 打开Info.plist文件找到amap项,如果没有按图片中的格式添加该项,在下图中的红色区域输入申请的key
    注意info.plist中Bundle identifier要和你输入的安全码一致
继续阅读 »

高德地图配置

Linker Flags、framework等添加方法请参考这个文档
1.添加下列Linker Flags: -llibMap、-lAMapImp

  1. 添加下列framework: MAMapKit.framework、AMapSearchKit.framework、OpenGlES.framework、CoreLocation.framework
  2. 添加下列文件: AMap.bundle
    4.申请key,如果没有key将会导致地图显示不出
    参考高德地图key申请章节
  3. 打开Info.plist文件找到amap项,如果没有按图片中的格式添加该项,在下图中的红色区域输入申请的key
    注意info.plist中Bundle identifier要和你输入的安全码一致
收起阅读 »

WebSocket 问题总结

WEBSOCKET

推送,IM,总要遇到WebSocket支持的问题。
IOS默认就支持了, 但是Android据说4.4 以下的WebView是不支持WebSocket的。

目前看到的可行的解决方案:

  1. 长轮询workaround: socket.io
  2. Server辅助Socket: sockjs
  3. phonegap 的WebSocket插件 websocket-android-phonegap

看起来只有3号方案靠谱, 有时间把这个移植到Dcloud平台吧。

还有没有其他好的方案? 期待官方出手解决...

继续阅读 »

推送,IM,总要遇到WebSocket支持的问题。
IOS默认就支持了, 但是Android据说4.4 以下的WebView是不支持WebSocket的。

目前看到的可行的解决方案:

  1. 长轮询workaround: socket.io
  2. Server辅助Socket: sockjs
  3. phonegap 的WebSocket插件 websocket-android-phonegap

看起来只有3号方案靠谱, 有时间把这个移植到Dcloud平台吧。

还有没有其他好的方案? 期待官方出手解决...

收起阅读 »

关于打包下载下来是以前的老包的情况

打包下载 云端打包 打包

最近有开发者反映下载下来的包是以前的老包。这个时候打开浏览器看下下载地址,如果不是build.clouddn.com,而是其它域名或者IP地址,可以肯定你们的下载请求被所在网络缓存或者被运营商劫持了。可以通过以下情况解决:
1、修改dns为一些公共dns,如百度公共dns:180.76.76.76或者阿里公共dns:223.5.5.5,然后重启电脑(chrome等浏览器有连接复用,需要重启清空),看是否能够正常下载。
2、联系负责网络的同事,看下公司是不是通过了squid等代理进行上网,上网过程是否有缓存,然后让他们修改缓存策略。
3、联系所在的网络运营商的客服,提供非正常的域名和IP地址,让他们确认是否缓存或者劫持。

以上三种方法还没解决,再联系DCloud客服。

继续阅读 »

最近有开发者反映下载下来的包是以前的老包。这个时候打开浏览器看下下载地址,如果不是build.clouddn.com,而是其它域名或者IP地址,可以肯定你们的下载请求被所在网络缓存或者被运营商劫持了。可以通过以下情况解决:
1、修改dns为一些公共dns,如百度公共dns:180.76.76.76或者阿里公共dns:223.5.5.5,然后重启电脑(chrome等浏览器有连接复用,需要重启清空),看是否能够正常下载。
2、联系负责网络的同事,看下公司是不是通过了squid等代理进行上网,上网过程是否有缓存,然后让他们修改缓存策略。
3、联系所在的网络运营商的客服,提供非正常的域名和IP地址,让他们确认是否缓存或者劫持。

以上三种方法还没解决,再联系DCloud客服。

收起阅读 »

培训资源视频教程汇总

网校 视频教程 教程 培训 入门

更新:uni-app的视频教程见这里:https://uniapp.dcloud.io/resource

=========以下为5+app的培训资源=============

DCloud对开发者的学习支持分3个层面:官方文档、三方专业培训、网友经验分享

DCloud的精力主要在做产品,配套的文档也会一直完善好。
但专业的培训还不是DCloud能做好的,在HTML5中国产业联盟(http://www.html5plus.org)里,有不少专业的培训机构。
同时网友的学习经验分享也很重要。
本文汇总这些资源,希望更多的培训机构加入进来,也希望更多网友分享自己的经验。

官方入门文档

HTML5教程

  • DCloud的文档用于掌握HTML5的开发者学习HTML5+、mui等DCloud技术,如果对基础的HTML5还不甚了解,推荐先到这里学习:w3cschool HTML5教程 http://www.w3cschool.cn/html5/
继续阅读 »

更新:uni-app的视频教程见这里:https://uniapp.dcloud.io/resource

=========以下为5+app的培训资源=============

DCloud对开发者的学习支持分3个层面:官方文档、三方专业培训、网友经验分享

DCloud的精力主要在做产品,配套的文档也会一直完善好。
但专业的培训还不是DCloud能做好的,在HTML5中国产业联盟(http://www.html5plus.org)里,有不少专业的培训机构。
同时网友的学习经验分享也很重要。
本文汇总这些资源,希望更多的培训机构加入进来,也希望更多网友分享自己的经验。

官方入门文档

HTML5教程

  • DCloud的文档用于掌握HTML5的开发者学习HTML5+、mui等DCloud技术,如果对基础的HTML5还不甚了解,推荐先到这里学习:w3cschool HTML5教程 http://www.w3cschool.cn/html5/
收起阅读 »

【svn官方地址已迁移】HB安装最新的SVN版本管理插件支持1.10.x,希望对刚入门的有点帮助

SVN Mac

【svn官方地址已迁移,详情请查看https://github.com/subclipse/subclipse/wiki】
【new】https://dl.bintray.com/subclipse/archive/release/1.12.x/
不行的小伙伴就翻墙吧。推荐一个效果不错的免费的翻墙工具。
psiphon3,下载详见文末

刚用HB不久发现自带的SVN是1.6版本是在太古老了,就老想着升级,刚好今天又空摆弄了下。
Eclipse 的Subclipse 最新版本是1.10x
官方描述为:Subclipse 1.10.x includes and requires Subversion 1.10.x client features and working copy format.

Eclipse update site URL: 【old】http://subclipse.tigris.org/update_1.10.x

下面升级步骤如下:

  1. 打开工具-》插件安装

  1. 在弹出的插件安装界面选择“手动安装Eclipse插件”

  1. 在弹出的插件下载地址中把http://subclipse.tigris.org/update_1.10.x (也可以使用我们的镜像地址http://update.dcloud.net.cn/test/plugin_for_test)填进去,点击右边的添加,把下面的两个勾上,然后一直下一步到完成

  1. 安装完成之后关掉HB,重新打开升级一下工作副本就OK

继续阅读 »

【svn官方地址已迁移,详情请查看https://github.com/subclipse/subclipse/wiki】
【new】https://dl.bintray.com/subclipse/archive/release/1.12.x/
不行的小伙伴就翻墙吧。推荐一个效果不错的免费的翻墙工具。
psiphon3,下载详见文末

刚用HB不久发现自带的SVN是1.6版本是在太古老了,就老想着升级,刚好今天又空摆弄了下。
Eclipse 的Subclipse 最新版本是1.10x
官方描述为:Subclipse 1.10.x includes and requires Subversion 1.10.x client features and working copy format.

Eclipse update site URL: 【old】http://subclipse.tigris.org/update_1.10.x

下面升级步骤如下:

  1. 打开工具-》插件安装

  1. 在弹出的插件安装界面选择“手动安装Eclipse插件”

  1. 在弹出的插件下载地址中把http://subclipse.tigris.org/update_1.10.x (也可以使用我们的镜像地址http://update.dcloud.net.cn/test/plugin_for_test)填进去,点击右边的添加,把下面的两个勾上,然后一直下一步到完成

  1. 安装完成之后关掉HB,重新打开升级一下工作副本就OK

收起阅读 »

与蓝牙打印机建立连接并打印

蓝牙

mui.plusReady(function(){     
    var main = plus.android.runtimeMainActivity();  
    var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");  
    var UUID=plus.android.importClass("java.util.UUID");  
    uuid=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");  
    var BAdapter = BluetoothAdapter.getDefaultAdapter();  
    BAdapter.cancelDiscovery();//停止扫描  
    var addres_mac = plus.storage.getItem("printer");//传入打印机mac地址  
    device=BAdapter.getRemoteDevice(addres_mac);  
    plus.android.importClass(device);  
});  

function print(){  
    bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);  
    plus.android.importClass(bluetoothSocket);   
    if(!bluetoothSocket.isConnected()){  
        bluetoothSocket.connect();  
    }  
    var outputStream=bluetoothSocket.getOutputStream();  
    plus.android.importClass(outputStream);  
    var string="你好123";  
    var bytes = plus.android.invoke(string,'getBytes','gbk');  
    //console.log(bytes+"."+bytes.length);   
    outputStream.write(bytes);  
    outputStream.flush();  
}  
继续阅读 »

mui.plusReady(function(){     
    var main = plus.android.runtimeMainActivity();  
    var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");  
    var UUID=plus.android.importClass("java.util.UUID");  
    uuid=UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");  
    var BAdapter = BluetoothAdapter.getDefaultAdapter();  
    BAdapter.cancelDiscovery();//停止扫描  
    var addres_mac = plus.storage.getItem("printer");//传入打印机mac地址  
    device=BAdapter.getRemoteDevice(addres_mac);  
    plus.android.importClass(device);  
});  

function print(){  
    bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid);  
    plus.android.importClass(bluetoothSocket);   
    if(!bluetoothSocket.isConnected()){  
        bluetoothSocket.connect();  
    }  
    var outputStream=bluetoothSocket.getOutputStream();  
    plus.android.importClass(outputStream);  
    var string="你好123";  
    var bytes = plus.android.invoke(string,'getBytes','gbk');  
    //console.log(bytes+"."+bytes.length);   
    outputStream.write(bytes);  
    outputStream.flush();  
}  
收起阅读 »

获取已配对的蓝牙列表

蓝牙

function bluetooth_list(){  
    var main = plus.android.runtimeMainActivity();  
    var Context = plus.android.importClass("android.content.Context");  
    var lists = BAdapter.getBondedDevices();  
    plus.android.importClass(lists);  
    var resultDiv = document.getElementById('bluetooth_list');  
    var iterator = lists.iterator();  
    plus.android.importClass(iterator);  
    while (iterator.hasNext()) {  
            var d = iterator.next();  
            plus.android.importClass(d);  
        console.log(d.getAddress());  
    }  
}  
继续阅读 »

function bluetooth_list(){  
    var main = plus.android.runtimeMainActivity();  
    var Context = plus.android.importClass("android.content.Context");  
    var lists = BAdapter.getBondedDevices();  
    plus.android.importClass(lists);  
    var resultDiv = document.getElementById('bluetooth_list');  
    var iterator = lists.iterator();  
    plus.android.importClass(iterator);  
    while (iterator.hasNext()) {  
            var d = iterator.next();  
            plus.android.importClass(d);  
        console.log(d.getAddress());  
    }  
}  
收起阅读 »

该怎么判断是否已安装微信和QQ?

iOS 安装检测 qq 微信 Native.JS

苹果审核不过啊。很郁闷。
该怎么判断是否已安装微信和QQ?
找了好久也没找到方法

苹果审核不过啊。很郁闷。
该怎么判断是否已安装微信和QQ?
找了好久也没找到方法

小团队承接hbuilder和mui的外包

外包

如题:有需要外包的请联系我,前端加后台都可以全包,QQ1046373779

如题:有需要外包的请联系我,前端加后台都可以全包,QQ1046373779

分享: 如何离线调试基于Mui的移动APP (不接手机的Web调试)

调试

有时候真机或模拟器调试实在是不方便,速度也慢, 特别想再web中调试。
其实plus和mui的大部分功能都是可以在Web中实现的,只有一小部分native 特性无法支持
不过通过workaroud 一些方法,完全可以在Web完成80%的调试任务。

比如如下的简单workaroud, 不过还是有些mui控件会有异常,希望大家能集思广益,逐渐完善这些workaroud方法,让大家收益。

(function(root){  
    if(root.navigator.userAgent.indexOf("Html5Plus")<0){  
        console.log("Html5Plus is not exist");  
        root.TAP = "click";  

        if(root.mui){  
            root.mui.plusReady = function(cb){  
                cb();  
            }  
        }  
    }  
    else{  
        root.TAP = "tap";  
    }  

}(window))

为了解决tap的问题,需要在AddEventListener里面用TAP代替

mui("#id")[0].addEventListener(TAP, function(){ ))

试过toast功能,不需要workaroud就能用

继续阅读 »

有时候真机或模拟器调试实在是不方便,速度也慢, 特别想再web中调试。
其实plus和mui的大部分功能都是可以在Web中实现的,只有一小部分native 特性无法支持
不过通过workaroud 一些方法,完全可以在Web完成80%的调试任务。

比如如下的简单workaroud, 不过还是有些mui控件会有异常,希望大家能集思广益,逐渐完善这些workaroud方法,让大家收益。

(function(root){  
    if(root.navigator.userAgent.indexOf("Html5Plus")<0){  
        console.log("Html5Plus is not exist");  
        root.TAP = "click";  

        if(root.mui){  
            root.mui.plusReady = function(cb){  
                cb();  
            }  
        }  
    }  
    else{  
        root.TAP = "tap";  
    }  

}(window))

为了解决tap的问题,需要在AddEventListener里面用TAP代替

mui("#id")[0].addEventListener(TAP, function(){ ))

试过toast功能,不需要workaroud就能用

收起阅读 »

代码缩进会不会变的更舒服一点

现在的缩进:

希望优化的缩进:

现在的缩进:

希望优化的缩进:

5+App全局变量、常量、共享数据、跨webview传参的综述

跨页共享数据 跨页通信 传参 全局变量

> 本文是5+App的全局变量介绍,uni-app的全局变量另见文章:https://ask.dcloud.net.cn/article/35021

很多编程语言都有全局变量,但js语言没有。
HTML5+虽然也可以扩展类似plus.globle,但权衡后我们发现,新增类似的方案,不会对便利性有很大的提升,但对App的性能有负面影响,所以我们还是没有提供全局变量,但在本文中详述其他共享数据的方法。

共享数据有几种方法。

  1. localStorage
    localStorage是HTML5标准,可跨webview使用。
    是持久化存储的,App关闭后也存在,除非js手动删除。
    如果考虑持久化,可以使用localStorage
  2. 共享js文件的全局常量
    我们可以给每个HTML页面都引入一个相同的js文件,比如common.js,在里面定义一个变量,var g = 0;
    这个每个页面的g都等于0。
    但这种方式处理的变量是不能跨webview同步的,比如a.html引入common.js后,重新给g赋值为1,那么同样引入common.js的b.html里的g并不会同步更改为1。
    所以说这种方式只适合于共享常量。
  3. url传参
    在web时代,页面间传参的主要方式是url后面加问号,挂参数。形如 b.html?g=0
    然后在b页面里通过js解析title来获取值。
    这种方式问题很多,App开发不推荐使用这种方式。
    问题1是在某些Android手机上,应用的HTML资源必须从apk里解压出来放到sd卡里才能运行,否则就会报404找不到页面。
    而解压资源又影响第一次启动的速度。(解压资源的设置在manifest里)
    问题2是b页面在载入以后,a仍然要给b传递数据,此时就没法用了。
  4. HTML5+的evalJS方法
    plus.webview对象有evalJS方法,可以在一个webview里操作让另一个webview执行一段js,这个方法不仅可用于传递参数,还可用于随意的互相调用通信。
    evalJS类似js标准的eval方法,把js代码变成字符串传递过去,变量也变成值跟随字符串一起传过去。
    具体参考:
    http://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewObject.evalJS
  5. mui的自定义事件
    mui的自定义事件是对HTML5+的evalJS的一种简化封装。
    当开发者使用mui框架时,可以更简单的跨页传递和获取参数。
    具体参考:
    http://ask.dcloud.net.cn/article/63
    6.其他
    方法其实还有很多,
    比如session.storage,在单页时可用。
    比如通过io共享数据,比如json文件或txt文件;
    比如websql、indexedDB、plus.storage;
    比如在服务器临时存。。。
继续阅读 »

> 本文是5+App的全局变量介绍,uni-app的全局变量另见文章:https://ask.dcloud.net.cn/article/35021

很多编程语言都有全局变量,但js语言没有。
HTML5+虽然也可以扩展类似plus.globle,但权衡后我们发现,新增类似的方案,不会对便利性有很大的提升,但对App的性能有负面影响,所以我们还是没有提供全局变量,但在本文中详述其他共享数据的方法。

共享数据有几种方法。

  1. localStorage
    localStorage是HTML5标准,可跨webview使用。
    是持久化存储的,App关闭后也存在,除非js手动删除。
    如果考虑持久化,可以使用localStorage
  2. 共享js文件的全局常量
    我们可以给每个HTML页面都引入一个相同的js文件,比如common.js,在里面定义一个变量,var g = 0;
    这个每个页面的g都等于0。
    但这种方式处理的变量是不能跨webview同步的,比如a.html引入common.js后,重新给g赋值为1,那么同样引入common.js的b.html里的g并不会同步更改为1。
    所以说这种方式只适合于共享常量。
  3. url传参
    在web时代,页面间传参的主要方式是url后面加问号,挂参数。形如 b.html?g=0
    然后在b页面里通过js解析title来获取值。
    这种方式问题很多,App开发不推荐使用这种方式。
    问题1是在某些Android手机上,应用的HTML资源必须从apk里解压出来放到sd卡里才能运行,否则就会报404找不到页面。
    而解压资源又影响第一次启动的速度。(解压资源的设置在manifest里)
    问题2是b页面在载入以后,a仍然要给b传递数据,此时就没法用了。
  4. HTML5+的evalJS方法
    plus.webview对象有evalJS方法,可以在一个webview里操作让另一个webview执行一段js,这个方法不仅可用于传递参数,还可用于随意的互相调用通信。
    evalJS类似js标准的eval方法,把js代码变成字符串传递过去,变量也变成值跟随字符串一起传过去。
    具体参考:
    http://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewObject.evalJS
  5. mui的自定义事件
    mui的自定义事件是对HTML5+的evalJS的一种简化封装。
    当开发者使用mui框架时,可以更简单的跨页传递和获取参数。
    具体参考:
    http://ask.dcloud.net.cn/article/63
    6.其他
    方法其实还有很多,
    比如session.storage,在单页时可用。
    比如通过io共享数据,比如json文件或txt文件;
    比如websql、indexedDB、plus.storage;
    比如在服务器临时存。。。
收起阅读 »