HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

Dcloud 离线打包原生插件开发精简版示例

原生控件 原生应用 原生插件 5 插件 离线使用 App离线打包 离线 离线打包

Dcloud 最新版离线打包精简版示例

http://github.com/lovewmf/Offline

  • master 分支为Dcloud

    git clone -master https://github.com/lovewmf/Offline.git

  • apicloud 分支为ApiCloud

    git clone -apicloud https://github.com/lovewmf/Offline.git

ApiCloud 离线打包模块开发

https://docs.apicloud.com/Module-Dev/module-dev-guide-for-android-studio

配置module.json

{  
    "modules":[  
        {  
            "name":"moduleZySoft",  
            "class":"com.wmf.moduleZySoft.APIModuleZySoft"  
        }  
    ]  
}

使用方式

<script type="text/javascript">  
    var zysoft = null;  
    apiready = function(){  
        zysoft = api.require('moduleZySoft');//引入模块  
        $api.addEvt($api.byId('Suspension'), 'click', function(){  
            zysoft.ShowToast();//执行模块里面的方法  
        }, false);  
    };  
</script>
继续阅读 »

Dcloud 最新版离线打包精简版示例

http://github.com/lovewmf/Offline

  • master 分支为Dcloud

    git clone -master https://github.com/lovewmf/Offline.git

  • apicloud 分支为ApiCloud

    git clone -apicloud https://github.com/lovewmf/Offline.git

ApiCloud 离线打包模块开发

https://docs.apicloud.com/Module-Dev/module-dev-guide-for-android-studio

配置module.json

{  
    "modules":[  
        {  
            "name":"moduleZySoft",  
            "class":"com.wmf.moduleZySoft.APIModuleZySoft"  
        }  
    ]  
}

使用方式

<script type="text/javascript">  
    var zysoft = null;  
    apiready = function(){  
        zysoft = api.require('moduleZySoft');//引入模块  
        $api.addEvt($api.byId('Suspension'), 'click', function(){  
            zysoft.ShowToast();//执行模块里面的方法  
        }, false);  
    };  
</script>
收起阅读 »

集成微信小程序云开发思路

云开发 微信小程序

有点思路,不知道那位大神有空集成一下,在微信小程序中使用SDK访问云开发,其他端使用API访问,将SDK和API合并成一套接口

有点思路,不知道那位大神有空集成一下,在微信小程序中使用SDK访问云开发,其他端使用API访问,将SDK和API合并成一套接口

精选外包平台,优秀的程序员都这这里赚外快!收藏好,不赚死工资

外包

白领下班可以通过滴滴外快,那么咱们程序员下班的时候,又可以通过什么渠道来赚点外快,补贴家用呢?

先不说接私活对不对,单纯的从赚点外快,补贴家用的角度,咱们来聊聊,程序员们,一般会在哪些平台接私活,来丰富咱们的下班生活。哈哈。

斗包网
「斗包网,致力于软件行业的项目外包和软件定制开发信息的提供、为项目需求方和软件开发人才提供一个方便快捷的软件外包平台。汇集了中国优秀软件开发公司和软件外包公司,是您值得信赖的项目交易平台。

官网:https://www.sxsapi.com/

精选外包平台,优秀的程序员都这这里赚外快!收藏好,不赚死工资
最后
好了,上面就是这次要分享得 1 个项目外包平台,这种平台,量不在多,重要的是精,如果你有兴趣,建议你从上列顺序进行接活,咱们尽量找一些专业的大平台,这样也能给我们减少很多麻烦。

不过,这里要提醒一下大家哟,不管怎么样,千万不要因为私活而影响工作哟,这可是得不偿失的大事,因为我们的主业是公司的任务,而私活只是副业,切莫本末倒置,影响到自身的工作前途。

那么,你有什么比较好的私活品台或者途径吗?欢迎在下方评论哟~

期待下次与你相见 : )

继续阅读 »

白领下班可以通过滴滴外快,那么咱们程序员下班的时候,又可以通过什么渠道来赚点外快,补贴家用呢?

先不说接私活对不对,单纯的从赚点外快,补贴家用的角度,咱们来聊聊,程序员们,一般会在哪些平台接私活,来丰富咱们的下班生活。哈哈。

斗包网
「斗包网,致力于软件行业的项目外包和软件定制开发信息的提供、为项目需求方和软件开发人才提供一个方便快捷的软件外包平台。汇集了中国优秀软件开发公司和软件外包公司,是您值得信赖的项目交易平台。

官网:https://www.sxsapi.com/

精选外包平台,优秀的程序员都这这里赚外快!收藏好,不赚死工资
最后
好了,上面就是这次要分享得 1 个项目外包平台,这种平台,量不在多,重要的是精,如果你有兴趣,建议你从上列顺序进行接活,咱们尽量找一些专业的大平台,这样也能给我们减少很多麻烦。

不过,这里要提醒一下大家哟,不管怎么样,千万不要因为私活而影响工作哟,这可是得不偿失的大事,因为我们的主业是公司的任务,而私活只是副业,切莫本末倒置,影响到自身的工作前途。

那么,你有什么比较好的私活品台或者途径吗?欢迎在下方评论哟~

期待下次与你相见 : )

收起阅读 »

unipush实践分享

unipush

阅读前请先参照官方文档,熟悉下unipush的整体方案

开通unipush

应用管理后台找到要开通unipush的应用(账号第一次开通unipush需要认证)认证完毕,账号下的应用就可以直接使用unipush了

推送测试

unipush开通后,在后台可以创建通知消息和透传消息。两种消息的区别官方已经做了详细说明,不清楚的可以自己推送下试试。为了保证ios和android的一致性,建议放弃通知消息,统一使用透传消息。
客户端准备:

let info = plus.push.getClientInfo();//获取客户端clientId(这个id每次重新安装包就会刷新)  
console.log(info)  
 plus.push.addEventListener('receive', (message)=>{//监听透传消息  
    plus.nativeUI.toast('push receive');  
    plus.push.createMessage(message.content)//将详细显示到系统通知栏(这里如果有不需要系统展示的,可以和后端沟通好,通过message里的字段标识不显示就好)  
});  

应用在线

应用在线的时候测试,可以打包制作自定义基座调试(云打包的时候有个选项,制作自定义基座),关于自定义基座。这样避免了多次打包的繁琐,在线的时候推送会通过个推来发送,这个基本上没有任何问题,都能正常收到。

应用离线

应用离线分为两种情况:
一种时并没有杀掉进程,比如手机长时间息屏,下次打开应用并没有重启(也就时没触发引用的onLaunch),只是唤醒到了前台。‘
另一种情况是进程被杀掉了,应用就是离线的状态。
对于第一种情况:这个clientId已经是离线状态了,即便你这时候前台唤醒了,他也不会触发在线。一个方案是在应用onShow的时候重新加载一次推送的sdk,这样达到clientId重新在线的目的,但这种方案总是让人觉得是不得已的妥协,那么有没有更好的方案呢?
如果我们能解决第二种情况的推送问题,也就是离线的推送,那第一种情况也就可以不管了。unipush很好的一点就是这里,他可以集成多个厂商的推送,这样即便应用时在离线状态下,也可以收到推送通知。huilder提供的厂商推送应用创建配置流程,文档有点老,可能和现在的厂商实际页面有出入,参考就好。

小米厂商渠道配置

unipush后台有小米开放平台的快捷入口,注册开发账号(我用的是公司主体注册的),创建手机应用,填写应用名称和包名(一定要和uniapp的包名一致),然后会提示是否开启消息推送服务,选择启用,然后到应用信息里,复制 AppID,AppKey,AppSecret粘贴到unipush后台即可。

华为厂商渠道配置

同小米,先注册开发者账户。这里吐槽下hbuilder的注册文档有点老了,和现在的页面不太能对的上。应用服务->开发服务->PUSH
新建APK,然后开通推送服务,他会提示包名未填写,那需要先到开发->概览页面->手动输入包名。包名输入完毕一定要填写SHA256签名,然后保存后最好刷新一下(我试了好多次才保存上)。填写完成后再去开通推送服务,然后到概览里复制AppID,AppSecret到unipush后台。至此配置完成

离线推送测试

虽然官方说自定义基座可以测试推送,但我本人测试,离线推送还是要打包来测试才行,之前也是自定义基座,但怎么都收不到。打包后记得将应用的通知权限给到最高(锁屏允许通知等等)然后杀掉进程,在后台发送透传消息,群发,这时候会让填写第三方推送的intent;
把包名替换为你自己的应用名称,其他的照抄即可
intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;package=你的包名;component=你的包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试;S.content=测试;S.payload=test;end
然后点击群发,不出意外的话,你的app应该已经收到了离线通知~

因为目前手边只有小米和华为,所以其他三个厂商的还没有进行测试,不过估计应该都可以

继续阅读 »

阅读前请先参照官方文档,熟悉下unipush的整体方案

开通unipush

应用管理后台找到要开通unipush的应用(账号第一次开通unipush需要认证)认证完毕,账号下的应用就可以直接使用unipush了

推送测试

unipush开通后,在后台可以创建通知消息和透传消息。两种消息的区别官方已经做了详细说明,不清楚的可以自己推送下试试。为了保证ios和android的一致性,建议放弃通知消息,统一使用透传消息。
客户端准备:

let info = plus.push.getClientInfo();//获取客户端clientId(这个id每次重新安装包就会刷新)  
console.log(info)  
 plus.push.addEventListener('receive', (message)=>{//监听透传消息  
    plus.nativeUI.toast('push receive');  
    plus.push.createMessage(message.content)//将详细显示到系统通知栏(这里如果有不需要系统展示的,可以和后端沟通好,通过message里的字段标识不显示就好)  
});  

应用在线

应用在线的时候测试,可以打包制作自定义基座调试(云打包的时候有个选项,制作自定义基座),关于自定义基座。这样避免了多次打包的繁琐,在线的时候推送会通过个推来发送,这个基本上没有任何问题,都能正常收到。

应用离线

应用离线分为两种情况:
一种时并没有杀掉进程,比如手机长时间息屏,下次打开应用并没有重启(也就时没触发引用的onLaunch),只是唤醒到了前台。‘
另一种情况是进程被杀掉了,应用就是离线的状态。
对于第一种情况:这个clientId已经是离线状态了,即便你这时候前台唤醒了,他也不会触发在线。一个方案是在应用onShow的时候重新加载一次推送的sdk,这样达到clientId重新在线的目的,但这种方案总是让人觉得是不得已的妥协,那么有没有更好的方案呢?
如果我们能解决第二种情况的推送问题,也就是离线的推送,那第一种情况也就可以不管了。unipush很好的一点就是这里,他可以集成多个厂商的推送,这样即便应用时在离线状态下,也可以收到推送通知。huilder提供的厂商推送应用创建配置流程,文档有点老,可能和现在的厂商实际页面有出入,参考就好。

小米厂商渠道配置

unipush后台有小米开放平台的快捷入口,注册开发账号(我用的是公司主体注册的),创建手机应用,填写应用名称和包名(一定要和uniapp的包名一致),然后会提示是否开启消息推送服务,选择启用,然后到应用信息里,复制 AppID,AppKey,AppSecret粘贴到unipush后台即可。

华为厂商渠道配置

同小米,先注册开发者账户。这里吐槽下hbuilder的注册文档有点老了,和现在的页面不太能对的上。应用服务->开发服务->PUSH
新建APK,然后开通推送服务,他会提示包名未填写,那需要先到开发->概览页面->手动输入包名。包名输入完毕一定要填写SHA256签名,然后保存后最好刷新一下(我试了好多次才保存上)。填写完成后再去开通推送服务,然后到概览里复制AppID,AppSecret到unipush后台。至此配置完成

离线推送测试

虽然官方说自定义基座可以测试推送,但我本人测试,离线推送还是要打包来测试才行,之前也是自定义基座,但怎么都收不到。打包后记得将应用的通知权限给到最高(锁屏允许通知等等)然后杀掉进程,在后台发送透传消息,群发,这时候会让填写第三方推送的intent;
把包名替换为你自己的应用名称,其他的照抄即可
intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;package=你的包名;component=你的包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试;S.content=测试;S.payload=test;end
然后点击群发,不出意外的话,你的app应该已经收到了离线通知~

因为目前手边只有小米和华为,所以其他三个厂商的还没有进行测试,不过估计应该都可以

收起阅读 »

mui.ajax的跨域问题调式报错问题以及leanCould代码托管挖的坑

总结一下我在其中犯的错误。
1.我再写ajax函数时,直接把他写在绑定事件之外了。导致我一刷新,实际上已经执行了ajax。

  1. mui.ajax函数我错了好多次。代码完全不对。如果代码正确的话一般不会报错仅限leanCould。
  2. 此外leanCould托管服务器api域名是 https://api.leancloud.cn/1.1/login
  3. https://API_BASE_URL/1.1/users/me 该api域名中的API_BASE_URL是api.leancould.cn
继续阅读 »

总结一下我在其中犯的错误。
1.我再写ajax函数时,直接把他写在绑定事件之外了。导致我一刷新,实际上已经执行了ajax。

  1. mui.ajax函数我错了好多次。代码完全不对。如果代码正确的话一般不会报错仅限leanCould。
  2. 此外leanCould托管服务器api域名是 https://api.leancloud.cn/1.1/login
  3. https://API_BASE_URL/1.1/users/me 该api域名中的API_BASE_URL是api.leancould.cn
收起阅读 »

iOS平台5+APP/WAP2APP使用WKWebview内核时由于内核崩溃引起白屏后自动恢复的方法

h5+

HBuilderX 2.3.4+版本已将iOS上所有webview的默认内核由UIWebview调整为WKWebview请参考https://ask.dcloud.net.cn/article/36348,
当内存占用过大或者应用切换到后台内存被回收会导致WKWebview内核Crash引起应用白屏,为了提高体验App支持Crash后的恢复,开发者可以通过简单的配置支持该功能。

注意

目前该功能针对在前台的应用,如果应用在后台时会直接重新启动不适用该规则

注意uniapp在使用vue页面时,有自带的恢复逻辑,不适用本规则。如果是nvue页面则不涉及这个问题。

支持的恢复行为

  • "restart"
    重启应用,关闭所有页面重新打开应用首页,可通过(plus.runtime.isRecovery)来判断应用是否恢复重启
  • "reload"
    重新加载当前WKWebview(崩溃的WKWebview)页面,页面中JS上下文中所有数据丢失,在当前Webview中可通过plus.webview.isRecovery判断是否恢复重新加载,在其它Webview中可监听recovery事件来判断
  • "none"
    不做任何操作

全局配置

manifest.json中配置默认值

    "plus": {  //uni-app项目对应节点名称为"app-plus"  
        "kernel": {  
            "ios": "WKWebview",  
            "recovery": "restart|reload|none"  
        },  
        // ...  
    }

webview配置

webview style新增kernelRecovery属性
通过该项可以自定义单个webview的恢复行为,覆盖全局配置
引用文档

示例
var webview = plus.webview.create("[url]","[id]", {kernelRecovery:"restart|reload|none"});

API

plus.webview.isRecovery
用于判断当前Webview窗口是否由于内核崩溃自动恢复,当配置reload时生效
引用文档

plus.runtime.isRecovery
用于判断当前应用是否是Webview崩溃自动恢复导致的启动,当配置restart时生效
引用文档

事件

recovery
当恢复行为配置为reload时,webview重新创建完成后会触发该事件,可以监听该事件做具体处理
引用文档

评论区各位开发者吐槽较多,但这个不是DCloud不解决,是iOS不解决。
如果使用webview渲染,内存过高时,只能重启webview。

  1. 降低webview里的内存占用
  2. 改用nvue或uvue原生渲染。但nvue由于weex不维护了也有坑,使用uni-app x的uvue比较好。
  3. 接受重启webview,优化重启过程的体验
继续阅读 »

HBuilderX 2.3.4+版本已将iOS上所有webview的默认内核由UIWebview调整为WKWebview请参考https://ask.dcloud.net.cn/article/36348,
当内存占用过大或者应用切换到后台内存被回收会导致WKWebview内核Crash引起应用白屏,为了提高体验App支持Crash后的恢复,开发者可以通过简单的配置支持该功能。

注意

目前该功能针对在前台的应用,如果应用在后台时会直接重新启动不适用该规则

注意uniapp在使用vue页面时,有自带的恢复逻辑,不适用本规则。如果是nvue页面则不涉及这个问题。

支持的恢复行为

  • "restart"
    重启应用,关闭所有页面重新打开应用首页,可通过(plus.runtime.isRecovery)来判断应用是否恢复重启
  • "reload"
    重新加载当前WKWebview(崩溃的WKWebview)页面,页面中JS上下文中所有数据丢失,在当前Webview中可通过plus.webview.isRecovery判断是否恢复重新加载,在其它Webview中可监听recovery事件来判断
  • "none"
    不做任何操作

全局配置

manifest.json中配置默认值

    "plus": {  //uni-app项目对应节点名称为"app-plus"  
        "kernel": {  
            "ios": "WKWebview",  
            "recovery": "restart|reload|none"  
        },  
        // ...  
    }

webview配置

webview style新增kernelRecovery属性
通过该项可以自定义单个webview的恢复行为,覆盖全局配置
引用文档

示例
var webview = plus.webview.create("[url]","[id]", {kernelRecovery:"restart|reload|none"});

API

plus.webview.isRecovery
用于判断当前Webview窗口是否由于内核崩溃自动恢复,当配置reload时生效
引用文档

plus.runtime.isRecovery
用于判断当前应用是否是Webview崩溃自动恢复导致的启动,当配置restart时生效
引用文档

事件

recovery
当恢复行为配置为reload时,webview重新创建完成后会触发该事件,可以监听该事件做具体处理
引用文档

评论区各位开发者吐槽较多,但这个不是DCloud不解决,是iOS不解决。
如果使用webview渲染,内存过高时,只能重启webview。

  1. 降低webview里的内存占用
  2. 改用nvue或uvue原生渲染。但nvue由于weex不维护了也有坑,使用uni-app x的uvue比较好。
  3. 接受重启webview,优化重启过程的体验
收起阅读 »

iOS打包提示没有推送权限解决办法

iOS iOS打包

如果开启了推送插件,但打包使用的iOS证书没有开通推送权限,则无法打包,需要到苹果开发者账号开启相关推送权限重新申请iOS证书再打包

推送权限只有付费的开发者才能开启。

1、首先打开开发者中心https://developer.apple.com/account,进入证书页面。

如果之前创建过appid,进去修改添加下推送服务就行了,不用重新创建。

2、点击证书、ID及配件文件,进入设置。

在identifiers项找到之前添加的需要修改相关权限的应用id点进去!

点击你要修改的应用id,然后勾选需要开通的相关推送权限保存,保存后需要重新申请描述文件证书!


注意:证书p12不用重新申请,描述文件要重新申请!(修改了权限之前的描述文件会失效)

详细的推送功能制作请看下面文档

ios推送证书的申请和使用配置

继续阅读 »

如果开启了推送插件,但打包使用的iOS证书没有开通推送权限,则无法打包,需要到苹果开发者账号开启相关推送权限重新申请iOS证书再打包

推送权限只有付费的开发者才能开启。

1、首先打开开发者中心https://developer.apple.com/account,进入证书页面。

如果之前创建过appid,进去修改添加下推送服务就行了,不用重新创建。

2、点击证书、ID及配件文件,进入设置。

在identifiers项找到之前添加的需要修改相关权限的应用id点进去!

点击你要修改的应用id,然后勾选需要开通的相关推送权限保存,保存后需要重新申请描述文件证书!


注意:证书p12不用重新申请,描述文件要重新申请!(修改了权限之前的描述文件会失效)

详细的推送功能制作请看下面文档

ios推送证书的申请和使用配置

收起阅读 »

Android webview隐藏后跳转新页面input输入卡顿与白屏渲染慢的问题说明及修复方案

页面渲染时间过长 软键盘输入卡顿

关于此问题的说明:

Android System WebView 内核的bug:当webview页面中存在持续渲染(如跑马灯效果。banner轮播等)。页面被隐藏后会导致JS阻塞影响页面渲染效率。从66.0.3359.126版本到最新都存在此问题。
注意:

  • 此问题必须是页面隐藏hide后,并且当前页面包含持续渲染(如跑马灯效果。banner轮播等)时才会触发此问题。如果你的页面不会隐藏、没有持续渲染逻辑可忽略此问题。
  • 一般新窗体进入盖住老窗体,不会调用webview的hide方法,不会引发此问题。此问题常见于tabbar的切换,不同tab的webview页面只有一个是显示的,其他是hide的。或者开发者手动调用了plus.webview对象的hide方法。

解决方案:

方案1: 我们推荐开发者在页面被hide后,主动停用持续操作ui的js或css。
在隐藏的页面持续操作视图本身也不合理,影响性能。
在uni-app中,基础组件swiper和扩展uni ui的跑马灯,组件内部会判断,如果当前页面已经不再前台显示,会停止轮播。所以正常使用这些组件也不会遇到问题。
如果开发者引用了未做判断的三方组件,或者自己编写了持续操作视图的代码,则应该注意编写判断代码,在页面hide时,停止这些js或css。然后在恢复显示时,重新启用它们。

在uniapp中实现方案1的代码

//组件内监听webview隐藏停止动画(即将新增组件所在页面的生命周期,可以监听页面隐藏来停止动画)  
mounted() {  
  // #ifdef APP-PLUS  
  const pages = getCurrentPages();  
  let currentWebview = pages[pages.length - 1].$getAppWebview();  
  currentWebview.addEventListener('hide', () => {  
    // webview隐藏,停止动画  
  })  
  currentWebview.addEventListener('show', () => {  
    // webview显示,开启动画  
  })  
  // #endif  
},
//页面内监听页面隐藏停止动画  
onShow() {  
  // 页面显示,开启动画  
},  
onHide() {  
  // 页面隐藏,停止动画  
}

方案2: 当页面被隐藏时主动调用webview的pause方法,暂停这个webview里的所有js和css动画的运行
首先需要升级HBuilderX 2.3.8或更高版本。(如发现版本没更新请等待更新后再操作)
5+提供了新的API ,WebviewObject对象添加pause、resume方法。

  • void pause() 暂停Webview对象,停止js执行、DOM渲染
  • void resume() 恢复Webview对象,恢复js执行、DOM渲染
  • boolean isPause() 是否暂停,暂停则返回ture,否则返回false

uniapp用户:

nvue页面无此问题。忽略即可。
vue页面:
在页面存在持续渲染(如跑马灯效果。banner轮播等)的情况下。可在页面周期onShow、onHide分别调用webview的resume、pause方法即可

onShow() {  
    const w = this.$mp.page.$getAppWebview();  
    if(w.isPause()){  
        w.resume();  
    }  
},  
onHide() {  
    const w = this.$mp.page.$getAppWebview();  
    w.pause();  
},

5+用户:

可以通过WebviewObject对象控制管理方式规避问题。当调用WebviewObject的show、hide方法时主动调用相关页面的pause、resume方法。

//创建页面 此页面包含持续渲染(如跑马灯效果。banner轮播等)的逻辑存在。  
var a = plus.webview.open('list.html','list');  
//当a页面要隐藏时可调用如下代码  
var a = plus.webview.getWebviewById('list');  
a.hide('none');  
a.pause();  

//当a页面显示时调用如下代码  
var a = plus.webview.getWebviewById('list');  
if(a.isPause()) {  
   a.resume();  
}
继续阅读 »

关于此问题的说明:

Android System WebView 内核的bug:当webview页面中存在持续渲染(如跑马灯效果。banner轮播等)。页面被隐藏后会导致JS阻塞影响页面渲染效率。从66.0.3359.126版本到最新都存在此问题。
注意:

  • 此问题必须是页面隐藏hide后,并且当前页面包含持续渲染(如跑马灯效果。banner轮播等)时才会触发此问题。如果你的页面不会隐藏、没有持续渲染逻辑可忽略此问题。
  • 一般新窗体进入盖住老窗体,不会调用webview的hide方法,不会引发此问题。此问题常见于tabbar的切换,不同tab的webview页面只有一个是显示的,其他是hide的。或者开发者手动调用了plus.webview对象的hide方法。

解决方案:

方案1: 我们推荐开发者在页面被hide后,主动停用持续操作ui的js或css。
在隐藏的页面持续操作视图本身也不合理,影响性能。
在uni-app中,基础组件swiper和扩展uni ui的跑马灯,组件内部会判断,如果当前页面已经不再前台显示,会停止轮播。所以正常使用这些组件也不会遇到问题。
如果开发者引用了未做判断的三方组件,或者自己编写了持续操作视图的代码,则应该注意编写判断代码,在页面hide时,停止这些js或css。然后在恢复显示时,重新启用它们。

在uniapp中实现方案1的代码

//组件内监听webview隐藏停止动画(即将新增组件所在页面的生命周期,可以监听页面隐藏来停止动画)  
mounted() {  
  // #ifdef APP-PLUS  
  const pages = getCurrentPages();  
  let currentWebview = pages[pages.length - 1].$getAppWebview();  
  currentWebview.addEventListener('hide', () => {  
    // webview隐藏,停止动画  
  })  
  currentWebview.addEventListener('show', () => {  
    // webview显示,开启动画  
  })  
  // #endif  
},
//页面内监听页面隐藏停止动画  
onShow() {  
  // 页面显示,开启动画  
},  
onHide() {  
  // 页面隐藏,停止动画  
}

方案2: 当页面被隐藏时主动调用webview的pause方法,暂停这个webview里的所有js和css动画的运行
首先需要升级HBuilderX 2.3.8或更高版本。(如发现版本没更新请等待更新后再操作)
5+提供了新的API ,WebviewObject对象添加pause、resume方法。

  • void pause() 暂停Webview对象,停止js执行、DOM渲染
  • void resume() 恢复Webview对象,恢复js执行、DOM渲染
  • boolean isPause() 是否暂停,暂停则返回ture,否则返回false

uniapp用户:

nvue页面无此问题。忽略即可。
vue页面:
在页面存在持续渲染(如跑马灯效果。banner轮播等)的情况下。可在页面周期onShow、onHide分别调用webview的resume、pause方法即可

onShow() {  
    const w = this.$mp.page.$getAppWebview();  
    if(w.isPause()){  
        w.resume();  
    }  
},  
onHide() {  
    const w = this.$mp.page.$getAppWebview();  
    w.pause();  
},

5+用户:

可以通过WebviewObject对象控制管理方式规避问题。当调用WebviewObject的show、hide方法时主动调用相关页面的pause、resume方法。

//创建页面 此页面包含持续渲染(如跑马灯效果。banner轮播等)的逻辑存在。  
var a = plus.webview.open('list.html','list');  
//当a页面要隐藏时可调用如下代码  
var a = plus.webview.getWebviewById('list');  
a.hide('none');  
a.pause();  

//当a页面显示时调用如下代码  
var a = plus.webview.getWebviewById('list');  
if(a.isPause()) {  
   a.resume();  
}
收起阅读 »

魔改MUI离线打包app解决拔插扫描枪重启app问题及指定App的mainactivity

           MUI这套H5应用框架非常值得肯定, 但也许它的应用少有涉及工业,activity一旦发生usb外接输入设备(如扫描枪)的排插就会导致重启, 这对于用家来讲是个不好的体现, 这个问题我已经在dcloud上反映过, https://ask.dcloud.net.cn/question/81362, 后来在群里有个小哥可能认识mui公司的人才有人理会解决, 但回复说要等hbuildx版本升级才行.

       为了不影响进度, 经过若干试验,发现原来的主Activity为PandoraEntryActivity, 那么我新建一个MyMainActivity extends它并在activity的configChanges里面加上 keyboard即可:

android:configChanges="orientation|keyboardHidden|keyboard|navigation"

       新开一个MainActivity的好处还有, 可以在app启动的时候开自己的后台服务, app结束的时候打扫现场.
        原app并不是一开始就以PandoraEntryActivity为启动activity,而是由一个临时的activity启动, 根据传入的参数is_stream_app加以判断,从而启动WebAppActivity或PandoraEntryActivity,为了完美接入, 也写了一个启动activity,在原本启动PandoraEntryActivity的地方换成MyMainActivity.

/
com.freestyle.android.h5plugin
Created by rocklee , 2019/3/8
/
public class MyStartActivity extends Activity {
@Override
protected void onCreate(Bundle var1) {
super.onCreate(var1);
Intent var2 = this.getIntent();
boolean var3 = false;
try {
var3 = var2.getBooleanExtra("is_stream_app", var3);
} catch (Exception var5) {
var5.printStackTrace();
this.finish();
return;
}

    if (var3) {  
        var2.setClass(this, WebAppActivity.class);  
        var2.putExtra("is_stream_app", true);  
    } else {  
        var2.putExtra("short_cut_class_name", PandoraEntry.class.getName());  
        var2.setClass(this, MyMainActivity.class);  
    }  

    this.startActivity(var2);  
    (new Handler()).postDelayed(new Runnable() {  
        public void run() {  
            MyStartActivity.this.finish();  
        }  
    }, 20L);  
}  

}
最后贴上MyMainActivity的代码

/
com.freestyle.android.h5plugin
Created by rocklee , 2019/11/1
/

public class MyMainActivity extends PandoraEntryActivity {
//private Bridge mBridge;
private Handler mUIHandler;
@Override
protected void onStart(){
super.onStart();
mUIHandler.postDelayed(()->{
WebView.setWebContentsDebuggingEnabled(true);
},3000);
}
private void patchApplication(){
}
@Override
public void onDestroy(){
FRPlugins.quit();
super.onDestroy();
}
@Override
public void onCreate(Bundle var1) {
super.onCreate(var1);
patchApplication();
mUIHandler=new Handler(getMainLooper());
//mBridge=new Bridge(this);
FRPlugins.init(this);
Config.init(this);
}
}
 
————————————————
版权声明:本文为CSDN博主「OK_boom」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rocklee/article/details/102852575

继续阅读 »

           MUI这套H5应用框架非常值得肯定, 但也许它的应用少有涉及工业,activity一旦发生usb外接输入设备(如扫描枪)的排插就会导致重启, 这对于用家来讲是个不好的体现, 这个问题我已经在dcloud上反映过, https://ask.dcloud.net.cn/question/81362, 后来在群里有个小哥可能认识mui公司的人才有人理会解决, 但回复说要等hbuildx版本升级才行.

       为了不影响进度, 经过若干试验,发现原来的主Activity为PandoraEntryActivity, 那么我新建一个MyMainActivity extends它并在activity的configChanges里面加上 keyboard即可:

android:configChanges="orientation|keyboardHidden|keyboard|navigation"

       新开一个MainActivity的好处还有, 可以在app启动的时候开自己的后台服务, app结束的时候打扫现场.
        原app并不是一开始就以PandoraEntryActivity为启动activity,而是由一个临时的activity启动, 根据传入的参数is_stream_app加以判断,从而启动WebAppActivity或PandoraEntryActivity,为了完美接入, 也写了一个启动activity,在原本启动PandoraEntryActivity的地方换成MyMainActivity.

/
com.freestyle.android.h5plugin
Created by rocklee , 2019/3/8
/
public class MyStartActivity extends Activity {
@Override
protected void onCreate(Bundle var1) {
super.onCreate(var1);
Intent var2 = this.getIntent();
boolean var3 = false;
try {
var3 = var2.getBooleanExtra("is_stream_app", var3);
} catch (Exception var5) {
var5.printStackTrace();
this.finish();
return;
}

    if (var3) {  
        var2.setClass(this, WebAppActivity.class);  
        var2.putExtra("is_stream_app", true);  
    } else {  
        var2.putExtra("short_cut_class_name", PandoraEntry.class.getName());  
        var2.setClass(this, MyMainActivity.class);  
    }  

    this.startActivity(var2);  
    (new Handler()).postDelayed(new Runnable() {  
        public void run() {  
            MyStartActivity.this.finish();  
        }  
    }, 20L);  
}  

}
最后贴上MyMainActivity的代码

/
com.freestyle.android.h5plugin
Created by rocklee , 2019/11/1
/

public class MyMainActivity extends PandoraEntryActivity {
//private Bridge mBridge;
private Handler mUIHandler;
@Override
protected void onStart(){
super.onStart();
mUIHandler.postDelayed(()->{
WebView.setWebContentsDebuggingEnabled(true);
},3000);
}
private void patchApplication(){
}
@Override
public void onDestroy(){
FRPlugins.quit();
super.onDestroy();
}
@Override
public void onCreate(Bundle var1) {
super.onCreate(var1);
patchApplication();
mUIHandler=new Handler(getMainLooper());
//mBridge=new Bridge(this);
FRPlugins.init(this);
Config.init(this);
}
}
 
————————————————
版权声明:本文为CSDN博主「OK_boom」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rocklee/article/details/102852575

收起阅读 »

HBuilderX 无MAC系统IOS云打包+蒲公英发布测试版

记录一下流程,免得后面的人重复摸索

  1. 申请苹果开发者账号

  2. 在开发者中心, 新建APP ID
    Certificates, Identifiers & Profiles
    》 All Identifiers
    》Register a New Identifier
    选择 创建APP IDs,
    ****注意此处的Bundle ID也就是APP ID, 是你自己起的, 格式: com.domainname.appname (Bundle ID在提交云打包时需要填入)

  3. 在香蕉云编(https://www.yunedit.com/createcert)上 创建 csr文件

  4. 在苹果开发者中心, 创建Certificates, 过程中会要求上传前一步生成的csr, 创建成功可以下载为cer文件
    ****Type 有 iOS Distribution和iOS Development两种, 如果是像我一样想丢到蒲公英上给别人测试, 选择【 iOS Distribution】

  5. 在香蕉云编 上传下载的cer文件, 生成p12文件并下载, 会提示你输入密码(p12文件和密码在提交云打包时需要填入)

  6. 在开发者中心,添加测试手机的设备编号,设备编号 可以用手机访问https://www.pgyer.com/tools/udid获取
    Certificates, Identifiers & Profiles
    》 Devices 》Add

  7. 在开发者中心, 创建Profiles, 需要上传前面生成的p12文件, 如果时发布测试版, 创建时一定要选择 Distribution》Ad Hoc
    Certificates, Identifiers & Profiles
    》 Profiles 》Add

  8. 下载创建好的 profile, 连同前面生成的 appid, p12文件, 以及p12文件对应的密码, 填入到HbuilderX云打包的参数里, 打包

  9. 将打包好的ipa文件上传到蒲公英上, 已加入uuid的设备可以打开发布后的网页点击安装。

继续阅读 »

记录一下流程,免得后面的人重复摸索

  1. 申请苹果开发者账号

  2. 在开发者中心, 新建APP ID
    Certificates, Identifiers & Profiles
    》 All Identifiers
    》Register a New Identifier
    选择 创建APP IDs,
    ****注意此处的Bundle ID也就是APP ID, 是你自己起的, 格式: com.domainname.appname (Bundle ID在提交云打包时需要填入)

  3. 在香蕉云编(https://www.yunedit.com/createcert)上 创建 csr文件

  4. 在苹果开发者中心, 创建Certificates, 过程中会要求上传前一步生成的csr, 创建成功可以下载为cer文件
    ****Type 有 iOS Distribution和iOS Development两种, 如果是像我一样想丢到蒲公英上给别人测试, 选择【 iOS Distribution】

  5. 在香蕉云编 上传下载的cer文件, 生成p12文件并下载, 会提示你输入密码(p12文件和密码在提交云打包时需要填入)

  6. 在开发者中心,添加测试手机的设备编号,设备编号 可以用手机访问https://www.pgyer.com/tools/udid获取
    Certificates, Identifiers & Profiles
    》 Devices 》Add

  7. 在开发者中心, 创建Profiles, 需要上传前面生成的p12文件, 如果时发布测试版, 创建时一定要选择 Distribution》Ad Hoc
    Certificates, Identifiers & Profiles
    》 Profiles 》Add

  8. 下载创建好的 profile, 连同前面生成的 appid, p12文件, 以及p12文件对应的密码, 填入到HbuilderX云打包的参数里, 打包

  9. 将打包好的ipa文件上传到蒲公英上, 已加入uuid的设备可以打开发布后的网页点击安装。

收起阅读 »

antv-f2图表demo

uniapp

小程序用,发插件太麻烦

小程序用,发插件太麻烦