更新 HBuilderX 2.9.0+ 后 rpx(upx)、rem 样式变形的处理办法
使用 rem 的部分变形
HBuilderX 2.9.0+ 相关更新:调整根字体大小为系统默认大小与微信小程序平台一致
调整后 rem 默认大小不再为 窗口宽度/20,改为了浏览器(webview)默认的字体大小,一般为 16px
对于历史项目如需不改动代码保持原来的样式可以参考如下操作:
App
编辑 __uniappview.html 文件(路径:/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-app-plus/template/v3/__uniappview.html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<script>
var __UniViewStartTime__ = Date.now();
document.addEventListener('DOMContentLoaded', function() {
document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
})
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title>View</title>
<link rel="stylesheet" href="view.css" />
</head>
<body>
<div id="app"></div>
<script src="__uniappes6.js"></script>
<script src="view.umd.min.js"></script>
<script src="app-view.js"></script>
</body>
</html>
H5
项目内增加 template.h5.html 文件,并配置在 manifest.json -> h5 内 `"template" : "template.h5.html"
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
})
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
</head>
<body>
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
使用 rpx(upx) 的部分变形
HBuilderX 2.9.0+ 还新增了 rpx(upx) 的范围配置,如因 rpx(upx) 在宽屏的处理问题异常,可以设置 rpxCalcMaxDeviceWidth 为 99999,具体参考:
- 【重要】App平台、H5平台 新增 rpx(upx) 配置,默认限定了 rpx(upx) 生效的最大屏幕宽度为 px。可在 pages.json -> globalStyle 配置 rpxCalcMaxDeviceWidth、rpxCalcBaseDeviceWidth、rpxCalcIncludeWidth 等参数 详情
使用 rem 的部分变形
HBuilderX 2.9.0+ 相关更新:调整根字体大小为系统默认大小与微信小程序平台一致
调整后 rem 默认大小不再为 窗口宽度/20,改为了浏览器(webview)默认的字体大小,一般为 16px
对于历史项目如需不改动代码保持原来的样式可以参考如下操作:
App
编辑 __uniappview.html 文件(路径:/HBuilderX.app/Contents/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/uni-app-plus/template/v3/__uniappview.html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<script>
var __UniViewStartTime__ = Date.now();
document.addEventListener('DOMContentLoaded', function() {
document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
})
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title>View</title>
<link rel="stylesheet" href="view.css" />
</head>
<body>
<div id="app"></div>
<script src="__uniappes6.js"></script>
<script src="view.umd.min.js"></script>
<script src="app-view.js"></script>
</body>
</html>
H5
项目内增加 template.h5.html 文件,并配置在 manifest.json -> h5 内 `"template" : "template.h5.html"
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
<script>
document.addEventListener('DOMContentLoaded', function() {
document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
})
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
</head>
<body>
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
使用 rpx(upx) 的部分变形
HBuilderX 2.9.0+ 还新增了 rpx(upx) 的范围配置,如因 rpx(upx) 在宽屏的处理问题异常,可以设置 rpxCalcMaxDeviceWidth 为 99999,具体参考:
收起阅读 »
- 【重要】App平台、H5平台 新增 rpx(upx) 配置,默认限定了 rpx(upx) 生效的最大屏幕宽度为 px。可在 pages.json -> globalStyle 配置 rpxCalcMaxDeviceWidth、rpxCalcBaseDeviceWidth、rpxCalcIncludeWidth 等参数 详情
制作自定义基座打包失败
失败日志:https://service.dcloud.net.cn/build/errorLog/edbbb990-0f5a-11eb-810a-1bdd8e587e9e
第二次失败日志:https://service.dcloud.net.cn/build/errorLog/bce51220-0f5b-11eb-accd-e14cc357f5c1
使用HBuilder X2.8.13打包成功
使用HBuilder X2.9.3打包失败
失败日志:https://service.dcloud.net.cn/build/errorLog/edbbb990-0f5a-11eb-810a-1bdd8e587e9e
第二次失败日志:https://service.dcloud.net.cn/build/errorLog/bce51220-0f5b-11eb-accd-e14cc357f5c1
使用HBuilder X2.8.13打包成功
使用HBuilder X2.9.3打包失败
收起阅读 »5+App Android、iOS 截屏任意区域(解决iOS机型下clip-top无效bug )
Android机型,截图正常
iOS机型,bitmap.save时,clip的top参数无效,但在plus.webview.currentWebview().draw时,是有效的。
源码示例 https://blog.csdn.net/qq285679784/article/details/109001187
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<link href="css/mui.min.css" rel="stylesheet" />
</head>
<body>
<div>
<img src="http://p1.bqimg.com/567571/cedca293f269ba11.jpg" width="100%" />
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
</div>
<script src="js/mui.min.js"></script>
<script src="js/drawScreen.js"></script>
<script type="text/javascript" charset="utf-8">
mui.init();
mui.plusReady(function() {
// 截屏图片比例 5:4
let descWidth = document.body.clientWidth;
let descHeight = descWidth / (5 / 4);
var options = {
successCB: function(e) {
console.log(JSON.stringify(e))
},
errorCB: function(e) {
console.log(JSON.stringify(e))
},
quality: 80,
clip: {
top: '20px',
left: '0px',
width: descWidth,
height: descHeight
}
}
drawScreen(options);
});
</script>
</body>
</html>
/* drawScreen.js
参数说明:
参数名 类型 说明 默认值 是否必选
successCB | Function | 成功回调函数 | | Y
errorCB | Function | 失败,回调函数 | Function |
fileName | String | 文件名,不需后缀名 | 当前时间戳 |
imgID | String | 原生图片ID | 当前时间戳 |
overwrite | Boolean | 是否覆盖 | true |
format | String | 保存的格式 | PNG |
quality | Number | 保存质量,1-100,1最低,100最高 | 50 |
clip | Object | 指定截屏区域 | {top:’0px’,left:’0px’,width:’100%’,height:’100%’}
*/
var drawScreen = function(options) {
options = {
successCB: options.successCB || function() {},
errorCB: options.errorCB || function() {},
fileName: options.fileName || Date.parse(new Date()),
imgID: options.imgID || String(Date.parse(new Date())),
overwrite: options.overwrite || true,
format: options.format || 'jpg',
quality: options.quality || 50,
clip: options.clip || {
top: '0px',
left: '0px',
width: '100%',
height: '100%'
}
}
var self = plus.webview.currentWebview();
var bitmap = new plus.nativeObj.Bitmap(options.imgID);
//绘制截图
self.draw(bitmap, function() {
// 保存Bitmap图片
bitmap.save('_doc/' + options.fileName + '.' + options.format, {
overwrite: options.overwrite,
format: options.format,
quality: options.quality,
clip: options.clip //iOS机型,bitmap.save时,clip的top参数无效,但在self.draw时,是有效的。
}, function(i) {
//销毁Bitmap图片
bitmap.clear();
options.successCB({
success: 'success',
details: i.target
});
}, function(e) {
bitmap.clear();
options.errorCB({
error: '图片保存失败',
details: e
});
});
}, function(e) {
options.errorCB({
error: '截屏绘制失败',
details: e
});
},{
clip: options.clip //绘制截图时,设置clip,解决iOS机型下clip-top无效bug
});
} Android机型,截图正常
iOS机型,bitmap.save时,clip的top参数无效,但在plus.webview.currentWebview().draw时,是有效的。
源码示例 https://blog.csdn.net/qq285679784/article/details/109001187
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<link href="css/mui.min.css" rel="stylesheet" />
</head>
<body>
<div>
<img src="http://p1.bqimg.com/567571/cedca293f269ba11.jpg" width="100%" />
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
<p>dddd</p>
</div>
<script src="js/mui.min.js"></script>
<script src="js/drawScreen.js"></script>
<script type="text/javascript" charset="utf-8">
mui.init();
mui.plusReady(function() {
// 截屏图片比例 5:4
let descWidth = document.body.clientWidth;
let descHeight = descWidth / (5 / 4);
var options = {
successCB: function(e) {
console.log(JSON.stringify(e))
},
errorCB: function(e) {
console.log(JSON.stringify(e))
},
quality: 80,
clip: {
top: '20px',
left: '0px',
width: descWidth,
height: descHeight
}
}
drawScreen(options);
});
</script>
</body>
</html>
/* drawScreen.js
参数说明:
参数名 类型 说明 默认值 是否必选
successCB | Function | 成功回调函数 | | Y
errorCB | Function | 失败,回调函数 | Function |
fileName | String | 文件名,不需后缀名 | 当前时间戳 |
imgID | String | 原生图片ID | 当前时间戳 |
overwrite | Boolean | 是否覆盖 | true |
format | String | 保存的格式 | PNG |
quality | Number | 保存质量,1-100,1最低,100最高 | 50 |
clip | Object | 指定截屏区域 | {top:’0px’,left:’0px’,width:’100%’,height:’100%’}
*/
var drawScreen = function(options) {
options = {
successCB: options.successCB || function() {},
errorCB: options.errorCB || function() {},
fileName: options.fileName || Date.parse(new Date()),
imgID: options.imgID || String(Date.parse(new Date())),
overwrite: options.overwrite || true,
format: options.format || 'jpg',
quality: options.quality || 50,
clip: options.clip || {
top: '0px',
left: '0px',
width: '100%',
height: '100%'
}
}
var self = plus.webview.currentWebview();
var bitmap = new plus.nativeObj.Bitmap(options.imgID);
//绘制截图
self.draw(bitmap, function() {
// 保存Bitmap图片
bitmap.save('_doc/' + options.fileName + '.' + options.format, {
overwrite: options.overwrite,
format: options.format,
quality: options.quality,
clip: options.clip //iOS机型,bitmap.save时,clip的top参数无效,但在self.draw时,是有效的。
}, function(i) {
//销毁Bitmap图片
bitmap.clear();
options.successCB({
success: 'success',
details: i.target
});
}, function(e) {
bitmap.clear();
options.errorCB({
error: '图片保存失败',
details: e
});
});
}, function(e) {
options.errorCB({
error: '截屏绘制失败',
details: e
});
},{
clip: options.clip //绘制截图时,设置clip,解决iOS机型下clip-top无效bug
});
} 收起阅读 »
蓝蘑云直播实时音视频集成指南
准备:
DEMO运行示例
- 下载DEMO源码从插件市场下载,解压打开;
- 打开HBuild工具导入demo工程,从自己账号获取DCloud AppID;
- 获取蓝蘑云APPID,填入代码中 export const appId = ""
- 配置App原生插件;
- 配置HBuild android权限



android 6.0以上需要手动添加权限,我们sdk 提供接口获取权限接口

5.云打包

6.android demo 体验下载地址
注意事项
- 当前调试运行环境只支持真机调试运行,不能支持模拟器环境运行;
- 运行时确保app的摄像头和麦克风权限打开;如果加入房间失败,监听错误码为4007,代表无权限,需要在app权限设置里打开;
准备:
DEMO运行示例
- 下载DEMO源码从插件市场下载,解压打开;
- 打开HBuild工具导入demo工程,从自己账号获取DCloud AppID;
- 获取蓝蘑云APPID,填入代码中 export const appId = ""
- 配置App原生插件;
- 配置HBuild android权限



android 6.0以上需要手动添加权限,我们sdk 提供接口获取权限接口

5.云打包

6.android demo 体验下载地址
注意事项
- 当前调试运行环境只支持真机调试运行,不能支持模拟器环境运行;
- 运行时确保app的摄像头和麦克风权限打开;如果加入房间失败,监听错误码为4007,代表无权限,需要在app权限设置里打开;
蓝蘑云使用指南
概述:
maple-rtc 为蓝蘑云推出的直播&实时音视频系统,包括了直播,实时音频,视频,变声,美颜等功能,适用于娱乐,游戏,教育等实时场景中;Maple-RTC支持快速私有化部署,一键部署上线。
第一步:开通蓝蘑云服务
- 打开蓝蘑云用户管理后台,点击注册新用户

- 登录蓝蘑云用户管理后台,用刚注册的手机号码和密码登录管理后台
第二步:服务端创建应用AppID
- 点击创建新项目按钮,在弹出的对话框输入项目名称,点击立即创建;

- 获取APPID替换到项目中;
- 点击统计页面查看服务使用量;
收费标准
当前蓝蘑云提供1个月免费测试对接时间,让客户有充足时间对接测试,如果测试对接满意,需要联系商务开通正式服务商用,点击管理后台联系我们,可以联系到技术和商务;具体收费标准请查看官方标准,大客户都有优惠;
如您在对接中有任何其他问题需要技术咨询,可以加入我们的技术交流QQ群:701150764,或者直接联系我们商务,提供1对1技术支持;
概述:
maple-rtc 为蓝蘑云推出的直播&实时音视频系统,包括了直播,实时音频,视频,变声,美颜等功能,适用于娱乐,游戏,教育等实时场景中;Maple-RTC支持快速私有化部署,一键部署上线。
第一步:开通蓝蘑云服务
- 打开蓝蘑云用户管理后台,点击注册新用户

- 登录蓝蘑云用户管理后台,用刚注册的手机号码和密码登录管理后台
第二步:服务端创建应用AppID
- 点击创建新项目按钮,在弹出的对话框输入项目名称,点击立即创建;

- 获取APPID替换到项目中;
- 点击统计页面查看服务使用量;
收费标准
当前蓝蘑云提供1个月免费测试对接时间,让客户有充足时间对接测试,如果测试对接满意,需要联系商务开通正式服务商用,点击管理后台联系我们,可以联系到技术和商务;具体收费标准请查看官方标准,大客户都有优惠;
如您在对接中有任何其他问题需要技术咨询,可以加入我们的技术交流QQ群:701150764,或者直接联系我们商务,提供1对1技术支持;
【屏幕适配问题】强烈反对uni-app的“屏幕适配” 实现方案
目前的 “屏幕适配” 实现方案非常糟糕 (https://uniapp.dcloud.net.cn/adapt),从我这边看,有种产品经理脑子被驴踢了的感觉。
这个功能连官方自己的案例显示都不正常,请看下图(或自己访问:https://static-7d133019-9a7e-474a-b7c2-c01751f00ca5.bspapp.com/#/ )
既然我 app 是为移动端设计的,那么每个页面也肯定是为移动端设计的,在移动端能正常显示,就是最核心目标!
而目前搞 right window 这一套非常奇怪,只是首页能正常显示了,详细页无法正常显示。
而且,
不是所有app都是资讯类型!并不是所有app都是资讯类型!并不是所有app都是资讯类型!
如果是其它类型,大概率会造成交互上的混乱
其实大家的需求很简单,就是网页版直接默认一个宽度,居中, 就ok了。请不要搞些累赘的right window折腾开发者了
另外:用 iframe 是不ok的,因为我需要pc端可以单独访问某个页面
希望这个功能可以悬崖勒马,不要自己YY一套莫名其妙的方案,尽快改回正常的模式
目前的 “屏幕适配” 实现方案非常糟糕 (https://uniapp.dcloud.net.cn/adapt),从我这边看,有种产品经理脑子被驴踢了的感觉。
这个功能连官方自己的案例显示都不正常,请看下图(或自己访问:https://static-7d133019-9a7e-474a-b7c2-c01751f00ca5.bspapp.com/#/ )
既然我 app 是为移动端设计的,那么每个页面也肯定是为移动端设计的,在移动端能正常显示,就是最核心目标!
而目前搞 right window 这一套非常奇怪,只是首页能正常显示了,详细页无法正常显示。
而且,
不是所有app都是资讯类型!并不是所有app都是资讯类型!并不是所有app都是资讯类型!
如果是其它类型,大概率会造成交互上的混乱
其实大家的需求很简单,就是网页版直接默认一个宽度,居中, 就ok了。请不要搞些累赘的right window折腾开发者了
另外:用 iframe 是不ok的,因为我需要pc端可以单独访问某个页面
希望这个功能可以悬崖勒马,不要自己YY一套莫名其妙的方案,尽快改回正常的模式
收起阅读 »nvue map 组件 polyline 更换箭头图标格式说明
nvue 页面 map 组件是基于高德地图实现的,如果您想自定义 polyline 的 箭头图标(对应 arrowIconPath )请参考附件中提供的示例图片设计,该图片为高德官方示例图片,请按照此图片的尺寸切图。
注意事项:
- 在image两边增加部分透明像素,可减轻绘制产生的锯齿;
- 图片中的箭头方向向上;
效果图:
<img src="https://img.cdn.aliyun.dcloud.net.cn/nativedocs/nativeplugin/Iosimgs/IMG_7C59BC6C6C7F-1.jpeg" width="50%"/>
附件:
nvue 页面 map 组件是基于高德地图实现的,如果您想自定义 polyline 的 箭头图标(对应 arrowIconPath )请参考附件中提供的示例图片设计,该图片为高德官方示例图片,请按照此图片的尺寸切图。
注意事项:
- 在image两边增加部分透明像素,可减轻绘制产生的锯齿;
- 图片中的箭头方向向上;
效果图:
<img src="https://img.cdn.aliyun.dcloud.net.cn/nativedocs/nativeplugin/Iosimgs/IMG_7C59BC6C6C7F-1.jpeg" width="50%"/>
附件:
收起阅读 »推送PLUS重磅发布,全方位提升推送消息转化率
推送PLUS1.0主要从内容智选、数据归因、广告补发三大维度发力,以【分组对比】、【后效分析】、【广告补发】等功能模块为抓手,全方位助力运营提升推送消息转化率。
【分组对比】通过对各测试组的到达-展示-点击数据的监测分析,筛选出最优文案/人群,并支持实时及定时地按最优测试组补发剩余用户,提高通知消息点击率,助力运营提效。
【后效分析】从推送任务、日期、用户三大数据维度,提供清晰明了的数据报表,全面分析应用的推送转化、趋势及用户活跃情况,并提供消息从下发-到达-展示-点击各个阶段的折损原因分析,针对不同参考指标灵活选择解决方案,提高推送消息的转化率。
【广告投放】针对推送无法触达的用户,使用广告投放的方式进行消息补发,提升用户点击数量,进一步提升DAU。
分组对比
分组测试功能支持在Android及iOS全平台,设置2-5组测试组,“对比通知文案”或“对比用户群体”,通过对各测试组的到达、展示、点击数据的监测分析,筛选出最优文案/人群,并支持实时及定时地按最优测试组补发剩余用户,提高通知消息点击率,助力运营提效。
分组对比详情可见:https://ask.dcloud.net.cn/article/37762
后效分析
后效分析,从推送任务、日期、用户三大数据维度,提供清晰明了的数据报表,全面分析应用的推送转化、趋势及用户活跃情况,并提供消息从下发-到达-展示-点击各个阶段的折损原因分析,针对不同参考指标灵活选择解决方案,提高推送消息的转化率。主要分为【数据报表】【折损原因分析】【大盘分析】三个模块。
【数据报表】个推数据报表主要分为3个模块:推送数据、日推送数、用户数据,从推送任务、日期、用户三大数据维度,全面分析应用的推送转化、趋势及用户活跃情况;更有关闭通知率、卸载用户数等特色数据分析。
【折损原因分析】针对单个推送任务,提供消息从下发-到达-展示-点击各阶段,消息未成功触达的折损原因分析,比如:卸载、关闭通知、推送超限、参数超限、参数无效等。快速诊断定位折损原因,针对性解决问题。
【大盘分析】针对单个推送任务,提供每个任务的消息到达率和点击率,与应用自身的平均值及个推大盘的均值做比较,高效评估该推送任务的转化水平,调整推送运营策略。
完整报表使用说明,详情可见:http://docs.getui.com/report/
广告投放
针对推送无法触达的用户,使用广告投放的方式进行消息补发,提升用户点击数量,进一步提升DAU。
开通此功能请联系:lieg@getui.com
推送PLUS1.0主要从内容智选、数据归因、广告补发三大维度发力,以【分组对比】、【后效分析】、【广告补发】等功能模块为抓手,全方位助力运营提升推送消息转化率。
【分组对比】通过对各测试组的到达-展示-点击数据的监测分析,筛选出最优文案/人群,并支持实时及定时地按最优测试组补发剩余用户,提高通知消息点击率,助力运营提效。
【后效分析】从推送任务、日期、用户三大数据维度,提供清晰明了的数据报表,全面分析应用的推送转化、趋势及用户活跃情况,并提供消息从下发-到达-展示-点击各个阶段的折损原因分析,针对不同参考指标灵活选择解决方案,提高推送消息的转化率。
【广告投放】针对推送无法触达的用户,使用广告投放的方式进行消息补发,提升用户点击数量,进一步提升DAU。
分组对比
分组测试功能支持在Android及iOS全平台,设置2-5组测试组,“对比通知文案”或“对比用户群体”,通过对各测试组的到达、展示、点击数据的监测分析,筛选出最优文案/人群,并支持实时及定时地按最优测试组补发剩余用户,提高通知消息点击率,助力运营提效。
分组对比详情可见:https://ask.dcloud.net.cn/article/37762
后效分析
后效分析,从推送任务、日期、用户三大数据维度,提供清晰明了的数据报表,全面分析应用的推送转化、趋势及用户活跃情况,并提供消息从下发-到达-展示-点击各个阶段的折损原因分析,针对不同参考指标灵活选择解决方案,提高推送消息的转化率。主要分为【数据报表】【折损原因分析】【大盘分析】三个模块。
【数据报表】个推数据报表主要分为3个模块:推送数据、日推送数、用户数据,从推送任务、日期、用户三大数据维度,全面分析应用的推送转化、趋势及用户活跃情况;更有关闭通知率、卸载用户数等特色数据分析。
【折损原因分析】针对单个推送任务,提供消息从下发-到达-展示-点击各阶段,消息未成功触达的折损原因分析,比如:卸载、关闭通知、推送超限、参数超限、参数无效等。快速诊断定位折损原因,针对性解决问题。
【大盘分析】针对单个推送任务,提供每个任务的消息到达率和点击率,与应用自身的平均值及个推大盘的均值做比较,高效评估该推送任务的转化水平,调整推送运营策略。
完整报表使用说明,详情可见:http://docs.getui.com/report/
广告投放
针对推送无法触达的用户,使用广告投放的方式进行消息补发,提升用户点击数量,进一步提升DAU。
开通此功能请联系:lieg@getui.com 收起阅读 »
插件源码授权版购买流程
插件源码授权版购买流程
购买,购买时需要确认基本信息
如果未经过e签宝认证则点击确认生成e签宝实名认证链接,跳转去e签宝实名认证
认证完成后,生成电子协议
点击跳转到e签宝签署电子协议
签署完成后
等待插件作者签署电子协议
协议签署完成,购买者会收到e签宝 短信/邮件 签署完成通知
用户可以在我购买的插件订单-未完成订单-待付款看到该订单或者直接打开该插件地址进行支付购买
购买完成,下载/导入HX
什么是e签宝
e签宝实名认证流程
e签宝电子协议签署流程
插件源码授权版购买流程
购买,购买时需要确认基本信息
如果未经过e签宝认证则点击确认生成e签宝实名认证链接,跳转去e签宝实名认证
认证完成后,生成电子协议
点击跳转到e签宝签署电子协议
签署完成后
等待插件作者签署电子协议
协议签署完成,购买者会收到e签宝 短信/邮件 签署完成通知
用户可以在我购买的插件订单-未完成订单-待付款看到该订单或者直接打开该插件地址进行支付购买
购买完成,下载/导入HX
什么是e签宝
e签宝实名认证流程
e签宝电子协议签署流程
收起阅读 »数据修改页面不刷新问题记录
一般来说页面和数据是双向绑定的,数据改变页面就会改变,可是有时候页面数据改变后,APP上页面不刷新,但微信小程序开发工具上又是可以的,一般这种情况是在数组使用时遇到的,记录几个遇到的情况和解决办法:
一、数组值修改,页面样式不刷新。解决:尝试用this.$set()方法,里面三个参数,第一个传这个数组,第二个传要修改的那项的下标,第三个传修改后的那项内容。下面会根据数组中的state状态加载不同的样式:
this.model.answer[j].state = !this.model.answer[j].state;
this.$set(this.model.answer, j, this.model.answer[j])
//页面根据变量加载不同样式
<view :class="item.state?'answer_yes':'answer_no'">{{item.name}}</view>
二、有一次我用this.$set()方法,数据改变后页面上的样式任然不刷新,奇怪的是,另一个页面一模一样的代码,刷新又正常,代码同上。询问了一圈,有老铁告诉我可能是数据太深了,然后我试着将answer数据从model中提取出来,新建一个数组来绑定页面:
this.model.answer[j].state = !this.model.answer[j].state;
this.$set(this.model.answer, j, this.model.answer[j])
//在上面的基础上添加下面这种操作,把页面上绑定的数组换成current_answer,测试时把上面一句注释竟然又失效了
this.current_answer = this.model.answer
最后就正常了,坑啊。。。。
三、还有一种情况是定义的全局变量,如果页面绑定的是定义在其他文件下的全局变量,变量修改的时候,页面也不会刷新,这种情况就在当前页面再定义一个变量,这个变量在页面加载的时候接收全局变量的值,然后页面绑定这个变量就好了。
一般来说页面和数据是双向绑定的,数据改变页面就会改变,可是有时候页面数据改变后,APP上页面不刷新,但微信小程序开发工具上又是可以的,一般这种情况是在数组使用时遇到的,记录几个遇到的情况和解决办法:
一、数组值修改,页面样式不刷新。解决:尝试用this.$set()方法,里面三个参数,第一个传这个数组,第二个传要修改的那项的下标,第三个传修改后的那项内容。下面会根据数组中的state状态加载不同的样式:
this.model.answer[j].state = !this.model.answer[j].state;
this.$set(this.model.answer, j, this.model.answer[j])
//页面根据变量加载不同样式
<view :class="item.state?'answer_yes':'answer_no'">{{item.name}}</view>
二、有一次我用this.$set()方法,数据改变后页面上的样式任然不刷新,奇怪的是,另一个页面一模一样的代码,刷新又正常,代码同上。询问了一圈,有老铁告诉我可能是数据太深了,然后我试着将answer数据从model中提取出来,新建一个数组来绑定页面:
this.model.answer[j].state = !this.model.answer[j].state;
this.$set(this.model.answer, j, this.model.answer[j])
//在上面的基础上添加下面这种操作,把页面上绑定的数组换成current_answer,测试时把上面一句注释竟然又失效了
this.current_answer = this.model.answer
最后就正常了,坑啊。。。。
三、还有一种情况是定义的全局变量,如果页面绑定的是定义在其他文件下的全局变量,变量修改的时候,页面也不会刷新,这种情况就在当前页面再定义一个变量,这个变量在页面加载的时候接收全局变量的值,然后页面绑定这个变量就好了。













