HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

最新的个推推送各种坑。。。纯前端的。。。带跳转到指定页面的demo

推送 mui 个推

最近项目中用到个推推送功能,这个推送坑略大。。。花了好几天才踩完这个坑,具体的代码我在下面会放出demo,下载后直接导入hbuilder运行就行了。。。友情提示,,,,必须打包后才有效。。。,调试是个大坑。。。

最近项目中用到个推推送功能,这个推送坑略大。。。花了好几天才踩完这个坑,具体的代码我在下面会放出demo,下载后直接导入hbuilder运行就行了。。。友情提示,,,,必须打包后才有效。。。,调试是个大坑。。。

独家系统全套mui,h5+教程,500节课程,文档,资料,20套app源码等

HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程

继续阅读 »

HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程

收起阅读 »

android非阻塞socket

        function testSocket() {  
            switch(plus.os.name) {  
                case "Android":  
                    // Android平台: plus.android.*  
                    SocketChannel = plus.android.importClass("java.nio.channels.SocketChannel");  
                    Selector = plus.android.importClass("java.nio.channels.Selector");  
                    SelectionKey = plus.android.importClass("java.nio.channels.SelectionKey");  
                    InetSocketAddress = plus.android.importClass("java.net.InetSocketAddress");  
                    SocketAddress = plus.android.importClass("java.net.SocketAddress");  
                    ByteBuffer = plus.android.importClass("java.nio.ByteBuffer");  
                    Iterator = plus.android.importClass("java.util.Iterator");  
                    // var iOException = plus.android.importClass("java.io.IOException");  
                    var method = plus.android.importClass("java.lang.reflect.Method");  
                    var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");  
                    //BufferedReader = plus.android.importClass("java.io.BufferedReader");  
                    //var charset = plus.android.importClass("java.nio.charset");  
                    //测试改良  
                    var StrictMode = plus.android.importClass("android.os.StrictMode");  
                    var Build = plus.android.importClass("android.os.Build");  
                    if(Build.VERSION.SDK_INT > 9) {  
                        var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();  
                        StrictMode.setThreadPolicy(policy);  
                    }  
                    sendbuffer = ByteBuffer.allocate(100);  
                    receivebuffer = ByteBuffer.allocate(100);  
                    //v selectionKeys;  
                    //iterator=new Iterator();  
                    selectionKey = new SelectionKey();  
                    client = new SocketChannel();  
                    btyeSend = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6];  
                    count1 = 0;  
                    testThread();  

                    break;  
                case "iOS":  
                    // iOS平台: plus.ios.*  

                    break;  
                default:  
                    // 其它平台  
                    break;  
            }  
        }  

        function testThread() {  
            var App = plus.android.runtimeMainActivity();  
            var Thread = plus.ios.importClass("java.lang.Thread");  
            socketChannel = SocketChannel.open();  
            //ByteBuffer dst;  
            socketChannel.configureBlocking(false);  
            selector = Selector.open();  
            socketChannel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_CONNECT | SelectionKey.OP_WRITE);  
            //socketAddress = new SocketAddress();  
            socketAddress = new InetSocketAddress("10.131.164.32", 1991);  
            socketChannel.connect(socketAddress);  
            var llflag = 0;  
            var Runnable = plus.android.implements("java.lang.Runnable", {  
                "run": function() {  
                    //选择一组键,其相应的通道已为 I/O 操作准备就绪。    
                    //此方法执行处于阻塞模式的选择操作。  
                    //返回此选择器的已选择键集。   
                    while(true) {  
                        selector.select();  
                        //System.out.println(selectionKeys.size());    
                        selectionKeys = selector.selectedKeys();  
                        plus.android.importClass(selectionKeys);  
                        //selectionKeys.clear();  
                        iterator = selectionKeys.iterator();  

                        plus.android.importClass(iterator);  
                        while(iterator.hasNext()) {  
                            selectionKey = iterator.next();  
                            if(selectionKey.isConnectable() && (llflag == 0)) {  
                                console.log("client connect");  
                                llflag = 1;  
                                client = selectionKey.channel();  
                                // 判断此通道上是否正在进行连接操作。    
                                // 完成套接字通道的连接过程。                                                  
                                if(client.isConnectionPending()) {  
                                    client.finishConnect();  
                                    console.log("完成连接!");  
                                    sendbuffer.clear();  
                                    // BufferedInputStream br = new BufferedInputStream(new FileInputStream(new File("D:\\BigData.zip")));    
                                    //     byte[] b = new byte[2];    
                                    //  br.read(b);      
                                    //b[0] = 53;  
                                    //b[1] = 54;  
                                    // b =[1,2,3];  

                                    sendbuffer.put(btyeSend);  
                                    sendbuffer.flip();  
                                    // System.out.println(System.currentTimeMillis());    
                                    client.write(sendbuffer);  
                                    //ystem.out.println(System.currentTimeMillis());    
                                }  
                                //  client.register(selector, SelectionKey.OP_READ);    
                            } else if(selectionKey.isReadable()) {  
                                client = selectionKey.channel();  
                                //将缓冲区清空以备下次读取    
                                receivebuffer.clear();  
                                //读取服务器发送来的数据到缓冲区中    
                                count = client.read(receivebuffer);  
                                if(count > 0) {  
                                    receiveText = new String(receivebuffer.array(), 0, count);  
                                    console.log("客户端接受服务器端数据--:" + receiveText);  
                                    //    if (client.isConnectionPending()) {    
                                    client.finishConnect();  
                                    console.log("完成连接!");  
                                    sendbuffer.clear();  
                                    // BufferedInputStream br = new BufferedInputStream(new FileInputStream(new File("D:\\BigData.zip")));    
                                    var b;  
                                    b = receivebuffer.array();  
                                    var a = []  
                                    for(var i = 0; i < count; i++)  
                                        a[i] = b[i];  
                                    sendbuffer.put(a);  
                                    sendbuffer.flip();  
                                    // System.out.println(System.currentTimeMillis());    
                                    client.write(sendbuffer);  
                                    //ystem.out.println(System.currentTimeMillis());    
                                    //   }  
                                }  
                            }  
                            if(sendFlag == 1) {  
                                client.finishConnect();  
                                sendbuffer.clear();  
                                //byte[] b = new byte[5];    
                                //  br.read(b);  
                                var b_buff = [];  
                                for(var i = 0; i < count1; i++) {  
                                    b_buff[i] = btyeSend[i];  
                                }  
                                sendbuffer.put(b_buff);  
                                sendbuffer.flip();  
                                client.write(sendbuffer);  
                                sendFlag = 0;  
                            }  

                        }  

                        //selectionKeys.clear();  
                    }  
                }  
            });  
            //方式1启动线程  
            App.runOnUiThread(Runnable);  
        }  

        function outValue() {  

            for(var i = 0; i < 16; i++)  
                btyeSend[i] = 0;  
            btyeSend[0] = 65;  
            btyeSend[1] = 66;  
            count1 = 2;  
            sendFlag = 1;  
        }  
继续阅读 »
        function testSocket() {  
            switch(plus.os.name) {  
                case "Android":  
                    // Android平台: plus.android.*  
                    SocketChannel = plus.android.importClass("java.nio.channels.SocketChannel");  
                    Selector = plus.android.importClass("java.nio.channels.Selector");  
                    SelectionKey = plus.android.importClass("java.nio.channels.SelectionKey");  
                    InetSocketAddress = plus.android.importClass("java.net.InetSocketAddress");  
                    SocketAddress = plus.android.importClass("java.net.SocketAddress");  
                    ByteBuffer = plus.android.importClass("java.nio.ByteBuffer");  
                    Iterator = plus.android.importClass("java.util.Iterator");  
                    // var iOException = plus.android.importClass("java.io.IOException");  
                    var method = plus.android.importClass("java.lang.reflect.Method");  
                    var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");  
                    //BufferedReader = plus.android.importClass("java.io.BufferedReader");  
                    //var charset = plus.android.importClass("java.nio.charset");  
                    //测试改良  
                    var StrictMode = plus.android.importClass("android.os.StrictMode");  
                    var Build = plus.android.importClass("android.os.Build");  
                    if(Build.VERSION.SDK_INT > 9) {  
                        var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();  
                        StrictMode.setThreadPolicy(policy);  
                    }  
                    sendbuffer = ByteBuffer.allocate(100);  
                    receivebuffer = ByteBuffer.allocate(100);  
                    //v selectionKeys;  
                    //iterator=new Iterator();  
                    selectionKey = new SelectionKey();  
                    client = new SocketChannel();  
                    btyeSend = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6];  
                    count1 = 0;  
                    testThread();  

                    break;  
                case "iOS":  
                    // iOS平台: plus.ios.*  

                    break;  
                default:  
                    // 其它平台  
                    break;  
            }  
        }  

        function testThread() {  
            var App = plus.android.runtimeMainActivity();  
            var Thread = plus.ios.importClass("java.lang.Thread");  
            socketChannel = SocketChannel.open();  
            //ByteBuffer dst;  
            socketChannel.configureBlocking(false);  
            selector = Selector.open();  
            socketChannel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_CONNECT | SelectionKey.OP_WRITE);  
            //socketAddress = new SocketAddress();  
            socketAddress = new InetSocketAddress("10.131.164.32", 1991);  
            socketChannel.connect(socketAddress);  
            var llflag = 0;  
            var Runnable = plus.android.implements("java.lang.Runnable", {  
                "run": function() {  
                    //选择一组键,其相应的通道已为 I/O 操作准备就绪。    
                    //此方法执行处于阻塞模式的选择操作。  
                    //返回此选择器的已选择键集。   
                    while(true) {  
                        selector.select();  
                        //System.out.println(selectionKeys.size());    
                        selectionKeys = selector.selectedKeys();  
                        plus.android.importClass(selectionKeys);  
                        //selectionKeys.clear();  
                        iterator = selectionKeys.iterator();  

                        plus.android.importClass(iterator);  
                        while(iterator.hasNext()) {  
                            selectionKey = iterator.next();  
                            if(selectionKey.isConnectable() && (llflag == 0)) {  
                                console.log("client connect");  
                                llflag = 1;  
                                client = selectionKey.channel();  
                                // 判断此通道上是否正在进行连接操作。    
                                // 完成套接字通道的连接过程。                                                  
                                if(client.isConnectionPending()) {  
                                    client.finishConnect();  
                                    console.log("完成连接!");  
                                    sendbuffer.clear();  
                                    // BufferedInputStream br = new BufferedInputStream(new FileInputStream(new File("D:\\BigData.zip")));    
                                    //     byte[] b = new byte[2];    
                                    //  br.read(b);      
                                    //b[0] = 53;  
                                    //b[1] = 54;  
                                    // b =[1,2,3];  

                                    sendbuffer.put(btyeSend);  
                                    sendbuffer.flip();  
                                    // System.out.println(System.currentTimeMillis());    
                                    client.write(sendbuffer);  
                                    //ystem.out.println(System.currentTimeMillis());    
                                }  
                                //  client.register(selector, SelectionKey.OP_READ);    
                            } else if(selectionKey.isReadable()) {  
                                client = selectionKey.channel();  
                                //将缓冲区清空以备下次读取    
                                receivebuffer.clear();  
                                //读取服务器发送来的数据到缓冲区中    
                                count = client.read(receivebuffer);  
                                if(count > 0) {  
                                    receiveText = new String(receivebuffer.array(), 0, count);  
                                    console.log("客户端接受服务器端数据--:" + receiveText);  
                                    //    if (client.isConnectionPending()) {    
                                    client.finishConnect();  
                                    console.log("完成连接!");  
                                    sendbuffer.clear();  
                                    // BufferedInputStream br = new BufferedInputStream(new FileInputStream(new File("D:\\BigData.zip")));    
                                    var b;  
                                    b = receivebuffer.array();  
                                    var a = []  
                                    for(var i = 0; i < count; i++)  
                                        a[i] = b[i];  
                                    sendbuffer.put(a);  
                                    sendbuffer.flip();  
                                    // System.out.println(System.currentTimeMillis());    
                                    client.write(sendbuffer);  
                                    //ystem.out.println(System.currentTimeMillis());    
                                    //   }  
                                }  
                            }  
                            if(sendFlag == 1) {  
                                client.finishConnect();  
                                sendbuffer.clear();  
                                //byte[] b = new byte[5];    
                                //  br.read(b);  
                                var b_buff = [];  
                                for(var i = 0; i < count1; i++) {  
                                    b_buff[i] = btyeSend[i];  
                                }  
                                sendbuffer.put(b_buff);  
                                sendbuffer.flip();  
                                client.write(sendbuffer);  
                                sendFlag = 0;  
                            }  

                        }  

                        //selectionKeys.clear();  
                    }  
                }  
            });  
            //方式1启动线程  
            App.runOnUiThread(Runnable);  
        }  

        function outValue() {  

            for(var i = 0; i < 16; i++)  
                btyeSend[i] = 0;  
            btyeSend[0] = 65;  
            btyeSend[1] = 66;  
            count1 = 2;  
            sendFlag = 1;  
        }  
收起阅读 »

【讲座】html5+ App开发工程化实践之路

HTML5+ 技术分享 分享

大家好,我是小青年。我在segmentfault上开了个5+ App开发的讲座,欢迎大家前去捧场。本次讲座首先会讲解一下 5+ App 开发核心概念,以及谈一谈在 5+app 开发中的工程化探索方案,并且会在这次讲座发布一个 5+ App 开发的脚手架工具 plus-cli,主要是弥补 5+ App 开发中工程化这块的缺失,以及探讨一下 5+ App 开发如何和 Vue.js 框架如何结合的问题。

本次讲座的主要内容分为以下几个部分:

  • html5+ App 开发的优势及基本概念
  • MUI 框架学习指南
  • html5+ 规范核心 API 详细讲解
  • html5+ 脚手架 plus-cli 发布
  • html5+ App 优化方案
  • 基于 html5+ 标准的流应用开发

面向人群:

  • 想快速了解 5+ App 开发的新手朋友
  • 想使用新特性将自己的 App 进行调优的朋友
  • 想在 5+ App 中使用 Vue.js 等框架进行模块化开发的朋友

如果大家对5+ App开发有任何疑问,可以提前通过邮件:zhaomenghuan@foxmail.com 或者在讲座下方评论反馈给我。 

讲座报名地址:https://segmentfault.com/l/1500000009542402?r=bPqXdU

继续阅读 »

大家好,我是小青年。我在segmentfault上开了个5+ App开发的讲座,欢迎大家前去捧场。本次讲座首先会讲解一下 5+ App 开发核心概念,以及谈一谈在 5+app 开发中的工程化探索方案,并且会在这次讲座发布一个 5+ App 开发的脚手架工具 plus-cli,主要是弥补 5+ App 开发中工程化这块的缺失,以及探讨一下 5+ App 开发如何和 Vue.js 框架如何结合的问题。

本次讲座的主要内容分为以下几个部分:

  • html5+ App 开发的优势及基本概念
  • MUI 框架学习指南
  • html5+ 规范核心 API 详细讲解
  • html5+ 脚手架 plus-cli 发布
  • html5+ App 优化方案
  • 基于 html5+ 标准的流应用开发

面向人群:

  • 想快速了解 5+ App 开发的新手朋友
  • 想使用新特性将自己的 App 进行调优的朋友
  • 想在 5+ App 中使用 Vue.js 等框架进行模块化开发的朋友

如果大家对5+ App开发有任何疑问,可以提前通过邮件:zhaomenghuan@foxmail.com 或者在讲座下方评论反馈给我。 

讲座报名地址:https://segmentfault.com/l/1500000009542402?r=bPqXdU

收起阅读 »

独家系统全套mui,h5+教程,500节课程,文档,资料,20套app源码等

HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程

继续阅读 »

HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程

收起阅读 »

大家格式化html代码的时候卡吗

编辑html页面的时候
ctrl+shift+f 格式化代码的时候,总要卡半天.
希望能跟Webstrom一样流畅

编辑html页面的时候
ctrl+shift+f 格式化代码的时候,总要卡半天.
希望能跟Webstrom一样流畅

android6.0以上的android webview支持js es6

默认话题 HBuilder

HBulider支持es6,只需在项目目录上点右键,选择引入语法框架,选择es6。
自带的浏览器不支持es6。
在手机上运行,需要安卓版本6.0以上才支持es6。

HBulider支持es6,只需在项目目录上点右键,选择引入语法框架,选择es6。
自带的浏览器不支持es6。
在手机上运行,需要安卓版本6.0以上才支持es6。

事件处理的on完全可以替代addEventListenner

1、移除addEventListenner,名字太长,主要是没用,完全可以用on替代。
2、on(event,selector,handler)为批量选择元素,而on(event,handler)则为addEventListenner的替代方法,内部只需稍微做下判断第二个参数是否为一个函数做处理即可,既简单又不冗余。

继续阅读 »

1、移除addEventListenner,名字太长,主要是没用,完全可以用on替代。
2、on(event,selector,handler)为批量选择元素,而on(event,handler)则为addEventListenner的替代方法,内部只需稍微做下判断第二个参数是否为一个函数做处理即可,既简单又不冗余。

收起阅读 »

有偿解决支付问题

外部网站 支付

求助一个技术牛人外包,有偿解决支付问题
主要是解决支付宝问题还有第三方支付集成,现在自己调试报al138173,我的qq329523326

求助一个技术牛人外包,有偿解决支付问题
主要是解决支付宝问题还有第三方支付集成,现在自己调试报al138173,我的qq329523326

透传消息分享(安卓和IOS)

个推 消息推送

IOS是6,安卓是华为。安卓手机在线和后台能接受到推送信息,退出的话接受不到,苹果手机的APP在不在线都可以接受到推送。
后台代码没有弄,是通过个推上的透传消息进行的推送。客户端代码如下:

//消息推送  
mui.plusReady(function() {  

    // 监听点击消息事件  
    plus.push.addEventListener( "click", function( msg ) {  
        var payload=(plus.os.name=='iOS')?msg.payload:JSON.parse(msg.payload);  
    }, false );  

    // 监听在线消息事件  
    plus.push.addEventListener( "receive", function( msg ) {  
        logoutPushMsg( msg );  
    }, false );  

});  

//获取穿透参数  
function logoutPushMsg( msg ) {  
    if ( msg.payload ) {  
        if ( typeof(msg.payload)=="string" ) {  
            createLocalPushMsg(msg.content);  
        } else {  
            var data = JSON.parse(msg.payload);  
            createLocalPushMsg(data.content);  
        }  
    } else {  
        console.log( "payload: undefined" );  
    }  
}  

//创建本地推送  
function createLocalPushMsg(content){  

    var options = {cover:false,};  
    plus.push.createMessage(content, "LocalMSG", options );  
    if(plus.os.name=="iOS"){  
        alert('*如果无法创建消息,请到"设置"->"通知"中配置应用在通知中心显示!');  
    }  

}

PS:IOS的话证书有两份,一份是上传到个推的,一份是打包用的。可以参考网站:http://docs.getui.com/mobile/ios/apns/

继续阅读 »

IOS是6,安卓是华为。安卓手机在线和后台能接受到推送信息,退出的话接受不到,苹果手机的APP在不在线都可以接受到推送。
后台代码没有弄,是通过个推上的透传消息进行的推送。客户端代码如下:

//消息推送  
mui.plusReady(function() {  

    // 监听点击消息事件  
    plus.push.addEventListener( "click", function( msg ) {  
        var payload=(plus.os.name=='iOS')?msg.payload:JSON.parse(msg.payload);  
    }, false );  

    // 监听在线消息事件  
    plus.push.addEventListener( "receive", function( msg ) {  
        logoutPushMsg( msg );  
    }, false );  

});  

//获取穿透参数  
function logoutPushMsg( msg ) {  
    if ( msg.payload ) {  
        if ( typeof(msg.payload)=="string" ) {  
            createLocalPushMsg(msg.content);  
        } else {  
            var data = JSON.parse(msg.payload);  
            createLocalPushMsg(data.content);  
        }  
    } else {  
        console.log( "payload: undefined" );  
    }  
}  

//创建本地推送  
function createLocalPushMsg(content){  

    var options = {cover:false,};  
    plus.push.createMessage(content, "LocalMSG", options );  
    if(plus.os.name=="iOS"){  
        alert('*如果无法创建消息,请到"设置"->"通知"中配置应用在通知中心显示!');  
    }  

}

PS:IOS的话证书有两份,一份是上传到个推的,一份是打包用的。可以参考网站:http://docs.getui.com/mobile/ios/apns/

收起阅读 »

独家系统全套mui,h5+教程,500节课程,文档,资料,20套app源码等

HelloH5 mui

HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程

继续阅读 »

HTML CSS H5 JS Castapp.js,MUI,H5+,PHP mysql,React-Native,Ecmascript6,React.js mui-UI实战 mui,h5+ APP开发实战功能 app开发{仿支付宝,仿微信,仿e袋洗,仿驾考宝典,仿微店,仿教室帮,仿饿了么,仿糗事百科,仿猫眼电影,仿天猫,仿今日头条,东翌同城约,东翌课堂,内涵段子,全套实战开发,让大家快速学习APP开发全体课程只需要499啦 想学习的点击链接咨询课程499全套课程

收起阅读 »