HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

HBuilder无法检测到手机,解决办法!!

adb 真机调试

参考官方说明内容:
如果其他软件能检测到手机,但是HBuilder无法检测到,将HBuilder安装目录下的tools目录(MAC下为HBuilder.app/Contents/tools目录)下的文件备份,然后将tools\1.0.31目录下的文件拷贝到tools目录下,重启HBuilder

继续阅读 »

参考官方说明内容:
如果其他软件能检测到手机,但是HBuilder无法检测到,将HBuilder安装目录下的tools目录(MAC下为HBuilder.app/Contents/tools目录)下的文件备份,然后将tools\1.0.31目录下的文件拷贝到tools目录下,重启HBuilder

收起阅读 »

安卓微信支付报错{"errMsg":"requestPayment:fail errors"}支付的坑

支付 微信支付

首先app和小程序支付的参数不一样,小程序是驼峰的,app不是

小程序的是:appId,signType,timeStamp,nonceStr,package
app的是:appid,partnerid,prepayid,noncestr,timestamp,package

var orderInfo = {
"appid":res.data.appId,
"noncestr":res.data.nonceStr,
"package":res.data.packageValue,
partnerid":res.data.partnerId,
"prepayid":res.data.prepayId,
"timestamp":res.data.timeStamp,
"sign":res.data.sign
}

uni.requestPayment({
provider: 'wxpay',
orderInfo: orderInfo, //微信 订单数据

然后就可以调起支付了,当然,你需要看看,你签名对不对
校验接口 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=20_1

继续阅读 »

首先app和小程序支付的参数不一样,小程序是驼峰的,app不是

小程序的是:appId,signType,timeStamp,nonceStr,package
app的是:appid,partnerid,prepayid,noncestr,timestamp,package

var orderInfo = {
"appid":res.data.appId,
"noncestr":res.data.nonceStr,
"package":res.data.packageValue,
partnerid":res.data.partnerId,
"prepayid":res.data.prepayId,
"timestamp":res.data.timeStamp,
"sign":res.data.sign
}

uni.requestPayment({
provider: 'wxpay',
orderInfo: orderInfo, //微信 订单数据

然后就可以调起支付了,当然,你需要看看,你签名对不对
校验接口 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=20_1

收起阅读 »

Error: [JS Framework] Failed to receiveTasks, instance (14) is not available.

这个超过1就得考虑使用的组件是否有定时器没有清除加速了或者出现死循环

这个超过1就得考虑使用的组件是否有定时器没有清除加速了或者出现死循环

二维码生成为空白

二维码生成不了大多都是val属性没有绑定到值所引起的,在hospital-qrcode页面有一个反例可以参考.
这个页面生成不了二维码的主要原因是路由传参的值需要在onLoad中获取,但事先需要在data()中定义这个对
象,在created时初始化了对象.生命周期顺序:created->onLoad->qrcode mounted->mouted

    ...  
    data() {  
        patientInfo: {}  
    }  
    ...
这就造成了`tki-qrcode`组件在`mounted`的时候获取的`val`是`undefined`(patientInfo.qrcode=undefined)  
,以下为`tki-qrcode`挂载源码  
```javacript  
mounted: function () {  
    if (this.loadMake) {  
        if (!this._empty(this.val)) { // -> val为undefined,就不会执行_makeCode()函数  
            setTimeout(() => {  
                this._makeCode()  
            }, 0);  
        }  
    }  
}  
```  
所以呢,需要给`tki-qrcode`新增一个属性`:onval="true"`,在`onLoad`后`patientInfo`对象有了数据  
,`val`会重新绑定值,自动生成二维码.  
                    <view class="qrcode">  
                        <tki-qrcode class="uni-popupTabbar-qrcodeimg" ref="qrcode" cid="hosCode" :val="patientInfo.qcode" :icon="qrcode"  
                         :size="200" unit="upx" :loadMake="true" :onval="true">  
                        </tki-qrcode>  
                        <!-- 反例! 二维码不会生成-->  
                        <tki-qrcode class="uni-popupTabbar-qrcodeimg" ref="qrcode" cid="hosCode" :val="patientInfo.qcode" :icon="qrcode"  
                         :size="200" unit="upx" :loadMake="true" >  
                        </tki-qrcode>  
                    </view>
继续阅读 »

二维码生成不了大多都是val属性没有绑定到值所引起的,在hospital-qrcode页面有一个反例可以参考.
这个页面生成不了二维码的主要原因是路由传参的值需要在onLoad中获取,但事先需要在data()中定义这个对
象,在created时初始化了对象.生命周期顺序:created->onLoad->qrcode mounted->mouted

    ...  
    data() {  
        patientInfo: {}  
    }  
    ...
这就造成了`tki-qrcode`组件在`mounted`的时候获取的`val`是`undefined`(patientInfo.qrcode=undefined)  
,以下为`tki-qrcode`挂载源码  
```javacript  
mounted: function () {  
    if (this.loadMake) {  
        if (!this._empty(this.val)) { // -> val为undefined,就不会执行_makeCode()函数  
            setTimeout(() => {  
                this._makeCode()  
            }, 0);  
        }  
    }  
}  
```  
所以呢,需要给`tki-qrcode`新增一个属性`:onval="true"`,在`onLoad`后`patientInfo`对象有了数据  
,`val`会重新绑定值,自动生成二维码.  
                    <view class="qrcode">  
                        <tki-qrcode class="uni-popupTabbar-qrcodeimg" ref="qrcode" cid="hosCode" :val="patientInfo.qcode" :icon="qrcode"  
                         :size="200" unit="upx" :loadMake="true" :onval="true">  
                        </tki-qrcode>  
                        <!-- 反例! 二维码不会生成-->  
                        <tki-qrcode class="uni-popupTabbar-qrcodeimg" ref="qrcode" cid="hosCode" :val="patientInfo.qcode" :icon="qrcode"  
                         :size="200" unit="upx" :loadMake="true" >  
                        </tki-qrcode>  
                    </view>
收起阅读 »

如何解决APP离线推送(前后端)

java unipush

1.技术选择:uni-app的UniPush(集成个推)、Java SpringBoot

2.前端代码:App.vue的onLaunch方法中加入

// #ifdef APP-PLUS  
    const _handlePushClick = function(message) {  
        // 自行处理消息点击事件  
        let {payload} = message;  
        console.log( message );  
    };  
    const _handlePushReceive = function(message) {  
        // 消息接收事件,手动创造本地通知信息  
        plus.push.createMessage(msg.content, message.payload, {  
            title: message.title  
        })  
    };  
    plus.push.addEventListener('click', _handlePushClick);    
    plus.push.addEventListener('receive', _handlePushReceive);    
    APPUpdate();  
// #endif

3.后端代码:

// 如果需要使用HTTPS,直接修改url即可  
//private static String url = "https://api.getui.com/apiex.htm";  
private static String url = "http://api.getui.com/apiex.htm";  
private static String appKey = "你的app key";  
private static String masterSecret = "你的app MasterSecret";  

    /**  
     * APP发送系统通知  
     * @param noticeForm 前端表单 包括title、content  
     * @return  
     */  
@PostMapping("/notice")  
public void notice(@RequestBody AppNoticeForm noticeForm) {  
        // 获取应用基本信息  
        IGtPush push = new IGtPush(url, appKey, masterSecret);  
        // 选择透传通知模板,个推离线只支持透传  
        TransmissionTemplate template = new TransmissionTemplate();  
        template.setAppId(appId);  
        template.setAppkey(appKey);  

        String payload = JSONUtil.toJsonStr(form);  
        template.setTransmissionContent(payload);    // 设置透传内容  
        template.setTransmissionType(2);    // 2代表客户端收到消息后需要自行处理  

        // 配置第三方厂商推送  
        Notify notify = new Notify();  
        notify.setTitle(form.getTitle());  
        notify.setContent(form.getContent());  
        notify.setType(GtReq.NotifyInfo.Type._intent);  
        // 设置intent 注意格式要正确(修改你的包名)  
        notify.setIntent("intent:#Intent;action=android.intent.action.oppopush;" +  
                "launchFlags=0x14000000;" +  
                "component=你的包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;" +  
                "S.title=" + form.getTitle() + ";" +  
                "S.content="+  form.getContent() + ";" +  
                "S.payload=" + payload + ";end");  
        notify.setPayload(payload);  
        template.set3rdNotifyInfo(notify);  

        List<String> appIds = new ArrayList<>();  
        appIds.add(appId);  
        AppMessage message = new AppMessage();  
        message.setData(template);  
        message.setAppIdList(appIds);  
        message.setOffline(true);  
        message.setOfflineExpireTime(8* 1000 * 3600);    // 离线有效时间 单位毫秒  
        message.setStrategyJson("{\"default\":1}");  
    // 推送给所有用户  
        IPushResult ret = push.pushMessageToApp(message);  
    }

4.在dcloud的开发者中心配置 厂商推送设置 即可完成离线推送
参考: UniPush使用指南

继续阅读 »

1.技术选择:uni-app的UniPush(集成个推)、Java SpringBoot

2.前端代码:App.vue的onLaunch方法中加入

// #ifdef APP-PLUS  
    const _handlePushClick = function(message) {  
        // 自行处理消息点击事件  
        let {payload} = message;  
        console.log( message );  
    };  
    const _handlePushReceive = function(message) {  
        // 消息接收事件,手动创造本地通知信息  
        plus.push.createMessage(msg.content, message.payload, {  
            title: message.title  
        })  
    };  
    plus.push.addEventListener('click', _handlePushClick);    
    plus.push.addEventListener('receive', _handlePushReceive);    
    APPUpdate();  
// #endif

3.后端代码:

// 如果需要使用HTTPS,直接修改url即可  
//private static String url = "https://api.getui.com/apiex.htm";  
private static String url = "http://api.getui.com/apiex.htm";  
private static String appKey = "你的app key";  
private static String masterSecret = "你的app MasterSecret";  

    /**  
     * APP发送系统通知  
     * @param noticeForm 前端表单 包括title、content  
     * @return  
     */  
@PostMapping("/notice")  
public void notice(@RequestBody AppNoticeForm noticeForm) {  
        // 获取应用基本信息  
        IGtPush push = new IGtPush(url, appKey, masterSecret);  
        // 选择透传通知模板,个推离线只支持透传  
        TransmissionTemplate template = new TransmissionTemplate();  
        template.setAppId(appId);  
        template.setAppkey(appKey);  

        String payload = JSONUtil.toJsonStr(form);  
        template.setTransmissionContent(payload);    // 设置透传内容  
        template.setTransmissionType(2);    // 2代表客户端收到消息后需要自行处理  

        // 配置第三方厂商推送  
        Notify notify = new Notify();  
        notify.setTitle(form.getTitle());  
        notify.setContent(form.getContent());  
        notify.setType(GtReq.NotifyInfo.Type._intent);  
        // 设置intent 注意格式要正确(修改你的包名)  
        notify.setIntent("intent:#Intent;action=android.intent.action.oppopush;" +  
                "launchFlags=0x14000000;" +  
                "component=你的包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;" +  
                "S.title=" + form.getTitle() + ";" +  
                "S.content="+  form.getContent() + ";" +  
                "S.payload=" + payload + ";end");  
        notify.setPayload(payload);  
        template.set3rdNotifyInfo(notify);  

        List<String> appIds = new ArrayList<>();  
        appIds.add(appId);  
        AppMessage message = new AppMessage();  
        message.setData(template);  
        message.setAppIdList(appIds);  
        message.setOffline(true);  
        message.setOfflineExpireTime(8* 1000 * 3600);    // 离线有效时间 单位毫秒  
        message.setStrategyJson("{\"default\":1}");  
    // 推送给所有用户  
        IPushResult ret = push.pushMessageToApp(message);  
    }

4.在dcloud的开发者中心配置 厂商推送设置 即可完成离线推送
参考: UniPush使用指南

收起阅读 »

uni-app集成unipush推送

unipush

本文实现推送,使用的是透传信息。
以下内容只做学习记录,等全部测试完成后,更新代码。
iOS推送流程说明:
iOS的消息是分两部分的:一部分是走APNs的通知栏消息,另一部分是走个推通道的透传消息。这两部分是服务端推送代码里面应用设定好的,分别是两个不同的方法。如果消息下发的时候,当应用是在后台的(也就是应用是离线)那么会收到APNs的通知,透传消息就进离线了;只有当APP下次在线的时候(也就是下次应用到前台的时候)才会通过个推通道下发,如果当下发的时候应用是在前台的,客户端就直接收到透传消息。
安卓推送流程说明:
在线情况下使用的是个推消息通道;离线情况,如果不集成厂商,那么透传信息进入离线,只有当app在线时,才会触发;离线情况集成厂商,会走厂商通道。
在使用的过程中,尤其应该注意payload的类型,以及苹果端对于在线、离线消息的处理

继续阅读 »

本文实现推送,使用的是透传信息。
以下内容只做学习记录,等全部测试完成后,更新代码。
iOS推送流程说明:
iOS的消息是分两部分的:一部分是走APNs的通知栏消息,另一部分是走个推通道的透传消息。这两部分是服务端推送代码里面应用设定好的,分别是两个不同的方法。如果消息下发的时候,当应用是在后台的(也就是应用是离线)那么会收到APNs的通知,透传消息就进离线了;只有当APP下次在线的时候(也就是下次应用到前台的时候)才会通过个推通道下发,如果当下发的时候应用是在前台的,客户端就直接收到透传消息。
安卓推送流程说明:
在线情况下使用的是个推消息通道;离线情况,如果不集成厂商,那么透传信息进入离线,只有当app在线时,才会触发;离线情况集成厂商,会走厂商通道。
在使用的过程中,尤其应该注意payload的类型,以及苹果端对于在线、离线消息的处理

收起阅读 »

uniapp 文字滚动栏组件

组件 自定义组件

由于项目需要,公告自动滚动展示,在网上找了下,有些是可以实现的,
例如:

https://ask.dcloud.net.cn/article/35712
但是有点小问题:公共字数过长的话,展示不全。

还有的是使用css的动画效果实现,大家都知道css动画是指定了时间的,如果公告内容过多的话,会展示


所以重新写了一个组件,也有点瑕疵,就是公告滚动完之后再滚动下前会有一段的空白,后面再优化

组件地址:
git@codehub.devcloud.huaweicloud.com:uni-appComponent00001/uni-appDemo.git

使用方法:
1、将 /components/screenTextScroll.vuecopy到自己的项目中(components目录下)
2、在main.js中添加代码

import screenTextScroll from '@/components/screenTextScroll.vue'   
Vue.component('textscroll', screenTextScroll)

3、在需要使用的视图中调用

<textscroll :list="list" />

list为滚动的文字集合

继续阅读 »

由于项目需要,公告自动滚动展示,在网上找了下,有些是可以实现的,
例如:

https://ask.dcloud.net.cn/article/35712
但是有点小问题:公共字数过长的话,展示不全。

还有的是使用css的动画效果实现,大家都知道css动画是指定了时间的,如果公告内容过多的话,会展示


所以重新写了一个组件,也有点瑕疵,就是公告滚动完之后再滚动下前会有一段的空白,后面再优化

组件地址:
git@codehub.devcloud.huaweicloud.com:uni-appComponent00001/uni-appDemo.git

使用方法:
1、将 /components/screenTextScroll.vuecopy到自己的项目中(components目录下)
2、在main.js中添加代码

import screenTextScroll from '@/components/screenTextScroll.vue'   
Vue.component('textscroll', screenTextScroll)

3、在需要使用的视图中调用

<textscroll :list="list" />

list为滚动的文字集合

收起阅读 »

支付宝JSError收集

支付宝小程序

Uncaught TypeError: Cannot set property 'value' of undefined(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

undefined is not an object (evaluating 'this. vm. refs')(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

this.parent.setValue is not a function. (In 'this.parent.setValue(this.name)'; 'this.parent.setValue' is undefined)(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

e.split is not a function. (In 'e.split("_")'; 'e.split' is undefined)(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

TypeError: n.unshift is not a function. (In 'n.unshift(e.toUpperCase())'; 'n.unshift' is undefined)(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

TypeError: t.setNavigationBarTitle is not a function. (In 't.setNavigationBarTitle({title:e.getNavigateTitle()})'; 't.setNavigationBarTitle' is undefined)(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

继续阅读 »

Uncaught TypeError: Cannot set property 'value' of undefined(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

undefined is not an object (evaluating 'this. vm. refs')(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

this.parent.setValue is not a function. (In 'this.parent.setValue(this.name)'; 'this.parent.setValue' is undefined)(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

e.split is not a function. (In 'e.split("_")'; 'e.split' is undefined)(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

TypeError: n.unshift is not a function. (In 'n.unshift(e.toUpperCase())'; 'n.unshift' is undefined)(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

TypeError: t.setNavigationBarTitle is not a function. (In 't.setNavigationBarTitle({title:e.getNavigateTitle()})'; 't.setNavigationBarTitle' is undefined)(版本:1.1.46,文件:-,行:-,列:-,变量名:-,源代码:-)

收起阅读 »

抓包了几个影视接口,实现了一个简单影视加vip视频解析app!

下面分享几个效果图:


稍后我将把页面源码上传到插件市场
如有兴趣的欢迎交流:wx:ZHT131572

下面分享几个效果图:


稍后我将把页面源码上传到插件市场
如有兴趣的欢迎交流:wx:ZHT131572

关于uniapp 引用小程序发券插件的使用经验

参考 https://segmentfault.com/a/1190000021597074
参考 https://ask.dcloud.net.cn/question/101776

step 1:

在 manifest.json 中点击源码视图, 在 mp-weixin 里添加:

"plugins": {  
    "sendCoupon": {  
        "version": "1.1.5",  
        "provider": "wxf3f436ba9bd4be7b"  
    }  
}

step2:

在 pages.json 的 globalStyle 里添加

"usingComponents": {  
    "send-coupon": "plugin://sendCoupon/send-coupon"  
}

step3:

在需要调用插件的页面中调用, 按照微信的对接文档对接即可. 唯一需要注意的是, 发券的事件bindcustomevent改为 @customevent

<template>  
    <send-coupon  
        @customevent="getcoupon"  
        :send_coupon_params="send_coupon_params"  
        :sign="sign"  
        :send_coupon_merchant="send_coupon_merchant">  
        <view>领取</view>  
    </send-coupon>  
</template>
继续阅读 »

参考 https://segmentfault.com/a/1190000021597074
参考 https://ask.dcloud.net.cn/question/101776

step 1:

在 manifest.json 中点击源码视图, 在 mp-weixin 里添加:

"plugins": {  
    "sendCoupon": {  
        "version": "1.1.5",  
        "provider": "wxf3f436ba9bd4be7b"  
    }  
}

step2:

在 pages.json 的 globalStyle 里添加

"usingComponents": {  
    "send-coupon": "plugin://sendCoupon/send-coupon"  
}

step3:

在需要调用插件的页面中调用, 按照微信的对接文档对接即可. 唯一需要注意的是, 发券的事件bindcustomevent改为 @customevent

<template>  
    <send-coupon  
        @customevent="getcoupon"  
        :send_coupon_params="send_coupon_params"  
        :sign="sign"  
        :send_coupon_merchant="send_coupon_merchant">  
        <view>领取</view>  
    </send-coupon>  
</template>
收起阅读 »

移动端持续性后台定位

后台定位
                                                                                  **关于后台持续性定位几种方法**  

定时器

setInterval(callback, delay, rest)
Android ios 前台进程可以
后台 (锁屏)Android 没问题 ios 两分钟就会被kill(定时器) 但是APP没有被kill 从后台进入前台 立马被激活 原因放在最后面

递归

问题同上

H5+

废话不多说 上代码

第一步

实时监听地理位置
plus.geolocation.watchPosition(function(p) {
// 参数一 经度 参数二 纬度
that.sendMsgToWs(p.coords.latitude, p.coords.longitude);
uni.hideLoading()
}, function(e) {
console.log("监听位置变化信息失败:" + e.message);
}, {
'enableHighAccuracy': true,
'geocode': false,
'maximumAge': 2000,
});

enableHighAccuracy: (Boolean 类型 )是否高精确度获取位置信息
高精度获取表示需要使用更多的系统资源,默认值为false。

timeout: (Number 类型 )获取位置信息的超时时间
单位为毫秒(ms),默认值为不超时。如果在指定的时间内没有获取到位置信息则触发错误回调函数。

maximumAge: (Number 类型 )获取位置信息的间隔时间
单位为毫秒(ms),默认值为5000(即5秒)。调用plus.geolocation.watchPosition时为更新位置信息的间隔时间。 注意:在不同定位模块下支持范围值可能不同,如百度
定位模块的间隔范围为大于等于1秒,如果设置的值小于最小值则使用最小值。

provider: (String 类型 )优先使用的定位模块
可取以下供应者: "system":表示系统定位模块,支持wgs84坐标系; "baidu":表示百度定位模块,支持gcj02/bd09/bd09ll坐标系; "amap":表示高德定位模块,支持
gcj02坐标系。 默认值按以下优先顺序获取(amap>baidu>system),若指定的provider不存在或无效则返回错误回调。 注意:百度/高德定位模块需要配置百度/高德地图相
关参数才能正常使用。

第二步

第三步

自定义打包

第四部

提交到app store 可能会存在问题 原因就是后台持续性运行 苹果审核会不通过 解决了 会更新
2020年10月2日13:34:06 更新 (长时间使用GPS在后台运行可能显著减少电池寿命)加这么一句 要不appstore 会拒绝

                                                                                                                                                                                               97272442@qq.com  

                                                                                                                                                                                               HBuildx 2.8.8.20200820  

                                                                                                                                                                                              下回写window系统ios打包到App store  

                                                                                                                                                                                               2020年9月17日09:09:01  

苹果不支持后台运行的原因:

这是苹果bai的ios系统后台运行机制du问题,就因为这样,苹果系zhi统运行流畅不易卡顿。但不是说dao所有程序都是不支持后台运行的。
iOS中,实际上APP拥有四种后台模式,无论是哪一种后台机制,均需要利用苹果给予的相应后台接口实现。新系统中,开发者可以灵活利用多种后台接口(API)实现更加智能的应用操作。
无后台仅推送
  第一种后台方式为传统的无后台操作,仅有苹果推送机制,这种方式出现在iOS 3.x以下的大部分系统版本上。这个方式下,应用在按下Home键后即会关闭退出,其数据通过苹果搭建的推送服务器传输,并不需要应用后台运行。这种方式不太好的原因在于,每次推出后,重新进入均需要重新加载,虽然推送能够统一解决数据和信息的传输,但遇到需要频繁进入应用(如聊天APP)的时候便会显得体验不好。
墓碑式
  第二种方式为墓碑式的后台机制,这在iOS 4后被大量采用,也就是人们所说的伪多任务。这方式相比较第一种改进的地方在于,按下Home键至主界面后,应用随即进入后台,但其被冻结,并不能进行任何操作。
智能调度后台
  第三种为系统智能调度的后台,iOS 7新增的background fetch,这个后台接口在苹果WWDC 2013上有提及,其会根据用户行为自动调整达到效率最优的后台模式,能够处理不是很有时效性的信息获取。例如一些社交、新闻类的应用的后台信息更新,iOS系统便会根据应用启动频率、时间和当前网络和电量的状况来智能分配每个应用的后台获取频率和启动时长。
由于拥有该接口的应用的数据后台刷新操作是统一调度的,因此系统可以在一个进程里面获得多个应用的数据,类似统一的推送机制,这样就能够最大限度地省电。不过这个方式也有一个缺点,那便是开发者不能设定数据具体什么时候更新,因此这个后台方式只能应用在一些时效性和敏感度不高的地方。
真后台
  第四种方式便是真后台机制,但iOS的真后台与Android的后台机制是不一样的,为了兼顾系统体验和统一进程管理,iOS在这上面加入了众多的限制。大致拥有以下几个后台接口模式:
  1、Background Audio,这是后台的音频,这个很早之前便有,也是iOS设备中用得最多的后台应用,调用这个接口可以实现后台的音乐播放。
2、Location Services,这是后台的定位,系统会拥有统一页面进行管理。
  3、VoIP,后台语音服务,类似Skype通话应用需要调用,可进行后台的语音通话。
  4、Newsstand,报刊杂志后台自动下载更新,其能够自动实时更新。
5、Background Task Completion,这个接口早在iOS 4时候便拥有,其可以供任意类型的APP使用,不过在旧系统中,这个接口的后台限制运行时间仅为10分钟,意味着当应用退至后台,其后台运行仅能持续10分钟便会转至休眠状态。iOS 7中对这个接口作出了改变,原来的为连续10分钟,即不论你这10分钟内用户是否关闭屏幕进入休眠状态,应用仍然会在后台等待10分钟完结后推出,而新的改进为假如遇到关闭屏幕休眠的情况,这后台运行的10分钟便会跟随一同休眠,剩余的后台时间将会留待用户再一次唤醒设备才计算。这样后台运行的时间仍然为10分钟,但并不连续,这样做的优点为省电。
如现在有一些词典应用带有后台复制选词功能,实际上其是利用了这个接口,如果用户开启词典后并推出,即使屏幕关闭,但词典仍然在后台运行,电量消耗还是比较大的,在iOS 7上,这个问题可以得到解决。
  6、 Remote Notification,这是本次较大的一个改进接口,以往聊天类应用接受推送后点进去需要再收一次信息,这情况在QQ、微信等应用上最为明显。不过拥有了这个接口后,这情况将不复存在,以后推送将能够直接启动后台任务。值得注意的是remote notification支持silent notification(静默推送),这样dropbox这类同步应用可以在后台以最节能的模式实时静默同步了,类似布卡漫画这种也可以推送正在追的漫画的新章节并在后台静默下载,待到下载好再给用户发送一个本地推送,用户点开即看无需再联网。
  7、Background Transfer Service,后台上传下载。iOS最接近传统多任务的后台接口,可供任意类型的app调用,无时间限制。应用场景包括后台上传和下载数据,这使得游戏后台更新数据包,后台上传视频等等都成为可能,但是正如其名字,它只能用于处理上传下载这种传输类的任务,类似后台剪切板监控这种它就无能为力了。
总结
  以上便是iOS 7系统中最主要的后台机制,有部分是旧版iOS系统已经存在,现在也被沿用下来,而新增加的几个后台接口,进一步开放iOS设备的后台权限,不过为了继续保持iOS移动设备的优秀体验,苹果是逐步放开,并且加入了相应的限制。background fetch、Remote Notification、Background Transfer Service是三个比较有看头的后台接口,实际中,开发者可以灵活运用这些接口实现应用的智能后台服务,例如常见的地图应用可以开启定位(Location),其检测到用户进入到另外的城市便会自动进行后台的离线地图下载,通过Background Transfer Service接口。

继续阅读 »
                                                                                  **关于后台持续性定位几种方法**  

定时器

setInterval(callback, delay, rest)
Android ios 前台进程可以
后台 (锁屏)Android 没问题 ios 两分钟就会被kill(定时器) 但是APP没有被kill 从后台进入前台 立马被激活 原因放在最后面

递归

问题同上

H5+

废话不多说 上代码

第一步

实时监听地理位置
plus.geolocation.watchPosition(function(p) {
// 参数一 经度 参数二 纬度
that.sendMsgToWs(p.coords.latitude, p.coords.longitude);
uni.hideLoading()
}, function(e) {
console.log("监听位置变化信息失败:" + e.message);
}, {
'enableHighAccuracy': true,
'geocode': false,
'maximumAge': 2000,
});

enableHighAccuracy: (Boolean 类型 )是否高精确度获取位置信息
高精度获取表示需要使用更多的系统资源,默认值为false。

timeout: (Number 类型 )获取位置信息的超时时间
单位为毫秒(ms),默认值为不超时。如果在指定的时间内没有获取到位置信息则触发错误回调函数。

maximumAge: (Number 类型 )获取位置信息的间隔时间
单位为毫秒(ms),默认值为5000(即5秒)。调用plus.geolocation.watchPosition时为更新位置信息的间隔时间。 注意:在不同定位模块下支持范围值可能不同,如百度
定位模块的间隔范围为大于等于1秒,如果设置的值小于最小值则使用最小值。

provider: (String 类型 )优先使用的定位模块
可取以下供应者: "system":表示系统定位模块,支持wgs84坐标系; "baidu":表示百度定位模块,支持gcj02/bd09/bd09ll坐标系; "amap":表示高德定位模块,支持
gcj02坐标系。 默认值按以下优先顺序获取(amap>baidu>system),若指定的provider不存在或无效则返回错误回调。 注意:百度/高德定位模块需要配置百度/高德地图相
关参数才能正常使用。

第二步

第三步

自定义打包

第四部

提交到app store 可能会存在问题 原因就是后台持续性运行 苹果审核会不通过 解决了 会更新
2020年10月2日13:34:06 更新 (长时间使用GPS在后台运行可能显著减少电池寿命)加这么一句 要不appstore 会拒绝

                                                                                                                                                                                               97272442@qq.com  

                                                                                                                                                                                               HBuildx 2.8.8.20200820  

                                                                                                                                                                                              下回写window系统ios打包到App store  

                                                                                                                                                                                               2020年9月17日09:09:01  

苹果不支持后台运行的原因:

这是苹果bai的ios系统后台运行机制du问题,就因为这样,苹果系zhi统运行流畅不易卡顿。但不是说dao所有程序都是不支持后台运行的。
iOS中,实际上APP拥有四种后台模式,无论是哪一种后台机制,均需要利用苹果给予的相应后台接口实现。新系统中,开发者可以灵活利用多种后台接口(API)实现更加智能的应用操作。
无后台仅推送
  第一种后台方式为传统的无后台操作,仅有苹果推送机制,这种方式出现在iOS 3.x以下的大部分系统版本上。这个方式下,应用在按下Home键后即会关闭退出,其数据通过苹果搭建的推送服务器传输,并不需要应用后台运行。这种方式不太好的原因在于,每次推出后,重新进入均需要重新加载,虽然推送能够统一解决数据和信息的传输,但遇到需要频繁进入应用(如聊天APP)的时候便会显得体验不好。
墓碑式
  第二种方式为墓碑式的后台机制,这在iOS 4后被大量采用,也就是人们所说的伪多任务。这方式相比较第一种改进的地方在于,按下Home键至主界面后,应用随即进入后台,但其被冻结,并不能进行任何操作。
智能调度后台
  第三种为系统智能调度的后台,iOS 7新增的background fetch,这个后台接口在苹果WWDC 2013上有提及,其会根据用户行为自动调整达到效率最优的后台模式,能够处理不是很有时效性的信息获取。例如一些社交、新闻类的应用的后台信息更新,iOS系统便会根据应用启动频率、时间和当前网络和电量的状况来智能分配每个应用的后台获取频率和启动时长。
由于拥有该接口的应用的数据后台刷新操作是统一调度的,因此系统可以在一个进程里面获得多个应用的数据,类似统一的推送机制,这样就能够最大限度地省电。不过这个方式也有一个缺点,那便是开发者不能设定数据具体什么时候更新,因此这个后台方式只能应用在一些时效性和敏感度不高的地方。
真后台
  第四种方式便是真后台机制,但iOS的真后台与Android的后台机制是不一样的,为了兼顾系统体验和统一进程管理,iOS在这上面加入了众多的限制。大致拥有以下几个后台接口模式:
  1、Background Audio,这是后台的音频,这个很早之前便有,也是iOS设备中用得最多的后台应用,调用这个接口可以实现后台的音乐播放。
2、Location Services,这是后台的定位,系统会拥有统一页面进行管理。
  3、VoIP,后台语音服务,类似Skype通话应用需要调用,可进行后台的语音通话。
  4、Newsstand,报刊杂志后台自动下载更新,其能够自动实时更新。
5、Background Task Completion,这个接口早在iOS 4时候便拥有,其可以供任意类型的APP使用,不过在旧系统中,这个接口的后台限制运行时间仅为10分钟,意味着当应用退至后台,其后台运行仅能持续10分钟便会转至休眠状态。iOS 7中对这个接口作出了改变,原来的为连续10分钟,即不论你这10分钟内用户是否关闭屏幕进入休眠状态,应用仍然会在后台等待10分钟完结后推出,而新的改进为假如遇到关闭屏幕休眠的情况,这后台运行的10分钟便会跟随一同休眠,剩余的后台时间将会留待用户再一次唤醒设备才计算。这样后台运行的时间仍然为10分钟,但并不连续,这样做的优点为省电。
如现在有一些词典应用带有后台复制选词功能,实际上其是利用了这个接口,如果用户开启词典后并推出,即使屏幕关闭,但词典仍然在后台运行,电量消耗还是比较大的,在iOS 7上,这个问题可以得到解决。
  6、 Remote Notification,这是本次较大的一个改进接口,以往聊天类应用接受推送后点进去需要再收一次信息,这情况在QQ、微信等应用上最为明显。不过拥有了这个接口后,这情况将不复存在,以后推送将能够直接启动后台任务。值得注意的是remote notification支持silent notification(静默推送),这样dropbox这类同步应用可以在后台以最节能的模式实时静默同步了,类似布卡漫画这种也可以推送正在追的漫画的新章节并在后台静默下载,待到下载好再给用户发送一个本地推送,用户点开即看无需再联网。
  7、Background Transfer Service,后台上传下载。iOS最接近传统多任务的后台接口,可供任意类型的app调用,无时间限制。应用场景包括后台上传和下载数据,这使得游戏后台更新数据包,后台上传视频等等都成为可能,但是正如其名字,它只能用于处理上传下载这种传输类的任务,类似后台剪切板监控这种它就无能为力了。
总结
  以上便是iOS 7系统中最主要的后台机制,有部分是旧版iOS系统已经存在,现在也被沿用下来,而新增加的几个后台接口,进一步开放iOS设备的后台权限,不过为了继续保持iOS移动设备的优秀体验,苹果是逐步放开,并且加入了相应的限制。background fetch、Remote Notification、Background Transfer Service是三个比较有看头的后台接口,实际中,开发者可以灵活运用这些接口实现应用的智能后台服务,例如常见的地图应用可以开启定位(Location),其检测到用户进入到另外的城市便会自动进行后台的离线地图下载,通过Background Transfer Service接口。

收起阅读 »

解决uni.report is not a function,uni.report()报错

uniapp

一般这个错误都是vue-cli安装 + npm开发时出现的

manifest.json里面加上

"uniStatistics": {
"enable": true
}

然后重新npm run就行

一般这个错误都是vue-cli安装 + npm开发时出现的

manifest.json里面加上

"uniStatistics": {
"enable": true
}

然后重新npm run就行