HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

h5+ app内点击按钮实现复制功能 实现方法

移动APP

在项目中由于要实现点击按钮复制功能,
我用的是H5+APP,实现代码如下(包括安卓+IOS):

/**  
* //参数copy是要复制的文本内容    
*  tip  复制成功后的提示语,可空  
*/  
function copy_fun(copy,tips) {  
    if(!tips){  
        tips="已成功复制到剪贴板";  
    }  
    loading();  
    mui.plusReady(function() {  
        //判断是安卓还是ios  
        if (mui.os.ios) {  
            //ios  
            var UIPasteboard = plus.ios.importClass("UIPasteboard");  
            var generalPasteboard = UIPasteboard.generalPasteboard();  
            //设置/获取文本内容:  
            generalPasteboard.plusCallMethod({  
                setValue: copy,  
                forPasteboardType: "public.utf8-plain-text"  
            });  
            generalPasteboard.plusCallMethod({  
                valueForPasteboardType: "public.utf8-plain-text"  
            });  
            mui.toast(tips);  
            loading_close();  
        } else {  
            //安卓  
            var context = plus.android.importClass("android.content.Context");  
            var main = plus.android.runtimeMainActivity();  
            var clip = main.getSystemService(context.CLIPBOARD_SERVICE);  
            plus.android.invoke(clip, "setText", copy);  
            mui.toast(tips);  
            loading_close();  
        }  
    });  
}

有不明白的可留言,技术交流QQ 363384521,平时较忙,有空会回复大家

继续阅读 »

在项目中由于要实现点击按钮复制功能,
我用的是H5+APP,实现代码如下(包括安卓+IOS):

/**  
* //参数copy是要复制的文本内容    
*  tip  复制成功后的提示语,可空  
*/  
function copy_fun(copy,tips) {  
    if(!tips){  
        tips="已成功复制到剪贴板";  
    }  
    loading();  
    mui.plusReady(function() {  
        //判断是安卓还是ios  
        if (mui.os.ios) {  
            //ios  
            var UIPasteboard = plus.ios.importClass("UIPasteboard");  
            var generalPasteboard = UIPasteboard.generalPasteboard();  
            //设置/获取文本内容:  
            generalPasteboard.plusCallMethod({  
                setValue: copy,  
                forPasteboardType: "public.utf8-plain-text"  
            });  
            generalPasteboard.plusCallMethod({  
                valueForPasteboardType: "public.utf8-plain-text"  
            });  
            mui.toast(tips);  
            loading_close();  
        } else {  
            //安卓  
            var context = plus.android.importClass("android.content.Context");  
            var main = plus.android.runtimeMainActivity();  
            var clip = main.getSystemService(context.CLIPBOARD_SERVICE);  
            plus.android.invoke(clip, "setText", copy);  
            mui.toast(tips);  
            loading_close();  
        }  
    });  
}

有不明白的可留言,技术交流QQ 363384521,平时较忙,有空会回复大家

收起阅读 »

unipush_android端 集成

unipush

unipush集成文档备注

  1. 下载最新的sdk,参考 "unipush离线集成指南"集成文档(或者参考:链接).android 段代码ok;
  2. Dcloud后台开通服务:;
  3. 后台推送使用;
  4. Dcloud 代码,在最后面有个 uni-push.zip.
  5. 可能出现问题
继续阅读 »

unipush集成文档备注

  1. 下载最新的sdk,参考 "unipush离线集成指南"集成文档(或者参考:链接).android 段代码ok;
  2. Dcloud后台开通服务:;
  3. 后台推送使用;
  4. Dcloud 代码,在最后面有个 uni-push.zip.
  5. 可能出现问题
收起阅读 »

uni-AD广告联盟配置

离线打包 UniAD

> 此文档将不再维护,请移步新文档:https://nativesupport.dcloud.net.cn

配置离线打包广告支持

配置离线广告之前,需先在dcloud广告联盟申请账号。

AndroidManifest.xml文件中添加如下节点到节点中,并配置替换其中5+应用appid和广告联盟会员adid的值,因为涉及到开屏广告业务,项目工程必须以io.dcloud.PandoraEntry作为5+应用的入口Activity。该activity已包含在lib.5plus.base-release中,开发者无需实现。

<meta-data android:name="DCLOUD_AD_ID" android:value="广告标识"/>    
<meta-data android:name="DCLOUD_AD_SPLASH" android:value="true"/><!--如果不开启开屏广告则不设置此字段或者值设置为false-->    
<meta-data android:name="DCLOUD_STREAMAPP_CHANNEL" android:value="包名|应用标识|广告标识|渠道,如io.dcloud.appid|appid|adid|google" /><!--为了保证广告统计的有效性,请正确设置此值-->  
  • 包名:对应Android项目中build.gradle中的applicationId,如io.dcloud.HBuilder
  • 应用标识:对应对应5+或uni-app项目manifest.json中appid
  • 广告标识:DCloud的广告标识,开通广告后可在dev.dcloud.net.cn获取,如果没有开通广告,设置值为空即可
  • 渠道:渠道包制作指南

360聚合广告

库文件配置

将以下文件放入工程的libs目录下

路径 360聚合记错模块配置 360聚合穿山甲模块配置 360聚合广点通模块配置
SDK/libs ads-release.aar、ads-360-release.aar、torch-adcore-5.12.3140.aar open_ad_sdk.aar、torch-plcsjsdk-5.12.3140.aar torch-plgdtapi-5.12.3140.aar、torch-plgdtsdk-5.12.3140.aar

如果没有在360聚合平台申请穿山甲和广点通的广告,则对应的aar不需要添加

dcloud_properties.xml配置

features 节点添加

        <feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">  
            <module name="360" value="io.dcloud.feature.ad.juhe360.AD360Module"/>  
        </feature>  

穿山甲广告

库文件配置

将以下文件放入工程的libs目录下

路径 文件名
SDK/libs ads-release.aar、ads-csj-release.aar、open_ad_sdk.aar

Androidmanifest.xml配置

application节点下添加

将“${applicationId}”替换成应用的包名

        <provider  
            android:name="com.bytedance.sdk.openadsdk.TTFileProvider"  
            android:authorities="${applicationId}.TTFileProvider"  
            android:exported="false"  
            android:grantUriPermissions="true">  
            <meta-data  
                android:name="android.support.FILE_PROVIDER_PATHS"  
                android:resource="@xml/file_paths"  
                tools:replace="android:resource"/>  
        </provider>  

        <provider  
            android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"  
            android:authorities="${applicationId}.TTMultiProvider"  
            android:exported="false" />  

dcloud_properties.xml配置

features 节点添加

        <feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">  
            <module name="csj" value="io.dcloud.feature.ad.csj.ADCsjModule"/>  
        </feature>  

广点通广告

库文件配置

将以下文件放入工程的libs目录下

路径 文件名
SDK/libs ads-release.aar、ads-gdt-release.aar、GDTSDK.unionNormal.4.110.980.aar

Androidmanifest.xml配置

application节点下添加

将“${applicationId}”替换成应用的包名

        <provider  
            android:name="io.dcloud.gdt.GdtFileProvider"  
            android:authorities="${applicationId}.fileprovider"  
            android:exported="false"  
            android:grantUriPermissions="true">  
            <meta-data  
                android:name="android.support.FILE_PROVIDER_PATHS"  
                android:resource="@xml/gdt_file_path"  
                tools:replace="android:resource"/>  
        </provider>  

dcloud_properties.xml配置

features 节点添加

        <feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">  
            <module name="gdt" value="io.dcloud.feature.ad.gdt.ADGdtModule"/>  
        </feature>  

uni-AD广告联盟开通指南

继续阅读 »

> 此文档将不再维护,请移步新文档:https://nativesupport.dcloud.net.cn

配置离线打包广告支持

配置离线广告之前,需先在dcloud广告联盟申请账号。

AndroidManifest.xml文件中添加如下节点到节点中,并配置替换其中5+应用appid和广告联盟会员adid的值,因为涉及到开屏广告业务,项目工程必须以io.dcloud.PandoraEntry作为5+应用的入口Activity。该activity已包含在lib.5plus.base-release中,开发者无需实现。

<meta-data android:name="DCLOUD_AD_ID" android:value="广告标识"/>    
<meta-data android:name="DCLOUD_AD_SPLASH" android:value="true"/><!--如果不开启开屏广告则不设置此字段或者值设置为false-->    
<meta-data android:name="DCLOUD_STREAMAPP_CHANNEL" android:value="包名|应用标识|广告标识|渠道,如io.dcloud.appid|appid|adid|google" /><!--为了保证广告统计的有效性,请正确设置此值-->  
  • 包名:对应Android项目中build.gradle中的applicationId,如io.dcloud.HBuilder
  • 应用标识:对应对应5+或uni-app项目manifest.json中appid
  • 广告标识:DCloud的广告标识,开通广告后可在dev.dcloud.net.cn获取,如果没有开通广告,设置值为空即可
  • 渠道:渠道包制作指南

360聚合广告

库文件配置

将以下文件放入工程的libs目录下

路径 360聚合记错模块配置 360聚合穿山甲模块配置 360聚合广点通模块配置
SDK/libs ads-release.aar、ads-360-release.aar、torch-adcore-5.12.3140.aar open_ad_sdk.aar、torch-plcsjsdk-5.12.3140.aar torch-plgdtapi-5.12.3140.aar、torch-plgdtsdk-5.12.3140.aar

如果没有在360聚合平台申请穿山甲和广点通的广告,则对应的aar不需要添加

dcloud_properties.xml配置

features 节点添加

        <feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">  
            <module name="360" value="io.dcloud.feature.ad.juhe360.AD360Module"/>  
        </feature>  

穿山甲广告

库文件配置

将以下文件放入工程的libs目录下

路径 文件名
SDK/libs ads-release.aar、ads-csj-release.aar、open_ad_sdk.aar

Androidmanifest.xml配置

application节点下添加

将“${applicationId}”替换成应用的包名

        <provider  
            android:name="com.bytedance.sdk.openadsdk.TTFileProvider"  
            android:authorities="${applicationId}.TTFileProvider"  
            android:exported="false"  
            android:grantUriPermissions="true">  
            <meta-data  
                android:name="android.support.FILE_PROVIDER_PATHS"  
                android:resource="@xml/file_paths"  
                tools:replace="android:resource"/>  
        </provider>  

        <provider  
            android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"  
            android:authorities="${applicationId}.TTMultiProvider"  
            android:exported="false" />  

dcloud_properties.xml配置

features 节点添加

        <feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">  
            <module name="csj" value="io.dcloud.feature.ad.csj.ADCsjModule"/>  
        </feature>  

广点通广告

库文件配置

将以下文件放入工程的libs目录下

路径 文件名
SDK/libs ads-release.aar、ads-gdt-release.aar、GDTSDK.unionNormal.4.110.980.aar

Androidmanifest.xml配置

application节点下添加

将“${applicationId}”替换成应用的包名

        <provider  
            android:name="io.dcloud.gdt.GdtFileProvider"  
            android:authorities="${applicationId}.fileprovider"  
            android:exported="false"  
            android:grantUriPermissions="true">  
            <meta-data  
                android:name="android.support.FILE_PROVIDER_PATHS"  
                android:resource="@xml/gdt_file_path"  
                tools:replace="android:resource"/>  
        </provider>  

dcloud_properties.xml配置

features 节点添加

        <feature name="Ad" value="io.dcloud.feature.ad.AdFlowFeatureImpl">  
            <module name="gdt" value="io.dcloud.feature.ad.gdt.ADGdtModule"/>  
        </feature>  

uni-AD广告联盟开通指南

收起阅读 »

uni-app h5 使用微信JSSDK的方式

微信JSSDK

综合各方经验及文档总结了以下我的使用方法,希望对有需要的同学有些帮助
第一步:npm install jweixin-module --save
第二步:common文件夹新建js文件,我这里命名jwx.js

jwx.js 文件内容

var jweixin = require('jweixin-module');  
export default {  
    //判断是否在微信中    
    isWechat: function() {  
        var ua = window.navigator.userAgent.toLowerCase();  
        if (ua.match(/micromessenger/i) == 'micromessenger') {  
            //console.log('是微信客户端')  
            return true;  
        } else {  
            //console.log('不是微信客户端')  
            return false;  
        }  
    },  
    initJssdk:function(callback){  
        var uri = encodeURIComponent(window.location.href.split('#')[0]);//获取当前url然后传递给后台获取授权和签名信息  
        uni.request({  
            url:'';//你的接口地址  
            data:{  
                url:uri  
            },  
            success:(res)=>{  
                //返回需要的参数appId,timestamp,noncestr,signature等  
                //注入config权限配置  
                jweixin.config({  
                    debug: false,  
                    appId: res.data.signPackage.appId,  
                    timestamp: res.data.signPackage.timestamp,  
                    nonceStr: res.data.signPackage.nonceStr,  
                    signature: res.data.signPackage.signature,  
                    jsApiList: [//这里是需要用到的接口名称  
                        'checkJsApi',//判断当前客户端版本是否支持指定JS接口  
                        'onMenuShareAppMessage',//分享接口  
                        'getLocation',//获取位置  
                        'openLocation',//打开位置  
                        'scanQRCode',//扫一扫接口  
                        'chooseWXPay',//微信支付  
                        'chooseImage',//拍照或从手机相册中选图接口  
                        'previewImage',//预览图片接口  
                        'uploadImage'//上传图片  
                    ]  
                });  
                if (callback) {  
                    callback(res.data);  
                }  

            }  
        })  
    },  
    //在需要定位页面调用  
    getlocation: function(callback) {  
        if (!this.isWechat()) {  
            //console.log('不是微信客户端')  
            return;  
        }  
        this.initJssdk(function(res) {  
            jweixin.ready(function() {  
                jweixin.getLocation({  
                    type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'  
                    success: function (res) {  
                        // console.log(res);  
                        callback(res)  
                    },  
                    fail:function(res){  
                        console.log(res)  
                    },  
                    // complete:function(res){  
                    //     console.log(res)  
                    // }  
                });  
            });  
        });  
    },  
    openlocation:function(data,callback){//打开位置  
        if (!this.isWechat()) {  
            //console.log('不是微信客户端')  
            return;  
        }  
        this.initJssdk(function(res) {  
            jweixin.ready(function() {  
                jweixin.openLocation({//根据传入的坐标打开地图  
                    latitude:data.latitude,  
                    longitude:data.longitude  
                });  
            });  
        });  
    },  
    chooseImage:function(callback){//选择图片  
        if (!this.isWechat()) {  
            //console.log('不是微信客户端')  
            return;  
        }  
        //console.log(data);  
        this.initJssdk(function(res) {  
            jweixin.ready(function() {  
                jweixin.chooseImage({  
                    count:1,  
                    sizeType:['compressed'],  
                    sourceType:['album'],  
                    success:function(rs){  
                        callback(rs)  
                    }  
                })  
            });  
        });  
    },  
    //微信支付  
    wxpay: function(data,callback) {  
        if (!this.isWechat()) {  
            //console.log('不是微信客户端')  
            return;  
        }  
        this.initJssdk(function(res) {  
            jweixin.ready(function() {  
                jweixin.chooseWXPay({  
                    timestamp: data.timestamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符  
                    nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位  
                    package: data.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)  
                    signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'  
                    paySign: data.paysign, // 支付签名  
                    success: function (res) {  
                        // console.log(res);  
                        callback(res)  
                    },  
                    fail:function(res){  
                        callback(res)  
                    },  
                    // complete:function(res){  
                    //     console.log(res)  
                    // }  
                });  
            });  
        });  
    }  
}  

第三步:main.js 文件里引入
import jwx from '@/common/jwx'
Vue.prototype.$jwx = jwx

第四步:在需要的页面直接用this.$jwx.xxx(接口名称)调用即可

  if (this.$jwx && this.$jwx.isWechat()) {//检查是否是微信环境  
        this.$jwx.getlocation(function (res) {//获取位置  
        console.log(res);  
                //拿到返回数据自行处理  
        });  

      //调用支付前应先处理订单信息,然后根据订单信息返回支付需要的timestamp,noncestr,package,signType,paySign等参数  
     //下面的rs.data为后台处理完订单后返回的;我的业务模式为用户点击提交订单,请求后台添加订单接口,订单添加完成后,后台根据订单id,订单金额等信息调用微信签名拿到timestamp,noncestr等参数返回;  
      this.$jwx.wxpay({//调用支付,  
        'timestamp':rs.data.timeStamp,   
        'nonceStr':rs.data.nonceStr,  
        'package':rs.data.package,  
        'signType':rs.data.signType,  
        'paysign':rs.data.paySign  
    },function (r) {  
        if (r.errMsg == 'chooseWXPay:ok') {  
            uni.redirectTo({//支付成功转到支付成功提示页面  
                url: '/pages/paySuccess  
            })  
        }else{  
            that.$msg('支付失败!');  
        }  
    });  
  }
继续阅读 »

综合各方经验及文档总结了以下我的使用方法,希望对有需要的同学有些帮助
第一步:npm install jweixin-module --save
第二步:common文件夹新建js文件,我这里命名jwx.js

jwx.js 文件内容

var jweixin = require('jweixin-module');  
export default {  
    //判断是否在微信中    
    isWechat: function() {  
        var ua = window.navigator.userAgent.toLowerCase();  
        if (ua.match(/micromessenger/i) == 'micromessenger') {  
            //console.log('是微信客户端')  
            return true;  
        } else {  
            //console.log('不是微信客户端')  
            return false;  
        }  
    },  
    initJssdk:function(callback){  
        var uri = encodeURIComponent(window.location.href.split('#')[0]);//获取当前url然后传递给后台获取授权和签名信息  
        uni.request({  
            url:'';//你的接口地址  
            data:{  
                url:uri  
            },  
            success:(res)=>{  
                //返回需要的参数appId,timestamp,noncestr,signature等  
                //注入config权限配置  
                jweixin.config({  
                    debug: false,  
                    appId: res.data.signPackage.appId,  
                    timestamp: res.data.signPackage.timestamp,  
                    nonceStr: res.data.signPackage.nonceStr,  
                    signature: res.data.signPackage.signature,  
                    jsApiList: [//这里是需要用到的接口名称  
                        'checkJsApi',//判断当前客户端版本是否支持指定JS接口  
                        'onMenuShareAppMessage',//分享接口  
                        'getLocation',//获取位置  
                        'openLocation',//打开位置  
                        'scanQRCode',//扫一扫接口  
                        'chooseWXPay',//微信支付  
                        'chooseImage',//拍照或从手机相册中选图接口  
                        'previewImage',//预览图片接口  
                        'uploadImage'//上传图片  
                    ]  
                });  
                if (callback) {  
                    callback(res.data);  
                }  

            }  
        })  
    },  
    //在需要定位页面调用  
    getlocation: function(callback) {  
        if (!this.isWechat()) {  
            //console.log('不是微信客户端')  
            return;  
        }  
        this.initJssdk(function(res) {  
            jweixin.ready(function() {  
                jweixin.getLocation({  
                    type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'  
                    success: function (res) {  
                        // console.log(res);  
                        callback(res)  
                    },  
                    fail:function(res){  
                        console.log(res)  
                    },  
                    // complete:function(res){  
                    //     console.log(res)  
                    // }  
                });  
            });  
        });  
    },  
    openlocation:function(data,callback){//打开位置  
        if (!this.isWechat()) {  
            //console.log('不是微信客户端')  
            return;  
        }  
        this.initJssdk(function(res) {  
            jweixin.ready(function() {  
                jweixin.openLocation({//根据传入的坐标打开地图  
                    latitude:data.latitude,  
                    longitude:data.longitude  
                });  
            });  
        });  
    },  
    chooseImage:function(callback){//选择图片  
        if (!this.isWechat()) {  
            //console.log('不是微信客户端')  
            return;  
        }  
        //console.log(data);  
        this.initJssdk(function(res) {  
            jweixin.ready(function() {  
                jweixin.chooseImage({  
                    count:1,  
                    sizeType:['compressed'],  
                    sourceType:['album'],  
                    success:function(rs){  
                        callback(rs)  
                    }  
                })  
            });  
        });  
    },  
    //微信支付  
    wxpay: function(data,callback) {  
        if (!this.isWechat()) {  
            //console.log('不是微信客户端')  
            return;  
        }  
        this.initJssdk(function(res) {  
            jweixin.ready(function() {  
                jweixin.chooseWXPay({  
                    timestamp: data.timestamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符  
                    nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位  
                    package: data.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)  
                    signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'  
                    paySign: data.paysign, // 支付签名  
                    success: function (res) {  
                        // console.log(res);  
                        callback(res)  
                    },  
                    fail:function(res){  
                        callback(res)  
                    },  
                    // complete:function(res){  
                    //     console.log(res)  
                    // }  
                });  
            });  
        });  
    }  
}  

第三步:main.js 文件里引入
import jwx from '@/common/jwx'
Vue.prototype.$jwx = jwx

第四步:在需要的页面直接用this.$jwx.xxx(接口名称)调用即可

  if (this.$jwx && this.$jwx.isWechat()) {//检查是否是微信环境  
        this.$jwx.getlocation(function (res) {//获取位置  
        console.log(res);  
                //拿到返回数据自行处理  
        });  

      //调用支付前应先处理订单信息,然后根据订单信息返回支付需要的timestamp,noncestr,package,signType,paySign等参数  
     //下面的rs.data为后台处理完订单后返回的;我的业务模式为用户点击提交订单,请求后台添加订单接口,订单添加完成后,后台根据订单id,订单金额等信息调用微信签名拿到timestamp,noncestr等参数返回;  
      this.$jwx.wxpay({//调用支付,  
        'timestamp':rs.data.timeStamp,   
        'nonceStr':rs.data.nonceStr,  
        'package':rs.data.package,  
        'signType':rs.data.signType,  
        'paysign':rs.data.paySign  
    },function (r) {  
        if (r.errMsg == 'chooseWXPay:ok') {  
            uni.redirectTo({//支付成功转到支付成功提示页面  
                url: '/pages/paySuccess  
            })  
        }else{  
            that.$msg('支付失败!');  
        }  
    });  
  }
收起阅读 »

uni-app map组件polyline 和markers 动态增加重绘问题

map uniapp

uni-app map组件使用polyline 和markers 动态增加多个,会发现一操作polyline 和markers对象都会重新渲染界面。
比例我先定义this.polyline = []
后面我增加this.polyline.push(....)画一条线,二条线
你会发觉每一次操作this.polyline对象都会新渲染界面,使得有很明显的界面闪动问题。

附视频(闪动问题)

继续阅读 »

uni-app map组件使用polyline 和markers 动态增加多个,会发现一操作polyline 和markers对象都会重新渲染界面。
比例我先定义this.polyline = []
后面我增加this.polyline.push(....)画一条线,二条线
你会发觉每一次操作this.polyline对象都会新渲染界面,使得有很明显的界面闪动问题。

附视频(闪动问题)

收起阅读 »

5+ API plus.sqlite.executeSql() 支持执行多条sql语句

HTML5+ SQLite Android

说明

因为Android原生数据库不支持以分号分割的多条sql语句,所以当执行多条语句时,只会执行第一条sql语句。
而在iOS平台原生数据库则支持。
为解决部分用户的需求,兼容平台差异性。

HBuilderX2.5.3+版本 plus.sqlite.executeSql() 将兼容支持以数组形式传入的多条数组

具体API参考如下:

    void plus.sqlite.executeSql(options);  

参数:

options参数为json类型,包含以下属性:

  • name: ( String ) 必选 数据库名称
  • sql: ( String|Array ) 必选 需要执行的SQL语句或数组
  • success: ( SQLiteSuccessCallback ) 可选 执行SQL语句成功回调函数
  • fail: ( SQLiteFailCallback ) 可选 执行SQL语句失败回调函数

示例:

function executeSQL(){  
    plus.sqlite.executeSql({  
        name: 'first',  
        sql: ['create table if not exists table_A("where" CHAR(110),"location" CHAR(100),"age" INT(11))','create table if not exists table_B("where" CHAR(110),"location" CHAR(100),"age" INT(11));'],  
        success: function(e){  
            console.log('executeSql success!');  
            plus.sqlite.executeSql({  
                name: 'first',  
                sql: ["insert into table_B values('北京','安乐林:',11)","insert into table_B values('天津','风火轮',22);"],  
                success: function(e){  
                    console.log('executeSql success!');  
                },  
                fail: function(e){  
                    console.log('executeSql failed: '+JSON.stringify(e));  
                }  
            });  
        },  
        fail: function(e){  
            console.log('executeSql failed: '+JSON.stringify(e));  
        }  
    });  
}  

具体规范可参考:https://www.html5plus.org/doc/zh_cn/sqlite.html#plus.sqlite.executeSql

继续阅读 »

说明

因为Android原生数据库不支持以分号分割的多条sql语句,所以当执行多条语句时,只会执行第一条sql语句。
而在iOS平台原生数据库则支持。
为解决部分用户的需求,兼容平台差异性。

HBuilderX2.5.3+版本 plus.sqlite.executeSql() 将兼容支持以数组形式传入的多条数组

具体API参考如下:

    void plus.sqlite.executeSql(options);  

参数:

options参数为json类型,包含以下属性:

  • name: ( String ) 必选 数据库名称
  • sql: ( String|Array ) 必选 需要执行的SQL语句或数组
  • success: ( SQLiteSuccessCallback ) 可选 执行SQL语句成功回调函数
  • fail: ( SQLiteFailCallback ) 可选 执行SQL语句失败回调函数

示例:

function executeSQL(){  
    plus.sqlite.executeSql({  
        name: 'first',  
        sql: ['create table if not exists table_A("where" CHAR(110),"location" CHAR(100),"age" INT(11))','create table if not exists table_B("where" CHAR(110),"location" CHAR(100),"age" INT(11));'],  
        success: function(e){  
            console.log('executeSql success!');  
            plus.sqlite.executeSql({  
                name: 'first',  
                sql: ["insert into table_B values('北京','安乐林:',11)","insert into table_B values('天津','风火轮',22);"],  
                success: function(e){  
                    console.log('executeSql success!');  
                },  
                fail: function(e){  
                    console.log('executeSql failed: '+JSON.stringify(e));  
                }  
            });  
        },  
        fail: function(e){  
            console.log('executeSql failed: '+JSON.stringify(e));  
        }  
    });  
}  

具体规范可参考:https://www.html5plus.org/doc/zh_cn/sqlite.html#plus.sqlite.executeSql

收起阅读 »

touch时间不触发

<cover-view class="video-touch-view" v-if="isVideoFullScreen" :style="{width:${fullControlsWidth}px,height:${fullControlsHeigt}px}"
@touchstart="videoTouchStart" @touchmove="videoTouchMove" @touchend="videoTouchEnd"></cover-view>

在nvue页面里的视频播放器覆盖层,把HBuilderX升级到2.5.1.20200103后touch事件在安卓手机上都不触发了,但是ios是可以的,而且升级之前安卓也是正常的。自从升级了之后一大推坑,各种问题,郁闷死了

继续阅读 »

<cover-view class="video-touch-view" v-if="isVideoFullScreen" :style="{width:${fullControlsWidth}px,height:${fullControlsHeigt}px}"
@touchstart="videoTouchStart" @touchmove="videoTouchMove" @touchend="videoTouchEnd"></cover-view>

在nvue页面里的视频播放器覆盖层,把HBuilderX升级到2.5.1.20200103后touch事件在安卓手机上都不触发了,但是ios是可以的,而且升级之前安卓也是正常的。自从升级了之后一大推坑,各种问题,郁闷死了

收起阅读 »

uni-app原生打包启动 高德APP规划点到点路线

AMAP

android原生插件,创建module

public class AmapWXModule extends WXSDKEngine.DestroyableModule {  

    @JSMethod(uiThread = true)  
    public void startNaviGao(JSONObject options) {  
        if (mWXSDKInstance.getContext() instanceof Activity) {  
            StringBuffer stringBuffer = new StringBuffer("amapuri://route/plan/");  
            String sid = options.getString("sid");  
            String slat = options.getString("slat");  
            String slon = options.getString("slon");  
            String sname = options.getString("sname");  
            String did = options.getString("did");  
            String dlat = options.getString("dlat");  
            String dlon = options.getString("dlon");  
            String dname = options.getString("dname");  
            String dev = options.getString("dev");  
            String t = options.getString("t");  
            stringBuffer.append("?sid=").append(sid)  
                    .append("&slat=").append(slat)  
                    .append("&slon=").append(slon)  
                    .append("&sname=").append(sname)  
                    .append("&did=").append(did)  
                    .append("&dlat=").append(dlat)  
                    .append("&dlon=").append(dlon)  
                    .append("&dname=").append(dname)  
                    .append("&dev=").append(dev)  
                    .append("&t=").append(t);  
            Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));  
            intent.setPackage("com.autonavi.minimap");  
            mWXSDKInstance.getContext().startActivity(intent);  
        }  
    }  
    @Override  
    public void destroy() {  

    }  
}

dcloud_uniplugins.json添加插件

{  
          "type": "module",  
          "name": "Amap",  
          "class": "com.demo.AmapWXModule"  
        }

uniapp使用

const modal = uni.requireNativePlugin('modal');  
const amap = uni.requireNativePlugin('Amap');  
methods: {  
    AppAmap()  
    {  
        amap.startNaviGao({sid:'A',slat:'36.7025585',slon:'116.8766784700',sname:'开始'  
        ,did:'B',dlat:'36.6494152900',dlon:'117.1224975600',dname:'结束',dev:'1',t:'0'});  
    },  
}

android原生项目app下的build.gradle中添加新增的 module
// 添加uni-app插件
implementation project(':amaplib')

继续阅读 »

android原生插件,创建module

public class AmapWXModule extends WXSDKEngine.DestroyableModule {  

    @JSMethod(uiThread = true)  
    public void startNaviGao(JSONObject options) {  
        if (mWXSDKInstance.getContext() instanceof Activity) {  
            StringBuffer stringBuffer = new StringBuffer("amapuri://route/plan/");  
            String sid = options.getString("sid");  
            String slat = options.getString("slat");  
            String slon = options.getString("slon");  
            String sname = options.getString("sname");  
            String did = options.getString("did");  
            String dlat = options.getString("dlat");  
            String dlon = options.getString("dlon");  
            String dname = options.getString("dname");  
            String dev = options.getString("dev");  
            String t = options.getString("t");  
            stringBuffer.append("?sid=").append(sid)  
                    .append("&slat=").append(slat)  
                    .append("&slon=").append(slon)  
                    .append("&sname=").append(sname)  
                    .append("&did=").append(did)  
                    .append("&dlat=").append(dlat)  
                    .append("&dlon=").append(dlon)  
                    .append("&dname=").append(dname)  
                    .append("&dev=").append(dev)  
                    .append("&t=").append(t);  
            Intent intent = new Intent("android.intent.action.VIEW", android.net.Uri.parse(stringBuffer.toString()));  
            intent.setPackage("com.autonavi.minimap");  
            mWXSDKInstance.getContext().startActivity(intent);  
        }  
    }  
    @Override  
    public void destroy() {  

    }  
}

dcloud_uniplugins.json添加插件

{  
          "type": "module",  
          "name": "Amap",  
          "class": "com.demo.AmapWXModule"  
        }

uniapp使用

const modal = uni.requireNativePlugin('modal');  
const amap = uni.requireNativePlugin('Amap');  
methods: {  
    AppAmap()  
    {  
        amap.startNaviGao({sid:'A',slat:'36.7025585',slon:'116.8766784700',sname:'开始'  
        ,did:'B',dlat:'36.6494152900',dlon:'117.1224975600',dname:'结束',dev:'1',t:'0'});  
    },  
}

android原生项目app下的build.gradle中添加新增的 module
// 添加uni-app插件
implementation project(':amaplib')

收起阅读 »

iOS离线打包:uni-AD广告联盟配置

广告联盟 开屏广告 广告 离线打包配置广告 离线配置广告

> 此文档将不再维护,请移步新文档:https://nativesupport.dcloud.net.cn

uni-AD广告联盟配置

此功能需要 HBuilderX 2.5.4-20200108-alpha 之后发布的离线包才能用。

添加360广告相关配置

注: Linker Flags、framework添加方法参考该文档

  1. 依次添加下列Linker Flags: -lUniAD,-lUniAd-360
  2. 添加下列framework:"libz.tbd","QHADSDK.framework","CoreLocation.framework", "CoreTelephony.framework", "WebKit.framework", "Security.framework", "SystemConfiguration.framework", "AdSupport.framework"
  3. 把离线包里Bundles文件夹里的 QHADVideoPlayer.bundle 引入到工程中

添加广点通广告相关配置

注: Linker Flags、framework添加方法参考该文档

  1. 依次添加下列Linker Flags: -lUniAD, -lUniAd-Gdt , -lGDTMobSDK
  2. 添加下列framework:"AdSupport.framework",
    "CoreLocation.framework",
    "QuartzCore.framework",
    "SystemConfiguration.framework",
    "CoreTelephony.framework",
    "Security.framework",
    "StoreKit.framework",
    "AVFoundation.framework",
    "WebKit.framework",
    "libz.tbd",
    "libxml2.tbd"

添加穿山甲广告相关配置

注: Linker Flags、framework添加方法参考该文档

  1. 依次添加下列Linker Flags: -lUniAD, -lUniAd-Csj, -lSDWebImage
  2. 添加下列framework:"BUAdSDK.framework","BUFoundation.framework","StoreKit.framework", "MobileCoreServices.framework", "WebKit.framework", "MediaPlayer.framework", "CoreMedia.framework", "CoreLocation.framework",
    "AVFoundation.framework",
    "CoreTelephony.framework",
    "SystemConfiguration.framework",
    "AdSupport.framework",
    "CoreMotion.framework",
    "Accelerate.framework",
    "libresolv.9.tbd",
    "libc++.tbd",
    "libz.tbd",
    "libsqlite3.tbd"
    3.把离线包里Bundles文件夹里的 BUAdSDK.bundle 引入到工程中

注意:如果是uni项目 必须配置上libUniADWeex.a 这个库

uni-AD广告联盟开通指南
uni-AD广告联盟使用指南

继续阅读 »

> 此文档将不再维护,请移步新文档:https://nativesupport.dcloud.net.cn

uni-AD广告联盟配置

此功能需要 HBuilderX 2.5.4-20200108-alpha 之后发布的离线包才能用。

添加360广告相关配置

注: Linker Flags、framework添加方法参考该文档

  1. 依次添加下列Linker Flags: -lUniAD,-lUniAd-360
  2. 添加下列framework:"libz.tbd","QHADSDK.framework","CoreLocation.framework", "CoreTelephony.framework", "WebKit.framework", "Security.framework", "SystemConfiguration.framework", "AdSupport.framework"
  3. 把离线包里Bundles文件夹里的 QHADVideoPlayer.bundle 引入到工程中

添加广点通广告相关配置

注: Linker Flags、framework添加方法参考该文档

  1. 依次添加下列Linker Flags: -lUniAD, -lUniAd-Gdt , -lGDTMobSDK
  2. 添加下列framework:"AdSupport.framework",
    "CoreLocation.framework",
    "QuartzCore.framework",
    "SystemConfiguration.framework",
    "CoreTelephony.framework",
    "Security.framework",
    "StoreKit.framework",
    "AVFoundation.framework",
    "WebKit.framework",
    "libz.tbd",
    "libxml2.tbd"

添加穿山甲广告相关配置

注: Linker Flags、framework添加方法参考该文档

  1. 依次添加下列Linker Flags: -lUniAD, -lUniAd-Csj, -lSDWebImage
  2. 添加下列framework:"BUAdSDK.framework","BUFoundation.framework","StoreKit.framework", "MobileCoreServices.framework", "WebKit.framework", "MediaPlayer.framework", "CoreMedia.framework", "CoreLocation.framework",
    "AVFoundation.framework",
    "CoreTelephony.framework",
    "SystemConfiguration.framework",
    "AdSupport.framework",
    "CoreMotion.framework",
    "Accelerate.framework",
    "libresolv.9.tbd",
    "libc++.tbd",
    "libz.tbd",
    "libsqlite3.tbd"
    3.把离线包里Bundles文件夹里的 BUAdSDK.bundle 引入到工程中

注意:如果是uni项目 必须配置上libUniADWeex.a 这个库

uni-AD广告联盟开通指南
uni-AD广告联盟使用指南

收起阅读 »