HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

强烈建议hbuilder开放开发者合作模式

主要是你们这个上面插件太少了。开放开发者合作 让有能力的开发者自己开发的插件可以在官方出售 官方可以分成的方式进行合作。只有这样平台才能吸引更多的开发者入住。纯属个人建议。

主要是你们这个上面插件太少了。开放开发者合作 让有能力的开发者自己开发的插件可以在官方出售 官方可以分成的方式进行合作。只有这样平台才能吸引更多的开发者入住。纯属个人建议。

mui的ajax突然不能传递参数给接口

ajax mui

哈哈哈 这个问题 我一直怀疑是mui的ajax问题 后面发现 是接口地址之前写的http 后来加了https证书 导致这边无法通过http接口地址传递参数过去,参数问题是搞明白了 至于http为什么不能传递参数没搞懂 懒得搞了。。。估计服务器这边也有些问题

哈哈哈 这个问题 我一直怀疑是mui的ajax问题 后面发现 是接口地址之前写的http 后来加了https证书 导致这边无法通过http接口地址传递参数过去,参数问题是搞明白了 至于http为什么不能传递参数没搞懂 懒得搞了。。。估计服务器这边也有些问题

基于vue写的webapp快速构建工具

源码分享 源码 Vue

基于vue + router + Vuex + hbuilder写的webapp快速构建工具,可以单独运行在web端。主要实现了页面切换管理。
编译出来的代码直接放在hbuilder项目运行

已开源github,有兴趣的朋友了解一下
vue-hamal

在线例子
请尝试从左边拖动页面返回
https://liangfuzhi.github.io/vue-hamal/dist/index.html

继续阅读 »

基于vue + router + Vuex + hbuilder写的webapp快速构建工具,可以单独运行在web端。主要实现了页面切换管理。
编译出来的代码直接放在hbuilder项目运行

已开源github,有兴趣的朋友了解一下
vue-hamal

在线例子
请尝试从左边拖动页面返回
https://liangfuzhi.github.io/vue-hamal/dist/index.html

收起阅读 »

个推推送实现方案

安卓 推送 个推

HBuilder推送功能已集成的包括:个推和小米推送。小米推送面向企业不考虑,那只能选择个推了,因为最近在做一个安卓的app,下面主要先讲安卓,苹果的略微带过。

安卓注意点

  1. 用户若禁止该APP的推送,那自然是收不到消息的。
  2. Android rom厂商为了省电会禁止push进程开机自启、第三方清理软件也会杀掉push进程。因此要保证应用在后台运行状态。像qq、微信能“离线推送”,其实并非离线,大厂app早已手机厂商或第三方清理软件白名单,这些APP实际上还在运行。
  3. 安卓第一次安装APP成功立刻获取cid为字符串null,不知道为啥,因此我搞了个定时器循环读取它。

消息分类(下面都在说安卓)

  • 普通消息
    会收到通知消息,事件都不触发
    服务器可以向安卓平台发送三种类型的普通消息“通知”“下载”“网址”,发送“通知”消息会启动APP,如果是“下载”消息则会调用系统的下载管理器下载指定文件,点击“网址”消息则会调用系统浏览器打开指定的网址。
    不管应用在线还是离线,在系统通知栏中显示消息,点击消息后启动应用(如果已经启动则从后台切换到前台),此消息不触发“click”事件。
    流程:个推平台发送普通消息-》用户收到通知消息-》用户点击消息-》启动应用

  • 符合格式的透传消息
    会收到通知消息
    不管应用在线还是离线,如果透传数据格式符合“{title:'标题',content:'内容',payload:'数据'}”格式,则在系统通知栏中显示消息,点击消息后触发“click”事件,可通过msg.title获取标题、msg.content获取内容、msg.payload获取数据。
    流程:个推平台发送透传消息-》符合格式-》用户收到通知消息-》用户点击消息-》监听页面触发click事件

  • 不符合格式的透传消息
    不会收到通知消息,但是会触发监听页面的“receive”事件
    不管应用在线还是离线,如果透传数据格式不符合“{title:'标题',content:'内容',payload:'数据'}”格式,触发“receive”事件,可通过msg.payload获取完整透传数据。
    流程:个推平台发送透传消息-》不符合格式-》应用在后台运行-》监听页面触发receive事件

  • 本地创建的消息
    会收到通知消息
    点击消息后触发“click”事件,可通过msg.title获取标题、msg.content获取内容、msg.payload创建时可设置为“LocalMSG”,用于区分是点击的本地的还是符合格式的透传消息。

讲了那么多原理,到底应该选择哪一种推送呢?

方案一:选择普通消息
优点:简单,可以收到通知,前端不用咋处理
缺点:点了推送指南启动应用(下载和网址先不考虑),不能做后续操作,角标可能会有问题;即时性差点,万一用户不点消息就直接进入app或者app正好打开着突然收到推送,那如何去局部更新那数据呢,估计还是只能靠轮询定时更新数据。当然,如果你的app不涉及局部数据变化或者方案三因为各种不可抗力因素走不通的话,当然选这个啦。

方案二:选择符合格式的透传消息
优点:可以收到通知,点击通知后可以触发click事件,获取点击的数据。测试的时候发现居然透传消息推送过来可以选择强制启动应用,当然,是不敢用在应用中的啦~~。
缺点:即时性应该差,万一用户不点消息就直接进入app或者app正好打开着突然收到推送,那如何去局部更新那数据呢,估计还是只能靠轮询定时更新数据。当然,如果你的app不涉及局部数据变化,同时又要点击消息打开某个模块的话,那就选这个吧。

方案三:选择不符合格式的透传消息
优点:及时性好,通过receive收到消息后,可以立即更新数据并创建本地消息,本地消息点击后同样可以监听到click事件,并做后续处理
缺点:稍微复杂点,但个人是很心水的。

代码如下:

<script type="text/javascript" charset="utf-8">  
        mui.init();  
        // 监听plusready事件    
        document.addEventListener("plusready", function() {  
            // 扩展API加载完毕,现在可以正常调用扩展API  
            // 获取客户端标识信息  
            var cid=plus.push.getClientInfo().clientid;  
            var count=0;  
            var getcid = setInterval(function() {  
                cid = plus.push.getClientInfo().clientid;  
                if(cid != "" && cid != null && cid != "null") {  
                    mui.alert("cid=" + cid + "&count=" + count);  
                    clearInterval(getcid);  
                }  
                count++;  
            }, 20);  
            //获得clientid,appid,appkey,token  

             // 监听在线消息事件,不符合格式的透传消息  
            plus.push.addEventListener("receive", function( msg ) {  
                mui.alert("接收到不符合格式在线透传消息:"+JSON.stringify(msg) );  
                var options = {cover:false};  
                var str = '欢迎使用Html5 Plus创建本地消息!';//msg.content  
                plus.push.createMessage( str, "LocalMSG", options );  
                mui.alert( "创建本地消息成功!" );  
                //本地消息上下两个payload不一样。  
            }, false );  

            // 监听点击消息事件,符合格式的透传消息或者本地消息  
            plus.push.addEventListener("click", function( msg ) {  
                // 判断是从本地创建还是离线推送的消息  
                mui.alert(JSON.stringify(msg) );  
                switch( msg.payload ) {  
                    case "LocalMSG":  
                         mui.alert( "点击本地创建消息启动:" );//title和content里获得数据  
                    break;  
                    default:  
                        mui.alert( "点击符合格式的透传消息启动:");  
                    break;  
                }  
            }, false );  
        })  
    </script>  

ios个推

1.普通消息
应用在线:接收到消息后弹出提示框,点击“取消”按钮则关闭提示框,点击“确定”按钮则会发送透传数据触发“receive”事件(即使没有设置透传数据)。
应用离线:如果设置Token值则通过APN推送离线信息,成功后在系统通知栏中显示消息,点击消息后启动应用(如果已经启动则从后台切换到前台),同时触发“click”事件,此时可通过js处理透传数据。如果没有设置Token值则在应用启动后通过应用在线模式推送通知。

2.透传消息
应用在线:触发“receive”事件,可通过msg.payload获取完整透传数据。
应用离线:如果设置Token值以及内容值则通过APN推送离线信息,成功后在系统通知栏中显示消息(显示通知的内容),点击消息后启动应用(如果已经启动则从后台切换到前台),同时触发“click”事件,此时可通过js处理透传数据;否则在应用启动后通过应用在线模式推送通知。

结束语

上述的描述可能有不准确之处,可以各取所需,放上来一个是方便大家,还有就是有错误的地方大家可以及时指出,(  ̄3)(ε ̄ )

继续阅读 »

HBuilder推送功能已集成的包括:个推和小米推送。小米推送面向企业不考虑,那只能选择个推了,因为最近在做一个安卓的app,下面主要先讲安卓,苹果的略微带过。

安卓注意点

  1. 用户若禁止该APP的推送,那自然是收不到消息的。
  2. Android rom厂商为了省电会禁止push进程开机自启、第三方清理软件也会杀掉push进程。因此要保证应用在后台运行状态。像qq、微信能“离线推送”,其实并非离线,大厂app早已手机厂商或第三方清理软件白名单,这些APP实际上还在运行。
  3. 安卓第一次安装APP成功立刻获取cid为字符串null,不知道为啥,因此我搞了个定时器循环读取它。

消息分类(下面都在说安卓)

  • 普通消息
    会收到通知消息,事件都不触发
    服务器可以向安卓平台发送三种类型的普通消息“通知”“下载”“网址”,发送“通知”消息会启动APP,如果是“下载”消息则会调用系统的下载管理器下载指定文件,点击“网址”消息则会调用系统浏览器打开指定的网址。
    不管应用在线还是离线,在系统通知栏中显示消息,点击消息后启动应用(如果已经启动则从后台切换到前台),此消息不触发“click”事件。
    流程:个推平台发送普通消息-》用户收到通知消息-》用户点击消息-》启动应用

  • 符合格式的透传消息
    会收到通知消息
    不管应用在线还是离线,如果透传数据格式符合“{title:'标题',content:'内容',payload:'数据'}”格式,则在系统通知栏中显示消息,点击消息后触发“click”事件,可通过msg.title获取标题、msg.content获取内容、msg.payload获取数据。
    流程:个推平台发送透传消息-》符合格式-》用户收到通知消息-》用户点击消息-》监听页面触发click事件

  • 不符合格式的透传消息
    不会收到通知消息,但是会触发监听页面的“receive”事件
    不管应用在线还是离线,如果透传数据格式不符合“{title:'标题',content:'内容',payload:'数据'}”格式,触发“receive”事件,可通过msg.payload获取完整透传数据。
    流程:个推平台发送透传消息-》不符合格式-》应用在后台运行-》监听页面触发receive事件

  • 本地创建的消息
    会收到通知消息
    点击消息后触发“click”事件,可通过msg.title获取标题、msg.content获取内容、msg.payload创建时可设置为“LocalMSG”,用于区分是点击的本地的还是符合格式的透传消息。

讲了那么多原理,到底应该选择哪一种推送呢?

方案一:选择普通消息
优点:简单,可以收到通知,前端不用咋处理
缺点:点了推送指南启动应用(下载和网址先不考虑),不能做后续操作,角标可能会有问题;即时性差点,万一用户不点消息就直接进入app或者app正好打开着突然收到推送,那如何去局部更新那数据呢,估计还是只能靠轮询定时更新数据。当然,如果你的app不涉及局部数据变化或者方案三因为各种不可抗力因素走不通的话,当然选这个啦。

方案二:选择符合格式的透传消息
优点:可以收到通知,点击通知后可以触发click事件,获取点击的数据。测试的时候发现居然透传消息推送过来可以选择强制启动应用,当然,是不敢用在应用中的啦~~。
缺点:即时性应该差,万一用户不点消息就直接进入app或者app正好打开着突然收到推送,那如何去局部更新那数据呢,估计还是只能靠轮询定时更新数据。当然,如果你的app不涉及局部数据变化,同时又要点击消息打开某个模块的话,那就选这个吧。

方案三:选择不符合格式的透传消息
优点:及时性好,通过receive收到消息后,可以立即更新数据并创建本地消息,本地消息点击后同样可以监听到click事件,并做后续处理
缺点:稍微复杂点,但个人是很心水的。

代码如下:

<script type="text/javascript" charset="utf-8">  
        mui.init();  
        // 监听plusready事件    
        document.addEventListener("plusready", function() {  
            // 扩展API加载完毕,现在可以正常调用扩展API  
            // 获取客户端标识信息  
            var cid=plus.push.getClientInfo().clientid;  
            var count=0;  
            var getcid = setInterval(function() {  
                cid = plus.push.getClientInfo().clientid;  
                if(cid != "" && cid != null && cid != "null") {  
                    mui.alert("cid=" + cid + "&count=" + count);  
                    clearInterval(getcid);  
                }  
                count++;  
            }, 20);  
            //获得clientid,appid,appkey,token  

             // 监听在线消息事件,不符合格式的透传消息  
            plus.push.addEventListener("receive", function( msg ) {  
                mui.alert("接收到不符合格式在线透传消息:"+JSON.stringify(msg) );  
                var options = {cover:false};  
                var str = '欢迎使用Html5 Plus创建本地消息!';//msg.content  
                plus.push.createMessage( str, "LocalMSG", options );  
                mui.alert( "创建本地消息成功!" );  
                //本地消息上下两个payload不一样。  
            }, false );  

            // 监听点击消息事件,符合格式的透传消息或者本地消息  
            plus.push.addEventListener("click", function( msg ) {  
                // 判断是从本地创建还是离线推送的消息  
                mui.alert(JSON.stringify(msg) );  
                switch( msg.payload ) {  
                    case "LocalMSG":  
                         mui.alert( "点击本地创建消息启动:" );//title和content里获得数据  
                    break;  
                    default:  
                        mui.alert( "点击符合格式的透传消息启动:");  
                    break;  
                }  
            }, false );  
        })  
    </script>  

ios个推

1.普通消息
应用在线:接收到消息后弹出提示框,点击“取消”按钮则关闭提示框,点击“确定”按钮则会发送透传数据触发“receive”事件(即使没有设置透传数据)。
应用离线:如果设置Token值则通过APN推送离线信息,成功后在系统通知栏中显示消息,点击消息后启动应用(如果已经启动则从后台切换到前台),同时触发“click”事件,此时可通过js处理透传数据。如果没有设置Token值则在应用启动后通过应用在线模式推送通知。

2.透传消息
应用在线:触发“receive”事件,可通过msg.payload获取完整透传数据。
应用离线:如果设置Token值以及内容值则通过APN推送离线信息,成功后在系统通知栏中显示消息(显示通知的内容),点击消息后启动应用(如果已经启动则从后台切换到前台),同时触发“click”事件,此时可通过js处理透传数据;否则在应用启动后通过应用在线模式推送通知。

结束语

上述的描述可能有不准确之处,可以各取所需,放上来一个是方便大家,还有就是有错误的地方大家可以及时指出,(  ̄3)(ε ̄ )

收起阅读 »

去掉或更改二级分类列表下划线

列表

去掉下划线:

.mui-table-view-cell:after{  
height:0  
}

这只能去掉一级分类下划线,
去掉二级下划线:


.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:after{height:0}  

若要修改颜色:

.mui-table-view-cell:after{background:你的颜色}  
.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:after{background:你的颜色}  
继续阅读 »

去掉下划线:

.mui-table-view-cell:after{  
height:0  
}

这只能去掉一级分类下划线,
去掉二级下划线:


.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:after{height:0}  

若要修改颜色:

.mui-table-view-cell:after{background:你的颜色}  
.mui-table-view-cell.mui-collapse .mui-table-view .mui-table-view-cell:after{background:你的颜色}  
收起阅读 »

mui侧滑内容无法选择复制和无法滚动

复制 侧滑 侧滑菜单
* {  
-webkit-box-sizing: border-box;  
box-sizing: border-box;  
-webkit-user-select: none;  
outline: 0;  
-webkit-tap-highlight-color: transparent;  
-webkit-tap-highlight-color: transparent;  
}

默认全局禁用了文本复制( -webkit-user-select: none;)修改为 -webkit-user-select: auto;
开启后侧滑内容页面还是无法复制找到
!--侧滑菜单容器-->

<div id="offCanvasWrapper" class="mui-off-canvas-wrap mui-draggable">

去掉 mui-draggable 即可

启用长按事件

mui.init({  
longtap: true, //默认为false  
});

滚动添加事件:

    window.onload = function(){  
                 mui('#offCanvasSideScroll').scroll();    
             mui('#offCanvasContentScroll').scroll();   
        }
继续阅读 »
* {  
-webkit-box-sizing: border-box;  
box-sizing: border-box;  
-webkit-user-select: none;  
outline: 0;  
-webkit-tap-highlight-color: transparent;  
-webkit-tap-highlight-color: transparent;  
}

默认全局禁用了文本复制( -webkit-user-select: none;)修改为 -webkit-user-select: auto;
开启后侧滑内容页面还是无法复制找到
!--侧滑菜单容器-->

<div id="offCanvasWrapper" class="mui-off-canvas-wrap mui-draggable">

去掉 mui-draggable 即可

启用长按事件

mui.init({  
longtap: true, //默认为false  
});

滚动添加事件:

    window.onload = function(){  
                 mui('#offCanvasSideScroll').scroll();    
             mui('#offCanvasContentScroll').scroll();   
        }
收起阅读 »

【分享】MUI集成paypal支付

首先还是要到paypal上注册开发者信息,这部分你们自己去研究咯。这里就不作说明。

<!DOCTYPE html>  
<html>  

    <head>  
        <meta charset="utf-8">  
        <title>結賬</title>  
        <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">  
        <meta name="apple-mobile-web-app-capable" content="yes">  
        <meta name="apple-mobile-web-app-status-bar-style" content="black">  

        <link rel="stylesheet" href="css/mui.min.css">  
        <link rel="stylesheet" href="css/style.css">  
        <style>  
            input{color:#000}  
        </style>  
    </head>  
<!--https://www.paypal.com/cgi-bin/webscr-->  
    <body>  
        <div class="mui-content">  
            <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">  
                <input type="hidden" name="cmd" value="_xclick">  
                <input type="hidden" name="business" value="paypal收款账号">  
                <input type="hidden" name="lc" value="TW">  
                <input type="hidden" id="item_name" name="item_name" value="">  
                <input type="hidden" id="item_number" name="item_number" value="">  
                <input type="hidden" id="amount" name="amount" value="">  
                <input type="hidden" name="currency_code" value="HKD">  
                <input type="hidden" name="button_subtype" value="services">  
                <input type="hidden" name="no_note" value="0">  
                <input type="hidden" id="shipping" name="shipping" value="">  
                <input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynow_SM.gif:NonHostedGuest">  
                <input type="hidden" name="notify_url" value="回调地址">  
                <input type="hidden" name="return" value="这个参数忘了是干嘛的了...,源码那我填的是本地的产品页面">  
                <input type="image" src="https://www.paypalobjects.com/zh_TW/TW/i/btn/btn_buynow_SM.gif" border="0" name="submit" alt="PayPal - 更安全、更簡單的線上付款方式!">  
                <img alt="" border="0" src="https://www.paypalobjects.com/zh_TW/i/scr/pixel.gif" width="1" height="1">  
            </form>  
        </div>  
    </body>  
    <script src="js/mui.min.js"></script>  
    <script src="js/app.js"></script>  
    <script>  
        mui.init({  
            swipeBack: true, //启用右滑关闭功能  
        })  

        (function($, doc) {  
            mui.plusReady(function() {  
                plus.nativeUI.closeWaiting();  

                var self = plus.webview.currentWebview();  
                var order = self.order;  
                //console.log(JSON.stringify(order));                 
                document.getElementById("item_name").value=order.order_sn;  
                document.getElementById("item_number").value=order.order_sn;  
                document.getElementById("amount").value=order.total_amount;  
                document.getElementById("shipping").value=order.shipping_price;           
                app.setLocal('cart',{});  
            });  
        }(mui, document));  
    </script>  

</html>
继续阅读 »

首先还是要到paypal上注册开发者信息,这部分你们自己去研究咯。这里就不作说明。

<!DOCTYPE html>  
<html>  

    <head>  
        <meta charset="utf-8">  
        <title>結賬</title>  
        <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">  
        <meta name="apple-mobile-web-app-capable" content="yes">  
        <meta name="apple-mobile-web-app-status-bar-style" content="black">  

        <link rel="stylesheet" href="css/mui.min.css">  
        <link rel="stylesheet" href="css/style.css">  
        <style>  
            input{color:#000}  
        </style>  
    </head>  
<!--https://www.paypal.com/cgi-bin/webscr-->  
    <body>  
        <div class="mui-content">  
            <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">  
                <input type="hidden" name="cmd" value="_xclick">  
                <input type="hidden" name="business" value="paypal收款账号">  
                <input type="hidden" name="lc" value="TW">  
                <input type="hidden" id="item_name" name="item_name" value="">  
                <input type="hidden" id="item_number" name="item_number" value="">  
                <input type="hidden" id="amount" name="amount" value="">  
                <input type="hidden" name="currency_code" value="HKD">  
                <input type="hidden" name="button_subtype" value="services">  
                <input type="hidden" name="no_note" value="0">  
                <input type="hidden" id="shipping" name="shipping" value="">  
                <input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynow_SM.gif:NonHostedGuest">  
                <input type="hidden" name="notify_url" value="回调地址">  
                <input type="hidden" name="return" value="这个参数忘了是干嘛的了...,源码那我填的是本地的产品页面">  
                <input type="image" src="https://www.paypalobjects.com/zh_TW/TW/i/btn/btn_buynow_SM.gif" border="0" name="submit" alt="PayPal - 更安全、更簡單的線上付款方式!">  
                <img alt="" border="0" src="https://www.paypalobjects.com/zh_TW/i/scr/pixel.gif" width="1" height="1">  
            </form>  
        </div>  
    </body>  
    <script src="js/mui.min.js"></script>  
    <script src="js/app.js"></script>  
    <script>  
        mui.init({  
            swipeBack: true, //启用右滑关闭功能  
        })  

        (function($, doc) {  
            mui.plusReady(function() {  
                plus.nativeUI.closeWaiting();  

                var self = plus.webview.currentWebview();  
                var order = self.order;  
                //console.log(JSON.stringify(order));                 
                document.getElementById("item_name").value=order.order_sn;  
                document.getElementById("item_number").value=order.order_sn;  
                document.getElementById("amount").value=order.total_amount;  
                document.getElementById("shipping").value=order.shipping_price;           
                app.setLocal('cart',{});  
            });  
        }(mui, document));  
    </script>  

</html>
收起阅读 »

婚庆APP哪里做??力谱云助力打造婚庆app

Appstore App入门 App 移动APP

五一、十一、各种小长假都是婚潮高峰期,婚纱摄影自然供不应求。然而,面对消费升级趋势,以及互联网公司的入市,不少传统婚庆公司遭遇市场份额不断被瓜分的尴尬局面,熟不知只需开发一款小而精巧的手机App即可破局。深耕移动研发多年的力谱宿云企业,其旗下平台——力谱云https://www.leapcloud.cn,可让企业主只需投入颠覆性的低App开发成本,即可打造集在线预订、商城购买、企业门店信息展示、丰富营销工具、会员管理、大数据分析等功能为一体的婚庆平台。

婚庆市场巨大,传统企业亟待转型

面对国内趋近万亿级的婚庆市场,移动互联网市场与手机App开发的入局,更加剧了传统婚庆公司之间的竞争。目前,随着消费升级,以及85后、90后在婚庆市场消费话语权的主导地位,消费体验追求新奇趣,消费能力不一。与此相对,婚庆传统企业,往往规模不大,利润不足,在淡旺季设置的优惠活动,也不能准确且快速地通知客户。甚至,企业没有什么渠道去建立口碑。婚纱摄影服务中的样片影集太过笨重,且成本高,不方便客户携带回去观摩。行业格局非常分散,区域性龙头份额低,也制约着企业在婚庆市场的市场扩张。
力谱云:多元化营销工具,助力婚庆企业快速转型

另一边,越来越多的传统婚庆公司也开始学习如何结合移动互联网,借力移动技术,为自己的企业升级寻找出口。只需一款手机App,即可将分散的客源、消费需求多元化的人群,聚集在一处。在淡旺季,通过定时定期的营销活动推送,一键速递到客户手中。运用社交、直播的力量,吸引大量人群,以新鲜、趣味的营销方式,进行销售裂变,引导口碑传递,逐步扩张平台吸金能力。
对此,拥有多年移动研发与营销经验的力谱云平台,可为中小型企业高效、低成本提供一站式的移动互联网婚庆解决方案。力谱云通过丰富的工具和强大的后台管理功能,可以帮助婚庆企业通过全渠道获客(App+微商城+移动网站+小程序)、高效的变现工具、全周期的运营服务管理、以及后期技术与服务的支撑,降低运营成本,提高客服效率,丰富的营销活动,并利用大数据能力,为企业精准捕捉用户需求,更新迭代婚庆服务,利用线上销售渠道,带动签单量,为线下门店建立良好用户口碑,树立品牌形象,实现企业业务持续且快速的增长。
力谱云的婚庆App案例解析——中国婚纱

日前,一款集合婚纱摄影、婚庆、购物为一体的电商App商城——中国婚纱,通过力谱云平台正式上线。在1对1的需求沟通中,力谱云的产品经理了解到,企业主坐拥当地丰富的婚庆产业链资源,寻求平台搭建进行企业创收。于是,提议为其打造B2B2C多商户入驻平台的解决方案,该平台能有效整合企业主所拥有的婚庆资源优势,并为企业带来平台自营收入、商家入驻/年费服务收入、广告收入、商户/产品竞价排名等多种营收方式,帮助企业引爆销量。
了解需求要点之后,力谱云方提供了集“B2B2C商城、店铺、社交、即时通讯、会员”等大型功能为一体的婚纱摄影类电商平台解决方案。首先,在B2B2C商城与店铺的基础上,构造一款方便线上交易&商户入驻的电商商城。其次,通过社交功能,打造供用户交流的婚庆社交圈,吸引新用户,推广产品和平台,并促进变现。其三,通过会员功能,打造客户分级服务,通过客户积分,激励用户购买/预定服务,进而快速变现。其四,通过推送代金券,用语提升用户先期下载量,以及后期的用户购买激活。另外,平台可根据营销活动需求,在旺季设置秒杀、拼团、直播等多元化的营销工具,以此促进平台销量不断突破攀升。
通过力谱云平台所研发的中国婚纱手机App平台,只需市场成本的1%,从研发、到打包上架应用市场,以及后续运营/技术遇到问题,都有专业团队全程陪伴护航,让企业主真正可以省心、省力、省钱地进入移动互联网市场。
传统企业接轨移动互联,获取更大商机

随着移动互联网时代的来临,许多实体企业正遭受着极大的冲击。另一方面,我们也能看到移动技术的成熟,可以为企业提供高效且低成本的升级服务。App的加入,不仅把人、商品、平台紧密地联系在了一起,并且可以让企业通过大胆的想象力以及创新力,为自己搭建渠道,建立口碑,带动销路。除了婚纱摄影类行业之外,无论是综合购物、跨境电商、后汽车服务,还是生鲜水果、餐饮、企业福利平台等等,企业都能通过力谱云,在移动端找到新的市场商机。
触摸这个时代的脉络吧,移动让你的商业,更精彩。

继续阅读 »

五一、十一、各种小长假都是婚潮高峰期,婚纱摄影自然供不应求。然而,面对消费升级趋势,以及互联网公司的入市,不少传统婚庆公司遭遇市场份额不断被瓜分的尴尬局面,熟不知只需开发一款小而精巧的手机App即可破局。深耕移动研发多年的力谱宿云企业,其旗下平台——力谱云https://www.leapcloud.cn,可让企业主只需投入颠覆性的低App开发成本,即可打造集在线预订、商城购买、企业门店信息展示、丰富营销工具、会员管理、大数据分析等功能为一体的婚庆平台。

婚庆市场巨大,传统企业亟待转型

面对国内趋近万亿级的婚庆市场,移动互联网市场与手机App开发的入局,更加剧了传统婚庆公司之间的竞争。目前,随着消费升级,以及85后、90后在婚庆市场消费话语权的主导地位,消费体验追求新奇趣,消费能力不一。与此相对,婚庆传统企业,往往规模不大,利润不足,在淡旺季设置的优惠活动,也不能准确且快速地通知客户。甚至,企业没有什么渠道去建立口碑。婚纱摄影服务中的样片影集太过笨重,且成本高,不方便客户携带回去观摩。行业格局非常分散,区域性龙头份额低,也制约着企业在婚庆市场的市场扩张。
力谱云:多元化营销工具,助力婚庆企业快速转型

另一边,越来越多的传统婚庆公司也开始学习如何结合移动互联网,借力移动技术,为自己的企业升级寻找出口。只需一款手机App,即可将分散的客源、消费需求多元化的人群,聚集在一处。在淡旺季,通过定时定期的营销活动推送,一键速递到客户手中。运用社交、直播的力量,吸引大量人群,以新鲜、趣味的营销方式,进行销售裂变,引导口碑传递,逐步扩张平台吸金能力。
对此,拥有多年移动研发与营销经验的力谱云平台,可为中小型企业高效、低成本提供一站式的移动互联网婚庆解决方案。力谱云通过丰富的工具和强大的后台管理功能,可以帮助婚庆企业通过全渠道获客(App+微商城+移动网站+小程序)、高效的变现工具、全周期的运营服务管理、以及后期技术与服务的支撑,降低运营成本,提高客服效率,丰富的营销活动,并利用大数据能力,为企业精准捕捉用户需求,更新迭代婚庆服务,利用线上销售渠道,带动签单量,为线下门店建立良好用户口碑,树立品牌形象,实现企业业务持续且快速的增长。
力谱云的婚庆App案例解析——中国婚纱

日前,一款集合婚纱摄影、婚庆、购物为一体的电商App商城——中国婚纱,通过力谱云平台正式上线。在1对1的需求沟通中,力谱云的产品经理了解到,企业主坐拥当地丰富的婚庆产业链资源,寻求平台搭建进行企业创收。于是,提议为其打造B2B2C多商户入驻平台的解决方案,该平台能有效整合企业主所拥有的婚庆资源优势,并为企业带来平台自营收入、商家入驻/年费服务收入、广告收入、商户/产品竞价排名等多种营收方式,帮助企业引爆销量。
了解需求要点之后,力谱云方提供了集“B2B2C商城、店铺、社交、即时通讯、会员”等大型功能为一体的婚纱摄影类电商平台解决方案。首先,在B2B2C商城与店铺的基础上,构造一款方便线上交易&商户入驻的电商商城。其次,通过社交功能,打造供用户交流的婚庆社交圈,吸引新用户,推广产品和平台,并促进变现。其三,通过会员功能,打造客户分级服务,通过客户积分,激励用户购买/预定服务,进而快速变现。其四,通过推送代金券,用语提升用户先期下载量,以及后期的用户购买激活。另外,平台可根据营销活动需求,在旺季设置秒杀、拼团、直播等多元化的营销工具,以此促进平台销量不断突破攀升。
通过力谱云平台所研发的中国婚纱手机App平台,只需市场成本的1%,从研发、到打包上架应用市场,以及后续运营/技术遇到问题,都有专业团队全程陪伴护航,让企业主真正可以省心、省力、省钱地进入移动互联网市场。
传统企业接轨移动互联,获取更大商机

随着移动互联网时代的来临,许多实体企业正遭受着极大的冲击。另一方面,我们也能看到移动技术的成熟,可以为企业提供高效且低成本的升级服务。App的加入,不仅把人、商品、平台紧密地联系在了一起,并且可以让企业通过大胆的想象力以及创新力,为自己搭建渠道,建立口碑,带动销路。除了婚纱摄影类行业之外,无论是综合购物、跨境电商、后汽车服务,还是生鲜水果、餐饮、企业福利平台等等,企业都能通过力谱云,在移动端找到新的市场商机。
触摸这个时代的脉络吧,移动让你的商业,更精彩。

收起阅读 »

云端支持打渠道包

HBuilder 云端打包 渠道包

以下内容已过期,最新渠道包配置参考:https://ask.dcloud.net.cn/article/35974


为进一步方便开发者查看应用的统计数据,云端打包服务新增按渠道打包的功能。

如何打包

使用 HBuilder 云打包时,在 manifest.json 的配置中,新增 plus->channel 节点用于填写自定义的渠道标识。

例如:

"plus": {  
    "launchwebview": {  
        "titleNView": {  
            "backgroundcolor": "#f7f7f7",  
            "titletext": "首页",  
            "titlecolor": "#000000"  
        }  
    },  
    "statusbar": {  
        "immersed": "supportedDevice",  
        "style": "dark"  
    },  
    "splashscreen": {  
        "autoclose": true,  
        "waiting": true  
    },  
    "channel": "dcloud"  
}

填写完成后,保存配置,进行云端打包即可。

常见的一些渠道及对应的标识(仅做参考,没有强制要求):

  • GooglePlay-google
  • 应用宝-yyb
  • 360应用市场-360
  • 华为应用商店-huawei
  • 小米应用商店-xiaomi

获取渠道信息

应用的市场推广渠道标识

plus.runtime.channel

如何查看数据

开发者在使用 HBuilder 新建并开发应用后,可以登录DCloud开发者中心查看应用的统计数据。

首页会展示所有已创建的应用列表,点击应用名称进入应用详情页,在上方的选项选择5+APP运营后可以查看该应用的『日活趋势』。

包含渠道信息的应用,左上角选择渠道,即可查看对应渠道的运营统计数据。

Tips:

  • 当日的数据,次日才会出统计结果。
  • 有用户使用且统计到有效数据,才可以按相应的渠道区分。
  • 目前需要一个渠道一个渠道打包,云打包暂时无法批量打多个渠道包出来。
  • 本文的渠道标记处理的是DCloud统计后台,如使用友盟统计,需要在友盟的sdk配置里单独配
继续阅读 »

以下内容已过期,最新渠道包配置参考:https://ask.dcloud.net.cn/article/35974


为进一步方便开发者查看应用的统计数据,云端打包服务新增按渠道打包的功能。

如何打包

使用 HBuilder 云打包时,在 manifest.json 的配置中,新增 plus->channel 节点用于填写自定义的渠道标识。

例如:

"plus": {  
    "launchwebview": {  
        "titleNView": {  
            "backgroundcolor": "#f7f7f7",  
            "titletext": "首页",  
            "titlecolor": "#000000"  
        }  
    },  
    "statusbar": {  
        "immersed": "supportedDevice",  
        "style": "dark"  
    },  
    "splashscreen": {  
        "autoclose": true,  
        "waiting": true  
    },  
    "channel": "dcloud"  
}

填写完成后,保存配置,进行云端打包即可。

常见的一些渠道及对应的标识(仅做参考,没有强制要求):

  • GooglePlay-google
  • 应用宝-yyb
  • 360应用市场-360
  • 华为应用商店-huawei
  • 小米应用商店-xiaomi

获取渠道信息

应用的市场推广渠道标识

plus.runtime.channel

如何查看数据

开发者在使用 HBuilder 新建并开发应用后,可以登录DCloud开发者中心查看应用的统计数据。

首页会展示所有已创建的应用列表,点击应用名称进入应用详情页,在上方的选项选择5+APP运营后可以查看该应用的『日活趋势』。

包含渠道信息的应用,左上角选择渠道,即可查看对应渠道的运营统计数据。

Tips:

  • 当日的数据,次日才会出统计结果。
  • 有用户使用且统计到有效数据,才可以按相应的渠道区分。
  • 目前需要一个渠道一个渠道打包,云打包暂时无法批量打多个渠道包出来。
  • 本文的渠道标记处理的是DCloud统计后台,如使用友盟统计,需要在友盟的sdk配置里单独配
收起阅读 »

Android下载进度条 待改进

下载进度

废话不多,直接上代码;
需要注意的是 进度条满值是100,100,100,重要的事情说3遍。。。
<body>
<div class="mui-content">
<div class="box">
<img src="../../images/update1.png"/>
</div>
<div class="up hide">
<h4>正在下载</h4>
<p class="mui-progressbar mui-progressbar-danger"><span></span></p>
</div>
</div>
<script src="../../js/mui.min.js"></script>
<script type="text/javascript">
mui.init();
var url;
var gobuy = null;
var container;
mui.plusReady(function(){
var ww = plus.webview.currentWebview();
url = ww.url;
console.log(url)
//点击开始下载
mui('.mui-content').on('tap','img',function(){
mui('.mui-content .box')[0].classList.add('hide');
mui('.mui-content .up')[0].classList.remove('hide');
downWgt(); // 下载升级包
container = mui(".mui-content p");
container.progressbar({
progress: 0
}).show(); //显示进度条
})
//重写返回
mui.back = function(){
mui.confirm('确定要取消更新么?','温馨提示',['取消','退出'],function(e){
console.log(e)
if(e.index == 1){
ww.hide("auto", 300);
plus.downloader.clear();
}else{
return
}
})
}

        })  
        // 下载文件  
        var dtask;  
        function downWgt(){  
            dtask = plus.downloader.createDownload( url, {filename:"_doc/update/"}, function(d,status){  
                if ( status == 200 ) {   
                    mui.toast('下载完成');  
                    console.log("下载成功:"+d.filename);  
                    installWgt(d.filename); // 安装  
                    mui.later(function(){  
                        mui.back();  
                    },500)  
                } else {  
                    console.log("下载失败!");  
                    plus.nativeUI.alert("下载更新包失败!");  
                }  
                plus.nativeUI.closeWaiting();  
            });  
            dtask.addEventListener( "statechanged", onStateChanged, false );  
            dtask.start();  

        }  
        // 监听下载任务状态   
        function onStateChanged(){  
            mui.later(function(){  
                var num = dtask.downloadedSize / dtask.totalSize * 100;  
                if(num < 100){  
                    mui(container).progressbar().setProgress(num);  
                }else{  
                    mui(container).progressbar().hide();  
                }  
            },200)  

        }  
        // 更新应用资源  
        function installWgt(path){  
            plus.nativeUI.showWaiting("安装wgt文件...");  
            plus.runtime.install(path,{},function(){  
                plus.nativeUI.closeWaiting();  
                console.log("应用资源更新完成!")  
            },function(e){  
                plus.nativeUI.closeWaiting();  
                console.log("安装文件失败["+e.code+"]:"+e.message);  
                plus.nativeUI.alert("安装文件失败["+e.code+"]:"+e.message);  
            });  
        }  
    </script>  
</body>  

继续阅读 »

废话不多,直接上代码;
需要注意的是 进度条满值是100,100,100,重要的事情说3遍。。。
<body>
<div class="mui-content">
<div class="box">
<img src="../../images/update1.png"/>
</div>
<div class="up hide">
<h4>正在下载</h4>
<p class="mui-progressbar mui-progressbar-danger"><span></span></p>
</div>
</div>
<script src="../../js/mui.min.js"></script>
<script type="text/javascript">
mui.init();
var url;
var gobuy = null;
var container;
mui.plusReady(function(){
var ww = plus.webview.currentWebview();
url = ww.url;
console.log(url)
//点击开始下载
mui('.mui-content').on('tap','img',function(){
mui('.mui-content .box')[0].classList.add('hide');
mui('.mui-content .up')[0].classList.remove('hide');
downWgt(); // 下载升级包
container = mui(".mui-content p");
container.progressbar({
progress: 0
}).show(); //显示进度条
})
//重写返回
mui.back = function(){
mui.confirm('确定要取消更新么?','温馨提示',['取消','退出'],function(e){
console.log(e)
if(e.index == 1){
ww.hide("auto", 300);
plus.downloader.clear();
}else{
return
}
})
}

        })  
        // 下载文件  
        var dtask;  
        function downWgt(){  
            dtask = plus.downloader.createDownload( url, {filename:"_doc/update/"}, function(d,status){  
                if ( status == 200 ) {   
                    mui.toast('下载完成');  
                    console.log("下载成功:"+d.filename);  
                    installWgt(d.filename); // 安装  
                    mui.later(function(){  
                        mui.back();  
                    },500)  
                } else {  
                    console.log("下载失败!");  
                    plus.nativeUI.alert("下载更新包失败!");  
                }  
                plus.nativeUI.closeWaiting();  
            });  
            dtask.addEventListener( "statechanged", onStateChanged, false );  
            dtask.start();  

        }  
        // 监听下载任务状态   
        function onStateChanged(){  
            mui.later(function(){  
                var num = dtask.downloadedSize / dtask.totalSize * 100;  
                if(num < 100){  
                    mui(container).progressbar().setProgress(num);  
                }else{  
                    mui(container).progressbar().hide();  
                }  
            },200)  

        }  
        // 更新应用资源  
        function installWgt(path){  
            plus.nativeUI.showWaiting("安装wgt文件...");  
            plus.runtime.install(path,{},function(){  
                plus.nativeUI.closeWaiting();  
                console.log("应用资源更新完成!")  
            },function(e){  
                plus.nativeUI.closeWaiting();  
                console.log("安装文件失败["+e.code+"]:"+e.message);  
                plus.nativeUI.alert("安装文件失败["+e.code+"]:"+e.message);  
            });  
        }  
    </script>  
</body>  

收起阅读 »

内置web服务器被防火墙禁用导致预览和运行异常的解决方案

边改边看 web服务器 防火墙 预览 内置服务器

HBuilder内置web服务器,方便在外部或内置浏览器里查看HTML文件。
但使用该功能时,操作系统会弹框询问用户是否允许。如果用户不幸点了拒绝,那就会出现如下错误界面。

此时恢复办法是需要在os的防火墙中解除限制。
下面以windows10为例说明:
在控制面板里找到防火墙,点里面的允许的应用,如下图。

在windows10的开始菜单里搜"防火墙"也能直接进入这个界面。

打开这个界面后,找到里面的HBuilderX或HBuilder或rcp的exe文件,把前面的对勾打上。
有的系统需要先点击右上角的更改设置才能修改。

还是要注意,当使用HBuilder时系统弹出的各种询问框,都要点允许,否则相应功能就无法使用。

有时设置后需要重启HBuilder、HBuilderX,甚至重启电脑。

继续阅读 »

HBuilder内置web服务器,方便在外部或内置浏览器里查看HTML文件。
但使用该功能时,操作系统会弹框询问用户是否允许。如果用户不幸点了拒绝,那就会出现如下错误界面。

此时恢复办法是需要在os的防火墙中解除限制。
下面以windows10为例说明:
在控制面板里找到防火墙,点里面的允许的应用,如下图。

在windows10的开始菜单里搜"防火墙"也能直接进入这个界面。

打开这个界面后,找到里面的HBuilderX或HBuilder或rcp的exe文件,把前面的对勾打上。
有的系统需要先点击右上角的更改设置才能修改。

还是要注意,当使用HBuilder时系统弹出的各种询问框,都要点允许,否则相应功能就无法使用。

有时设置后需要重启HBuilder、HBuilderX,甚至重启电脑。

收起阅读 »

ios真机调试时需要添加的UDID是什么?怎么获取?

iOS打包 iOS证书

很多开发者在真机调试测试ios应用时,会看到需要添加udid,搞不清这个是什么东西应该怎么获取。

udid就是手机的一个串号,相当于手机的身份证,具有唯一性。

下面介绍如何获取udid并添加到开发者中心后台。

有两种方式可以获取udid

ios app真机调试到上架App Store完整教程

1、苹果手机助手获取UDID

如爱思助手,电脑下载爱思助手,连上苹果手机,设备信息里面那个设备标识就是udid。

第二个方式可以直接苹果手机直接扫码获取

使用 iPhone 或 iPad 微信扫码选择自带的浏览器safari浏览器打开二维码里的链接,即可快速获取 UDID

这个一长串的就是设备的Udid

04bff1010f1656cde7d60g560d7d897e2821dc88

2、登录开发者中心,添加设备,选择侧边栏的Devices,All选项,点击右上角+号。

3、输入设备名称(名称可以随意,比如老板的手机,可以设置为laoban,不能用中文),再输入设备UDID,一路点击创建。

继续阅读 »

很多开发者在真机调试测试ios应用时,会看到需要添加udid,搞不清这个是什么东西应该怎么获取。

udid就是手机的一个串号,相当于手机的身份证,具有唯一性。

下面介绍如何获取udid并添加到开发者中心后台。

有两种方式可以获取udid

ios app真机调试到上架App Store完整教程

1、苹果手机助手获取UDID

如爱思助手,电脑下载爱思助手,连上苹果手机,设备信息里面那个设备标识就是udid。

第二个方式可以直接苹果手机直接扫码获取

使用 iPhone 或 iPad 微信扫码选择自带的浏览器safari浏览器打开二维码里的链接,即可快速获取 UDID

这个一长串的就是设备的Udid

04bff1010f1656cde7d60g560d7d897e2821dc88

2、登录开发者中心,添加设备,选择侧边栏的Devices,All选项,点击右上角+号。

3、输入设备名称(名称可以随意,比如老板的手机,可以设置为laoban,不能用中文),再输入设备UDID,一路点击创建。

收起阅读 »