HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

大厂团队接各种外包

外包

可提供服务

  • Web网站的整体研发

  • 小程序开发

  • 微信公众号开发

  • 安卓/Ios

技术栈介绍

  • Html5/Css/Js/Vue.js/jQuery.js/Node.js/小程序

  • React.js/Typescript/ReactNative/Java/Python/PHP

  • Electron

联系方式

微信 gzamon (注:外包)

继续阅读 »

可提供服务

  • Web网站的整体研发

  • 小程序开发

  • 微信公众号开发

  • 安卓/Ios

技术栈介绍

  • Html5/Css/Js/Vue.js/jQuery.js/Node.js/小程序

  • React.js/Typescript/ReactNative/Java/Python/PHP

  • Electron

联系方式

微信 gzamon (注:外包)

收起阅读 »

升级HBx后mui.ajax跨域访问全部挂掉 还好用5+的XMLHttpRequest解决

ajax

还好之前有封装mui.ajax 否则一个一个的改真要命啊

还好之前有封装mui.ajax 否则一个一个的改真要命啊

Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息

IMEI Android

说明

Android平台从6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取。
因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许。

<a id="externalstorage"></a>

读写手机存储权限

HBuilderX3.5.5+版本调整申请读写手机存储权限策略默认值为 none

应用需要保存运行状态等数据到手机SD卡中,启动时需要获取读写手机存储权限,此权限为基础权限,影响真机运行、wgt升级。

  • 注意:此权限目标不是要访问相册,是Android把相册写入权限和存储写入权限合并在一个权限里了。
  • 注意:wgt热更新是应用市场不乐见的,不建议明显提示给用户或告知应用市场。

申请读写手机存储需要用户授权,会弹出如下提示框:

  • HBuilderX2.4.2及以下版本,用户拒绝此权限则直接退出应用。
  • HBuilderX2.4.3+版本,用户拒绝后键会弹出以下提示框引导用户重新允许

    点击“取消”退出应用;
    点击“确定”重新弹出授权框,如果用户已经勾选“不再询问”则打开应用的设置界面。
    此提示语可在manifest.json中配置
  • HBuilderX2.5.0+开始支持配置应用启动时申请获取手机存储权限,支持以下三种策略
    • none
      应用启动时不申请
    • once
      应用第一次启动时申请,用户可以拒绝
    • always
      应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

源码视图配置

打开manifest.json文件,切换到“源码视图”项

  • uni-app项目
    在"app-plus" -> "distribute" -> "android" 节点下添加 permissionExternalStorage 节点
  • 5+ App项目
    在 "plus" -> "distribute" -> "google" 节点下添加 permissionExternalStorage 节点

permissionExternalStorage节点数据格式如下:

    "permissionExternalStorage": {  
        "request": "always",  
        "prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"  
     }
  • request
    字符串类型,必填,申请读写手机存储权限策略,可取值none、once、always。
    • HBuilderX3.5.5+版本默认值调整为none
    • HBuilderX3.0以下版本默认值always
  • prompt
    字符串类型,可选,用户拒绝时弹出提示框上的内容。
    默认值为:应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。
    国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
    设置自定义键名称为“dcloud_permission_write_external_storage_message”。

保存后提交云端打包生效

<a id="phonestate"></a>

访问设备信息权限

Android平台应用获取设备信息(如IMEI、IMSI等),统计、推送、广告等业务功能依赖这些信息。
此权限不是必选,拒绝此权限不影响App端基座运行。但拥有本权限可以给开发者提供更准确的统计报表。
而申请获取这些信息需要用户授权,会弹出如下提示框:


华为手机应用的设置中权限列表中为“电话”权限
部分手机设备对该权限描述为“拨打电话,管理电话权限”

HBuilderX2.3.8+开始支持配置应用启动时申请获取设备信息权限,支持以下三种策略

  • none
    应用启动时不申请
  • once
    应用第一次启动时申请,用户可以拒绝
  • always
    应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

    此提示框删的文本可自定义,参考下面的prompt字段

HX3.5.5+版本开始默认策略为none,即应用启动不再主动申请

源码视图配置

打开manifest.json文件,切换到“源码视图”项

  • uni-app项目
    在 "app-plus" -> "distribute" -> "android" 节点下添加 permissionPhoneState 节点
  • 5+ App项目
    在 "plus" -> "distribute" -> "google" 节点下添加 permissionPhoneState 节点

permissionPhoneState节点数据格式如下:

    "permissionPhoneState": {  
        "request": "always",  
        "prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"  
     }
  • request
    字符串类型,必填,申请设备信息权限策略,可取值none、once、always。默认值为once。
  • prompt
    字符串类型,可选,用户拒绝时弹出提示框上的内容。
    默认值为:为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。
    国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
    设置自定义键名称为“dcloud_permission_read_phone_state_message”。

保存后提交云端打包生效

离线打包提示语配置及弹窗配置。

提示语配置

在主项目的strings.xml中添加如下字段。strings.xml位于 项目目录/src/main/res/values下,如果文件或文件夹不存在,直接新建即可。

存储权限提示语配置

<resources>  
    <string name="dcloud_permission_write_external_storage_message">存储权限提示语</string>  
</resources>  

读取手机状态权限配置

<resources>  
    <string name="dcloud_permission_read_phone_state_message">读取手机状态权限提示语</string>  
</resources>  

弹窗配置

在androidManifest.xml的application节点下添加如下字段。

存储权限弹窗配置

<application>  
<meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="once"/>  
</application>  

value可取值为 none、once、always。

读取手机状态弹窗配置

<application>  
<meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="once"/>  
</application>  

value可取值为 none、once、always。

补充

沟通发现,部分开发者在main.js里面调用了plus.device.getInfo这类方法。

但是其实API操作与permissionExternalStorage设置无关,permissionExternalStorage用于设置应用内部逻辑是否申请访问SD卡权限

开发者是因为在启动的时候调用API触发了权限申请,误以为permissionExternalStorage设置无效(其实设置是生效的)。

其它API操作会根据功能需求来申请权限,比如操作系统相册也会申请访问SDK卡权限、定位操作会申请定位权限等。

Android平台隐私与政策提示框配置方法

继续阅读 »

说明

Android平台从6.0(API23)开始系统对权限的管理更加严格,所有涉及敏感权限都需要用户授权允许才能获取。
因此一些应用基础业务逻辑需要的权限会在应用启动时申请,并引导用户允许。

<a id="externalstorage"></a>

读写手机存储权限

HBuilderX3.5.5+版本调整申请读写手机存储权限策略默认值为 none

应用需要保存运行状态等数据到手机SD卡中,启动时需要获取读写手机存储权限,此权限为基础权限,影响真机运行、wgt升级。

  • 注意:此权限目标不是要访问相册,是Android把相册写入权限和存储写入权限合并在一个权限里了。
  • 注意:wgt热更新是应用市场不乐见的,不建议明显提示给用户或告知应用市场。

申请读写手机存储需要用户授权,会弹出如下提示框:

  • HBuilderX2.4.2及以下版本,用户拒绝此权限则直接退出应用。
  • HBuilderX2.4.3+版本,用户拒绝后键会弹出以下提示框引导用户重新允许

    点击“取消”退出应用;
    点击“确定”重新弹出授权框,如果用户已经勾选“不再询问”则打开应用的设置界面。
    此提示语可在manifest.json中配置
  • HBuilderX2.5.0+开始支持配置应用启动时申请获取手机存储权限,支持以下三种策略
    • none
      应用启动时不申请
    • once
      应用第一次启动时申请,用户可以拒绝
    • always
      应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

源码视图配置

打开manifest.json文件,切换到“源码视图”项

  • uni-app项目
    在"app-plus" -> "distribute" -> "android" 节点下添加 permissionExternalStorage 节点
  • 5+ App项目
    在 "plus" -> "distribute" -> "google" 节点下添加 permissionExternalStorage 节点

permissionExternalStorage节点数据格式如下:

    "permissionExternalStorage": {  
        "request": "always",  
        "prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"  
     }
  • request
    字符串类型,必填,申请读写手机存储权限策略,可取值none、once、always。
    • HBuilderX3.5.5+版本默认值调整为none
    • HBuilderX3.0以下版本默认值always
  • prompt
    字符串类型,可选,用户拒绝时弹出提示框上的内容。
    默认值为:应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。
    国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
    设置自定义键名称为“dcloud_permission_write_external_storage_message”。

保存后提交云端打包生效

<a id="phonestate"></a>

访问设备信息权限

Android平台应用获取设备信息(如IMEI、IMSI等),统计、推送、广告等业务功能依赖这些信息。
此权限不是必选,拒绝此权限不影响App端基座运行。但拥有本权限可以给开发者提供更准确的统计报表。
而申请获取这些信息需要用户授权,会弹出如下提示框:


华为手机应用的设置中权限列表中为“电话”权限
部分手机设备对该权限描述为“拨打电话,管理电话权限”

HBuilderX2.3.8+开始支持配置应用启动时申请获取设备信息权限,支持以下三种策略

  • none
    应用启动时不申请
  • once
    应用第一次启动时申请,用户可以拒绝
  • always
    应用每次启动都申请,并且用户必须允许,用户拒绝时会弹出以下提示框引导用户重新允许

    此提示框删的文本可自定义,参考下面的prompt字段

HX3.5.5+版本开始默认策略为none,即应用启动不再主动申请

源码视图配置

打开manifest.json文件,切换到“源码视图”项

  • uni-app项目
    在 "app-plus" -> "distribute" -> "android" 节点下添加 permissionPhoneState 节点
  • 5+ App项目
    在 "plus" -> "distribute" -> "google" 节点下添加 permissionPhoneState 节点

permissionPhoneState节点数据格式如下:

    "permissionPhoneState": {  
        "request": "always",  
        "prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"  
     }
  • request
    字符串类型,必填,申请设备信息权限策略,可取值none、once、always。默认值为once。
  • prompt
    字符串类型,可选,用户拒绝时弹出提示框上的内容。
    默认值为:为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。
    国际化配置参考:https://ask.dcloud.net.cn/article/35860#strings
    设置自定义键名称为“dcloud_permission_read_phone_state_message”。

保存后提交云端打包生效

离线打包提示语配置及弹窗配置。

提示语配置

在主项目的strings.xml中添加如下字段。strings.xml位于 项目目录/src/main/res/values下,如果文件或文件夹不存在,直接新建即可。

存储权限提示语配置

<resources>  
    <string name="dcloud_permission_write_external_storage_message">存储权限提示语</string>  
</resources>  

读取手机状态权限配置

<resources>  
    <string name="dcloud_permission_read_phone_state_message">读取手机状态权限提示语</string>  
</resources>  

弹窗配置

在androidManifest.xml的application节点下添加如下字段。

存储权限弹窗配置

<application>  
<meta-data android:name="DCLOUD_WRITE_EXTERNAL_STORAGE" android:value="once"/>  
</application>  

value可取值为 none、once、always。

读取手机状态弹窗配置

<application>  
<meta-data android:name="DCLOUD_READ_PHONE_STATE" android:value="once"/>  
</application>  

value可取值为 none、once、always。

补充

沟通发现,部分开发者在main.js里面调用了plus.device.getInfo这类方法。

但是其实API操作与permissionExternalStorage设置无关,permissionExternalStorage用于设置应用内部逻辑是否申请访问SD卡权限

开发者是因为在启动的时候调用API触发了权限申请,误以为permissionExternalStorage设置无效(其实设置是生效的)。

其它API操作会根据功能需求来申请权限,比如操作系统相册也会申请访问SDK卡权限、定位操作会申请定位权限等。

Android平台隐私与政策提示框配置方法

收起阅读 »

HbuilderX怎么定位js报错位置

HBuilder X

我使用的是HbuilderX2.3.7 WIndowsapp开发版,使用的时候发现js报错了,但是从报错信息上根本不知道哪个文件哪行报错了?怎么解决

我使用的是HbuilderX2.3.7 WIndowsapp开发版,使用的时候发现js报错了,但是从报错信息上根本不知道哪个文件哪行报错了?怎么解决

H5+小程序小项目找外包,坐标深圳,有意详谈,仅限深圳市

有个小项目外包,需要对VUE和UNIAPP熟悉一点,H5+小程序,分期开发,坐标深圳,有熟手联系
我是做后端的,前端这块只会简单的VUE,设计图和接口文档等环境已搭好
价格详谈分期计算,2283782927可Q

有个小项目外包,需要对VUE和UNIAPP熟悉一点,H5+小程序,分期开发,坐标深圳,有熟手联系
我是做后端的,前端这块只会简单的VUE,设计图和接口文档等环境已搭好
价格详谈分期计算,2283782927可Q

我写了一个音视频聊天的组件,后续准备接入直播,想问下有多少人需求这个

nvue

https://ext.dcloud.net.cn/plugin?id=824 这个是插件地址,如果有人项目中使用或者打算后续项目中用这个,请联系我,qq:1053316540 我好根据你们需求进行插件升级,如果没有市场,这个插件升级功能就会推迟很多了

https://ext.dcloud.net.cn/plugin?id=824 这个是插件地址,如果有人项目中使用或者打算后续项目中用这个,请联系我,qq:1053316540 我好根据你们需求进行插件升级,如果没有市场,这个插件升级功能就会推迟很多了

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,优化重启过程的体验
收起阅读 »