HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

招uniapp兼职4000-5000/月。每周工作5天

招前端兼职,月薪4000-5000 。 一周工作5天。要求至少一年半以上uniapp开发经验,熟悉Nvue 微信联系xiaoxuetong888

招前端兼职,月薪4000-5000 。 一周工作5天。要求至少一年半以上uniapp开发经验,熟悉Nvue 微信联系xiaoxuetong888

个推消息推送SDK之“故障排查”功能解析,快速排查推送异常情况

推送 消息推送 个推SDK

为帮助开发者更好地使用个推消息推送产品,我们梳理了个推消息推送产品的核心功能、典型应用场景,并提供实战案例作为参考,希望能够为大家找到提升推送效率的最佳路径!

本文为大家介绍个推消息推送的【故障排查】功能,欢迎大家阅读收藏!

故障排查

支持查询CID状态及绑定的devicetoken等信息,也支持单推推送测试全链路查询,帮助研发进行消息推送测试及问题排查。

核心价值:帮助推送测试问题排查

在集成过程中进行单推测试,可推送通知和透传消息,并查询推送路径排查消息未成功送达的原因,同时检测当前应用下的CID是否在线、包名、devicetoken等信息。

典型应用场景

1、推送测试:在通知消息和透传消息推送过程中,通过CID推送测试查询消息推送路径,排查消息是否成功送达以及消息未送达原因。

2、设备状态查询:通过【故障排查】功能检测当前应用下的CID是否在线、包名、devicetoken、通知栏开关、机型等信息,通过这些信息查询设备状态,排查消息未成功送达的原因。比如:信息显示通知栏开关为关闭状态,导致消息无法在通知栏展示,需要打开通知栏才可接收到消息。

实战案例

某工具类APP在给用户推送重要消息时,发现消息到达率较低,为了提升消息推送达到率,该APP运营通过【故障排查】功能查询设备通知栏状态,针对关闭通知栏的用户引导其打开APP通知栏提醒,确保重要消息的有效到达。

使用方式

1、登录个推开发者中心,点击个推消息推送-选择应用-配置管理-故障排查功能。

2、设备状态查询:在状态查询功能模块,输入CID即可一键检测设备状态。

3、推送测试:在推送测试功能模块,输入CID即可检测消息推送状态。 以上如有疑问,可添加企业微信咨询【故障排查】功能。

以上如有疑问,可添加企业微信咨询【故障排查】功能。

继续阅读 »

为帮助开发者更好地使用个推消息推送产品,我们梳理了个推消息推送产品的核心功能、典型应用场景,并提供实战案例作为参考,希望能够为大家找到提升推送效率的最佳路径!

本文为大家介绍个推消息推送的【故障排查】功能,欢迎大家阅读收藏!

故障排查

支持查询CID状态及绑定的devicetoken等信息,也支持单推推送测试全链路查询,帮助研发进行消息推送测试及问题排查。

核心价值:帮助推送测试问题排查

在集成过程中进行单推测试,可推送通知和透传消息,并查询推送路径排查消息未成功送达的原因,同时检测当前应用下的CID是否在线、包名、devicetoken等信息。

典型应用场景

1、推送测试:在通知消息和透传消息推送过程中,通过CID推送测试查询消息推送路径,排查消息是否成功送达以及消息未送达原因。

2、设备状态查询:通过【故障排查】功能检测当前应用下的CID是否在线、包名、devicetoken、通知栏开关、机型等信息,通过这些信息查询设备状态,排查消息未成功送达的原因。比如:信息显示通知栏开关为关闭状态,导致消息无法在通知栏展示,需要打开通知栏才可接收到消息。

实战案例

某工具类APP在给用户推送重要消息时,发现消息到达率较低,为了提升消息推送达到率,该APP运营通过【故障排查】功能查询设备通知栏状态,针对关闭通知栏的用户引导其打开APP通知栏提醒,确保重要消息的有效到达。

使用方式

1、登录个推开发者中心,点击个推消息推送-选择应用-配置管理-故障排查功能。

2、设备状态查询:在状态查询功能模块,输入CID即可一键检测设备状态。

3、推送测试:在推送测试功能模块,输入CID即可检测消息推送状态。 以上如有疑问,可添加企业微信咨询【故障排查】功能。

以上如有疑问,可添加企业微信咨询【故障排查】功能。

收起阅读 »

个推消息推送之“标签设置”,打通应用标签实现精细化运营

推送 消息推送 个推SDK

为帮助开发者更好地使用个推消息推送产品,我们梳理了个推消息推送产品的核心功能、典型应用场景,并提供实战案例作为参考,希望能够为大家找到提升推送效率的最佳路径!

本文为大家介绍个推消息推送的【标签设置】功能,欢迎大家阅读收藏!

标签设置
即单个设备单日设置标签的次数和个数。

核心价值:实现精细化标签推送

典型应用场景

将应用自有的用户标签绑定到个推系统,方便下发消息时进行标签圈选。例如电商类APP可直接圈选2个标签“女”“爱化妆”,将美妆类消息推送给女性用户。

实战案例

某阅读类APP运营通过该应用类标签圈选具有一定兴趣偏好的用户群,并推送该用户群感兴趣的内容来提升消息点击率。例如针对“教育”“游戏”等标签的用户推送该兴趣标签类别的书单。该APP研发通过个推接口将APP内的用户兴趣标签绑定在个推系统中,方便该运营通过兴趣标签直接圈选推送目标用户进行消息下发。该APP运营通过兴趣标签精细化推送书单,整体消息推送点击率提升了43.2%。

开通和使用方式

1、添加个推企业微信,申请升级【标签设置】VIP功能。

2、设备标签设置规则

①单个CID(即单个设备,CID是个推SDK对用户设备的唯一标识号),最多可设置100个标签,单个标签长度最大为32字符,标签总长度为512个字符。

②单设备标签设置为覆盖操作,会删除该设备历史绑定的所有标签。

③服务端和客户端都可以设置。

3、应用标签查看:登录个推开发者中心,点击个推消息推送-选择应用-配置管理-应用标签,搜索标签名称。

4、应用标签使用:创建推送-通知消息-目标选择-标签用户,选择应用标签中的标签名称即可针对该应用标签人群推送消息。

如果您对标签设置功能感兴趣,欢迎添加企业微信二维码回复【标签设置】联系我们,感谢您对个推的持续关注。

继续阅读 »

为帮助开发者更好地使用个推消息推送产品,我们梳理了个推消息推送产品的核心功能、典型应用场景,并提供实战案例作为参考,希望能够为大家找到提升推送效率的最佳路径!

本文为大家介绍个推消息推送的【标签设置】功能,欢迎大家阅读收藏!

标签设置
即单个设备单日设置标签的次数和个数。

核心价值:实现精细化标签推送

典型应用场景

将应用自有的用户标签绑定到个推系统,方便下发消息时进行标签圈选。例如电商类APP可直接圈选2个标签“女”“爱化妆”,将美妆类消息推送给女性用户。

实战案例

某阅读类APP运营通过该应用类标签圈选具有一定兴趣偏好的用户群,并推送该用户群感兴趣的内容来提升消息点击率。例如针对“教育”“游戏”等标签的用户推送该兴趣标签类别的书单。该APP研发通过个推接口将APP内的用户兴趣标签绑定在个推系统中,方便该运营通过兴趣标签直接圈选推送目标用户进行消息下发。该APP运营通过兴趣标签精细化推送书单,整体消息推送点击率提升了43.2%。

开通和使用方式

1、添加个推企业微信,申请升级【标签设置】VIP功能。

2、设备标签设置规则

①单个CID(即单个设备,CID是个推SDK对用户设备的唯一标识号),最多可设置100个标签,单个标签长度最大为32字符,标签总长度为512个字符。

②单设备标签设置为覆盖操作,会删除该设备历史绑定的所有标签。

③服务端和客户端都可以设置。

3、应用标签查看:登录个推开发者中心,点击个推消息推送-选择应用-配置管理-应用标签,搜索标签名称。

4、应用标签使用:创建推送-通知消息-目标选择-标签用户,选择应用标签中的标签名称即可针对该应用标签人群推送消息。

如果您对标签设置功能感兴趣,欢迎添加企业微信二维码回复【标签设置】联系我们,感谢您对个推的持续关注。

收起阅读 »

未配置appkey或者配置错误

apk

  1. 项目src/main/assets/data/dcloud_control.xml里面的appid和开发者中心的appid一致
  2. 项目的build.gradle里面的applicationId和开发者中心的 Android 包名一致
  3. 项目的证书签名SHA1和开发者中心的Android 证书签名SHA1一致
  4. assets子目录改成appid
  5. src/main/assets/apps/xxx/www/manifest.json里面的id和开发者中心的appid一致(xxx表示appid)

最容易填错的是签名SHA1,一定要确保开发者中心配置的值和安装的apk的签名的值一致,找不到错误的情况下可以试试查看apk安装包的签名进行二次对比确认

其他参考官方指导

继续阅读 »

  1. 项目src/main/assets/data/dcloud_control.xml里面的appid和开发者中心的appid一致
  2. 项目的build.gradle里面的applicationId和开发者中心的 Android 包名一致
  3. 项目的证书签名SHA1和开发者中心的Android 证书签名SHA1一致
  4. assets子目录改成appid
  5. src/main/assets/apps/xxx/www/manifest.json里面的id和开发者中心的appid一致(xxx表示appid)

最容易填错的是签名SHA1,一定要确保开发者中心配置的值和安装的apk的签名的值一致,找不到错误的情况下可以试试查看apk安装包的签名进行二次对比确认

其他参考官方指导

收起阅读 »

VIP功能免费使用 | 个推消息推送SDK之“推送信息回调数据”,帮助快速查询设备是否收到消息

推送 消息推送

为帮助开发者更好地使用个推消息推送产品,我们梳理了个推消息推送产品的核心功能、典型应用场景,并提供实战案例作为参考,希望能够为大家找到提升推送效率的最佳路径!

本文为大家介绍个推消息推送的【推送信息回调数据】功能,欢迎大家阅读收藏!

推送信息回调数据

将客户端feedback回执回传到APP自有服务器,帮助APP自主统计消息到达的数据明细,明确终端设备是否收到了消息。

核心价值:查询设备是否收到消息

将客户端是否收到消息的结果日志回传至自有服务器,帮助客户快速统计消息到达的情况。

典型应用场景

在较多单推场景下,通过推送信息回调数据功能,将客户端的信息到达情况回执回传到自身服务器,客户可以自主快速统计单推消息到达情况。

实战案例

某银行类APP在用户动账交易的时候,比如某公司账户发工资时,需要全量通知到该公司账户下的所有账户,通过【推送信息回调数据】可以快速查到哪些设备收到信息,哪些设备没有收到信息,从而可针对没有收到信息的设备通过短信、微信等多种方式进行消息全面触达。

开通方式

1、添加个推企业微信,申请开通【推送信息回调数据】VIP功能。

2、参考“ 个推消息回执回调操作步骤与使用文档”配置厂商和个推回执。

3、通过企业微信提供个推APPID和回执URL地址,待技术支持完成配置后,推送信息回调数据会自动发送至URL地址。

如果您对推送信息回调数据功能感兴趣,欢迎添加企业微信二维码回复【开通推送信息回调数据】联系我们,感谢您对个推的持续关注。

继续阅读 »

为帮助开发者更好地使用个推消息推送产品,我们梳理了个推消息推送产品的核心功能、典型应用场景,并提供实战案例作为参考,希望能够为大家找到提升推送效率的最佳路径!

本文为大家介绍个推消息推送的【推送信息回调数据】功能,欢迎大家阅读收藏!

推送信息回调数据

将客户端feedback回执回传到APP自有服务器,帮助APP自主统计消息到达的数据明细,明确终端设备是否收到了消息。

核心价值:查询设备是否收到消息

将客户端是否收到消息的结果日志回传至自有服务器,帮助客户快速统计消息到达的情况。

典型应用场景

在较多单推场景下,通过推送信息回调数据功能,将客户端的信息到达情况回执回传到自身服务器,客户可以自主快速统计单推消息到达情况。

实战案例

某银行类APP在用户动账交易的时候,比如某公司账户发工资时,需要全量通知到该公司账户下的所有账户,通过【推送信息回调数据】可以快速查到哪些设备收到信息,哪些设备没有收到信息,从而可针对没有收到信息的设备通过短信、微信等多种方式进行消息全面触达。

开通方式

1、添加个推企业微信,申请开通【推送信息回调数据】VIP功能。

2、参考“ 个推消息回执回调操作步骤与使用文档”配置厂商和个推回执。

3、通过企业微信提供个推APPID和回执URL地址,待技术支持完成配置后,推送信息回调数据会自动发送至URL地址。

如果您对推送信息回调数据功能感兴趣,欢迎添加企业微信二维码回复【开通推送信息回调数据】联系我们,感谢您对个推的持续关注。

收起阅读 »

商城类找长期全职uniapp外包

uniapp

提供设计稿,蓝湖标注切图,api文档
要求非常熟练uniapp vue3 nvue,发布app(android/ios)+h5(手机浏览器/微信公众号)+各个端口小程序+快应用
熟悉websocket和push
熟悉官方文档,对各种老坑(白屏、抖动、瀑布流、大量图片、渲染、兼容等)有解决经验
请留言或私信您的联系方式,需提供您的案例。小白以及二把刀勿扰,不要浪费彼此时间
长期合作

继续阅读 »

提供设计稿,蓝湖标注切图,api文档
要求非常熟练uniapp vue3 nvue,发布app(android/ios)+h5(手机浏览器/微信公众号)+各个端口小程序+快应用
熟悉websocket和push
熟悉官方文档,对各种老坑(白屏、抖动、瀑布流、大量图片、渲染、兼容等)有解决经验
请留言或私信您的联系方式,需提供您的案例。小白以及二把刀勿扰,不要浪费彼此时间
长期合作

收起阅读 »

Webview调试时 Chrome调起调试窗口

WebView调试

HBuilder 版本:3.3.10.20220124
Chrome 版本: 98.0.4758.102

app运行到Android 都正常,HBuilder的Webview视图显示也正常,在HBuilder的Webview视图下点击 Inspect 确实会唤起Chrome,但是Chrome并没有调起调试窗口,看上去没什么反应

我的解决办法,如下:

查看Chrome的调试配置,在Chrome地址栏输入:chrome://inspect/#devices

继续阅读 »

HBuilder 版本:3.3.10.20220124
Chrome 版本: 98.0.4758.102

app运行到Android 都正常,HBuilder的Webview视图显示也正常,在HBuilder的Webview视图下点击 Inspect 确实会唤起Chrome,但是Chrome并没有调起调试窗口,看上去没什么反应

我的解决办法,如下:

查看Chrome的调试配置,在Chrome地址栏输入:chrome://inspect/#devices

收起阅读 »

关于Uniapp踩坑记录

uniapp

1、写音频App,需要自己写audio原生插件,官方的audio各种问题,例如,IOS下OnPrev,OnNext事件失效等,slider问题,以及getBackgroundAudioManager失效的问题,真的是恶心惨了;

2、写视频App,插件市场的视频插件都不完善,坑死我了;

3、nvue下的高德地图也是一抹多问题,脑壳贼疼;

4、感觉uniapp只能用来写简单的项目,用来构建页面啥的,跟原生打交道的一些东西,感觉问题好大啊,没有原生开发能力的,用uniapp,感觉脑壳贼疼,那么问题来了,用uniapp就是因为没有原生能力,甚至是因为小微公司,不想请多端开发人员,IOS+android提高成本,所有使用uniapp,但是这么多BUG,导致了如果单独使用uniapp,是行不通的?,所以uniapp存在的意义是什么???

继续阅读 »

1、写音频App,需要自己写audio原生插件,官方的audio各种问题,例如,IOS下OnPrev,OnNext事件失效等,slider问题,以及getBackgroundAudioManager失效的问题,真的是恶心惨了;

2、写视频App,插件市场的视频插件都不完善,坑死我了;

3、nvue下的高德地图也是一抹多问题,脑壳贼疼;

4、感觉uniapp只能用来写简单的项目,用来构建页面啥的,跟原生打交道的一些东西,感觉问题好大啊,没有原生开发能力的,用uniapp,感觉脑壳贼疼,那么问题来了,用uniapp就是因为没有原生能力,甚至是因为小微公司,不想请多端开发人员,IOS+android提高成本,所有使用uniapp,但是这么多BUG,导致了如果单独使用uniapp,是行不通的?,所以uniapp存在的意义是什么???

收起阅读 »

`tailwindcss jit` 与各大框架的融合

Image

tailwindcss jit 与各大框架的融合

tailwindcss JIT 思想带入小程序开发吧!

书接上文 让小程序开发进入 tailwind jit 时代!

到今天为止已经,距离第一版已经发布了 19天了。

19 天内,在许多人的帮助和支持下,添加了许多的 feature 和修复了许多的 bug.

现在到 1.1.5 版本的发布 weapp-tailwindcss-webpack-plugin,已经不只是一个 webpack-plugin 了。接下来让我们大概看一下有哪些改进吧。

适配了更多的框架

原先设计的时候,主要是给 uni-appwebpack 打包版本设计的。随着群友和一些使用者的需求,陆陆续续添加了:

  • uni-app-vite
  • taro (react/vue2/3)
  • remax (react)
  • rax (react)

框架支持。而且也补充了更多的 使用方式示例项目.

<h3 id="uni-app">uni-app (vue2/3)</h3>

Demo 项目

<h3 id="uni-app-vite">uni-app for vite (vue3)</h3>

Demo 项目

<h3 id="taro">taro (React/vue2/3)</h3>

React Demo 项目

vue2 Demo 项目

vue3 Demo 项目

<h3 id="remax">remax (react)</h3>

Demo 项目

<h3 id="rax">rax (react)</h3>

Demo 项目

当然,未来肯定是要支持更多的框架以及原生的写法的。

毕竟 tailwindcss 这种自动生成 css 的框架,是一种非常优秀的思想。非常的灵活多变,是非常值得推广的,能够精炼的对 css 进行提炼,自由的组合。

这让我想起了 js函数式编程,用函数来生成函数。而且 tailwindcss 配合上最新的 dart sass 开发体验非常好。

现在的 sass 也提倡编程 @use 'sass:meta' as M; 这类的,大大提升了样式的可编程性。

简单的原理

由于小程序的 class 不支持除了 _- 以外的特殊符号和诸多选择器,而 tailwindcss jit 又是特殊符号一大堆。

于是在不改变 tailwindcss 默认 jit engine 的情况下,我们自然而然就想到了,同时去 修改(mangle) 对应的 xxml,xxss,jsx这类的生成的文件。将他们进行 对照配合 修改,那么就能兼容小程序平台了,毕竟所见不为所得,用户在编写的时候,还是按照 web 的习惯去写 tailwindcss,我们编写的 webpack/vite/postcss plugin 这类的,把这些都处理掉就完事了。

比较好改一点的还是 uni-app,毕竟生成的 wxmlwxss 文件还比较可控。那种类 react 框架,wxml 都引入一个 base.wxml 然后根据那种 render function 来渲染的,就比较难了。目前个人的解法,也仅仅只能做到解析 AST,然后遇到某些关键词,比如 class/className/staticClass后,进行语句匹配,替换其中的字符串字面量,语句结束停止匹配并继续向下 walk ast

当然在编写过程中,也发现这种和各个框架是耦合的,因为自己并没有去详细了解各个框架的生命周期和源码。导致目前都是针对打包后的结果进行解析修改。这点做的不是特别好,应该各个框架内,都有一个切面,可以把处理方法注入进去的。

省的在生成产物后,还要去解析 AST 进行修改,这样也十分的损耗性能。

以上就是我对这些天的感悟了。功能吧能用,达不到完美,毕竟还有 多线程缓存 这种玩意要玩耍呢(笑)。

Bugs & Issues

如果在使用过程中遇到 Bugs 或者提出问题,欢迎提交到此处,笔者会尽快复现并修改

继续阅读 »

Image

tailwindcss jit 与各大框架的融合

tailwindcss JIT 思想带入小程序开发吧!

书接上文 让小程序开发进入 tailwind jit 时代!

到今天为止已经,距离第一版已经发布了 19天了。

19 天内,在许多人的帮助和支持下,添加了许多的 feature 和修复了许多的 bug.

现在到 1.1.5 版本的发布 weapp-tailwindcss-webpack-plugin,已经不只是一个 webpack-plugin 了。接下来让我们大概看一下有哪些改进吧。

适配了更多的框架

原先设计的时候,主要是给 uni-appwebpack 打包版本设计的。随着群友和一些使用者的需求,陆陆续续添加了:

  • uni-app-vite
  • taro (react/vue2/3)
  • remax (react)
  • rax (react)

框架支持。而且也补充了更多的 使用方式示例项目.

<h3 id="uni-app">uni-app (vue2/3)</h3>

Demo 项目

<h3 id="uni-app-vite">uni-app for vite (vue3)</h3>

Demo 项目

<h3 id="taro">taro (React/vue2/3)</h3>

React Demo 项目

vue2 Demo 项目

vue3 Demo 项目

<h3 id="remax">remax (react)</h3>

Demo 项目

<h3 id="rax">rax (react)</h3>

Demo 项目

当然,未来肯定是要支持更多的框架以及原生的写法的。

毕竟 tailwindcss 这种自动生成 css 的框架,是一种非常优秀的思想。非常的灵活多变,是非常值得推广的,能够精炼的对 css 进行提炼,自由的组合。

这让我想起了 js函数式编程,用函数来生成函数。而且 tailwindcss 配合上最新的 dart sass 开发体验非常好。

现在的 sass 也提倡编程 @use 'sass:meta' as M; 这类的,大大提升了样式的可编程性。

简单的原理

由于小程序的 class 不支持除了 _- 以外的特殊符号和诸多选择器,而 tailwindcss jit 又是特殊符号一大堆。

于是在不改变 tailwindcss 默认 jit engine 的情况下,我们自然而然就想到了,同时去 修改(mangle) 对应的 xxml,xxss,jsx这类的生成的文件。将他们进行 对照配合 修改,那么就能兼容小程序平台了,毕竟所见不为所得,用户在编写的时候,还是按照 web 的习惯去写 tailwindcss,我们编写的 webpack/vite/postcss plugin 这类的,把这些都处理掉就完事了。

比较好改一点的还是 uni-app,毕竟生成的 wxmlwxss 文件还比较可控。那种类 react 框架,wxml 都引入一个 base.wxml 然后根据那种 render function 来渲染的,就比较难了。目前个人的解法,也仅仅只能做到解析 AST,然后遇到某些关键词,比如 class/className/staticClass后,进行语句匹配,替换其中的字符串字面量,语句结束停止匹配并继续向下 walk ast

当然在编写过程中,也发现这种和各个框架是耦合的,因为自己并没有去详细了解各个框架的生命周期和源码。导致目前都是针对打包后的结果进行解析修改。这点做的不是特别好,应该各个框架内,都有一个切面,可以把处理方法注入进去的。

省的在生成产物后,还要去解析 AST 进行修改,这样也十分的损耗性能。

以上就是我对这些天的感悟了。功能吧能用,达不到完美,毕竟还有 多线程缓存 这种玩意要玩耍呢(笑)。

Bugs & Issues

如果在使用过程中遇到 Bugs 或者提出问题,欢迎提交到此处,笔者会尽快复现并修改

收起阅读 »

uniapp集成极光推送+ios离线打包+原生插件

极光推送 uniapp离线打包

本人才踩完坑,写了博客 希望对你有所帮助。
业务需求:uniapp集成极光推送+ios离线打包 使用原生插件。网上没有找到特别清楚的文章,都差点劲。对于小白来说 我写的应该能帮助到
uniapp集成极光推送+离线打包ios+官方原生插件

继续阅读 »

本人才踩完坑,写了博客 希望对你有所帮助。
业务需求:uniapp集成极光推送+ios离线打包 使用原生插件。网上没有找到特别清楚的文章,都差点劲。对于小白来说 我写的应该能帮助到
uniapp集成极光推送+离线打包ios+官方原生插件

收起阅读 »

安卓透传问题 receive事件接受不到信息

unipush

先复现一下应用场景
需要在页面当中,查询某种状态,刷新查询后,在页面等待过程中,如果有成功状态,会透传消息过来,直接显示同步内容成功。。
但是在苹果手机上面就可以在receive事件中去拿到传递来的msg内容,小米测试机却不可以,后来在unipush常见问题中找到了答案,按照里面所标注的:

点击(click)事件不触发、(receive)事件不触发/监听不到。
离线点击不触发click事件,intent中要有dcloud要求的参数格式要求S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;否则dcloud识别不到,无法进入对应回调
在线透传不触发receive事件,主要是安卓透传内容给了{title:"标题",content:"内容",payload:"自定义数据"}dcloud要求格式的透传内容,dcloud会默认处理展示通知栏通知,并且不会进入receive回调。
处理方法 自然就是更改 传入的key值

继续阅读 »

先复现一下应用场景
需要在页面当中,查询某种状态,刷新查询后,在页面等待过程中,如果有成功状态,会透传消息过来,直接显示同步内容成功。。
但是在苹果手机上面就可以在receive事件中去拿到传递来的msg内容,小米测试机却不可以,后来在unipush常见问题中找到了答案,按照里面所标注的:

点击(click)事件不触发、(receive)事件不触发/监听不到。
离线点击不触发click事件,intent中要有dcloud要求的参数格式要求S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;否则dcloud识别不到,无法进入对应回调
在线透传不触发receive事件,主要是安卓透传内容给了{title:"标题",content:"内容",payload:"自定义数据"}dcloud要求格式的透传内容,dcloud会默认处理展示通知栏通知,并且不会进入receive回调。
处理方法 自然就是更改 传入的key值

收起阅读 »

javaScript事件-----事件类型之触摸与手势事件

一、触摸事件
touchstart:当手指触摸屏幕时触发;即使已经有一个手指放在了屏幕上也会触发。
touchmove:当手指在屏幕上滑动时连续地触发。在这个世界发生期间,调用preventDefault()可以阻止滚动。
touchend:当手指在屏幕上移开时触发。
touchcancel:当系统停止跟踪触摸时触发。关于此事件的确切触发时间,文档中没有明确说明。
上面这几个事件都会冒泡,也都可以取消。虽然这些触摸事件没有在DOM规范中定义,但它们却是以兼容DOM的方式实现的。因此,每个触摸事件的event对象都提供了鼠标事件中常见的属性:bubbles,cancelable,view,clientX,clientY,screenX,screenY,detail,altKey,shiftKey,ctrlKey和metaKey。

除了常见的DOM属性外,触摸世界还包含下列三个用于跟踪触摸的属性。

touches:表示当前跟踪的触摸操作的Touch对象的数组。
targetTouches:特定于事件目标的Touch对象的数组。
changedTouches:表示字上次触摸以来发生了什么改变的Touch对象的数组。
每个Touch对象包含下列属性:

clientX:触摸目标在视口中的x坐标。
clientY:触摸目标在视口中的y坐标。
identifier:标识触摸的唯一ID。
pageX:触摸目标在页面中的x坐标。
pageY:触摸目标在页面中的y坐标。
screenX:触摸目标在屏幕中的x坐标。
screenY:触摸目标在屏幕中的y坐标。
target:触摸的DOM节点目标。
使用这些属性可以跟踪用户对屏幕的触摸操作。

<div id="output"></div>
function handlerTouchEvent(event){  
    //只跟踪一次触摸  
    if(event.touches.length==1 || event.touches.length==0){//书上这里有错  
        var output=document.getElementById("output");  
        switch(event.type){  
            case "touchstart":  
                output.innerHTML="Touch started ( "+event.touches[0].clientX+", "+event.touches[0].clientY+")";  
                break;  
            case "touchend":  
                output.innerHTML+="<br/>Touch ended ("+event.changedTouches[0].clientX+", "+event.changedTouches[0].clientY+")";  
                break;  
            case "touchmove":  
                event.preventDefault(); //阻止滚动  
                output.innerHTML+="<br/>Touch moved ("+event.changedTouches[0].clientX+", "+event.changedTouches[0].clientY+")";  
        }  
    }  
}  

EventUtil.addHandler(document,"touchstart",handlerTouchEvent);  
EventUtil.addHandler(document,"touchend",handlerTouchEvent);  
EventUtil.addHandler(document,"touchmove",handlerTouchEvent);

以上代码会跟踪屏幕上发生的一次触摸操作。为简单起见,只会在有一次活动触摸操作的情况下输出信息。

当touchstart事件发生时,会将触摸的位置信息输出到<div>元素中。

当touchmove事件发生时,会取消其默认行为,阻止滚动(触摸移动的默认行为是滚动页面),然后输出触摸操作的变化信息。

而touched事件则会输出有关触摸操作的最终信息。

注意:在touched事件发生时,touches集合中就没有任何Touch对象了,因为不存在活动的触摸操作;此时,就必须转而使用changedTouches集合。

/当触发touchstart和touchmove事件的时候没有问题,程序能正确的进入 if 然后根据case执行对应的语句,但是当触发touchend事件的时候,event.touches.length已经等于0了,不能再进入if 中,也就不能执行case中的语句,所以触发touchend的时候永远不会执行程序。所以判断条件要加上 event.touches.length==0./

这些事件会在文档的所有元素上面触发,因而可以分别操作页面的不同部分。在触摸屏幕上的元素时,这些事件(包括鼠标事件) 发生的顺序如下:

touchstart
mouseover
mousemove(一次)
mousedown
mouseup
click
touched
桌面版Firefox 6+和Chrome也支持触摸事件。

2、手势事件
当两个手指触摸屏幕时就会产生手势,手势通常会改变显示项的大小,或者旋转显示项。有三个手势事件,如下:

gesturestart:当一个手指已经按在屏幕上而另一个手指又触摸屏幕时触发。
gesturechange:当触摸屏幕的任何一个手指的位置发生变化时触发。
gestureend:当任何一个手指从屏幕上移开时触发。
只有两个手指都触摸到事件的接收容器时才会触发这些事件。

在一个元素上设置事件处理程序,意味着两个手指必须同时位于该元素的范围之内,才能触发手势事件(这个元素就是目标)。

由于这些事件冒泡,所以讲事件处理程序放在文档上也可以处理所有手势事件。

此时,事件的目标就算两个手指都位于其范围内的那个元素。

触摸事件和手势事件关系:

每个手势事件的event对象都包含着标准的鼠标事件属性:bubbles,cancelable,view,clientX,clientY,screenX,screenY,detail,altKey,shiftKey,ctrlKey和metaKey。此外还有两个额外的属性:rotation和scale。

rotation属性:表示手指变化引起的旋转角度,负值表示逆时针旋转,正值表示顺时针旋转(该值从0开始)。
scale属性:表示两个手指间距离的变化情况(例如向内收缩会缩短距离);这个值从1开始,并随距离拉大而增长,随距离缩短而减小。
例子:

function handleGestureEvent(event){  
   var output=document.getElementById("output");  
    switch(event.type){  
         case "gesturestart":  
                output.innerHTML="Gesture started ( "+event.ratation+", scale"+event.scale+")";  
                break;  
            case "gestureend":  
                output.innerHTML+="<br/>Gesture ended ("+event.rotation+", scale"+event.scale+")";  
                break;  
            case "gesturechange":  
                event.preventDefault(); //阻止滚动  
                output.innerHTML+="<br/>Gesture changed ("+event.rotation+",scale "+event.scale+")";  
    }  
}  
EventUtil.addHandler(document,"gesturestart",handleGestureEvent);  
EventUtil.addHandler(document,"gestureend",handleGestureEvent);  
EventUtil.addHandler(document,"gesturechange",handleGestureEvent);
继续阅读 »

一、触摸事件
touchstart:当手指触摸屏幕时触发;即使已经有一个手指放在了屏幕上也会触发。
touchmove:当手指在屏幕上滑动时连续地触发。在这个世界发生期间,调用preventDefault()可以阻止滚动。
touchend:当手指在屏幕上移开时触发。
touchcancel:当系统停止跟踪触摸时触发。关于此事件的确切触发时间,文档中没有明确说明。
上面这几个事件都会冒泡,也都可以取消。虽然这些触摸事件没有在DOM规范中定义,但它们却是以兼容DOM的方式实现的。因此,每个触摸事件的event对象都提供了鼠标事件中常见的属性:bubbles,cancelable,view,clientX,clientY,screenX,screenY,detail,altKey,shiftKey,ctrlKey和metaKey。

除了常见的DOM属性外,触摸世界还包含下列三个用于跟踪触摸的属性。

touches:表示当前跟踪的触摸操作的Touch对象的数组。
targetTouches:特定于事件目标的Touch对象的数组。
changedTouches:表示字上次触摸以来发生了什么改变的Touch对象的数组。
每个Touch对象包含下列属性:

clientX:触摸目标在视口中的x坐标。
clientY:触摸目标在视口中的y坐标。
identifier:标识触摸的唯一ID。
pageX:触摸目标在页面中的x坐标。
pageY:触摸目标在页面中的y坐标。
screenX:触摸目标在屏幕中的x坐标。
screenY:触摸目标在屏幕中的y坐标。
target:触摸的DOM节点目标。
使用这些属性可以跟踪用户对屏幕的触摸操作。

<div id="output"></div>
function handlerTouchEvent(event){  
    //只跟踪一次触摸  
    if(event.touches.length==1 || event.touches.length==0){//书上这里有错  
        var output=document.getElementById("output");  
        switch(event.type){  
            case "touchstart":  
                output.innerHTML="Touch started ( "+event.touches[0].clientX+", "+event.touches[0].clientY+")";  
                break;  
            case "touchend":  
                output.innerHTML+="<br/>Touch ended ("+event.changedTouches[0].clientX+", "+event.changedTouches[0].clientY+")";  
                break;  
            case "touchmove":  
                event.preventDefault(); //阻止滚动  
                output.innerHTML+="<br/>Touch moved ("+event.changedTouches[0].clientX+", "+event.changedTouches[0].clientY+")";  
        }  
    }  
}  

EventUtil.addHandler(document,"touchstart",handlerTouchEvent);  
EventUtil.addHandler(document,"touchend",handlerTouchEvent);  
EventUtil.addHandler(document,"touchmove",handlerTouchEvent);

以上代码会跟踪屏幕上发生的一次触摸操作。为简单起见,只会在有一次活动触摸操作的情况下输出信息。

当touchstart事件发生时,会将触摸的位置信息输出到<div>元素中。

当touchmove事件发生时,会取消其默认行为,阻止滚动(触摸移动的默认行为是滚动页面),然后输出触摸操作的变化信息。

而touched事件则会输出有关触摸操作的最终信息。

注意:在touched事件发生时,touches集合中就没有任何Touch对象了,因为不存在活动的触摸操作;此时,就必须转而使用changedTouches集合。

/当触发touchstart和touchmove事件的时候没有问题,程序能正确的进入 if 然后根据case执行对应的语句,但是当触发touchend事件的时候,event.touches.length已经等于0了,不能再进入if 中,也就不能执行case中的语句,所以触发touchend的时候永远不会执行程序。所以判断条件要加上 event.touches.length==0./

这些事件会在文档的所有元素上面触发,因而可以分别操作页面的不同部分。在触摸屏幕上的元素时,这些事件(包括鼠标事件) 发生的顺序如下:

touchstart
mouseover
mousemove(一次)
mousedown
mouseup
click
touched
桌面版Firefox 6+和Chrome也支持触摸事件。

2、手势事件
当两个手指触摸屏幕时就会产生手势,手势通常会改变显示项的大小,或者旋转显示项。有三个手势事件,如下:

gesturestart:当一个手指已经按在屏幕上而另一个手指又触摸屏幕时触发。
gesturechange:当触摸屏幕的任何一个手指的位置发生变化时触发。
gestureend:当任何一个手指从屏幕上移开时触发。
只有两个手指都触摸到事件的接收容器时才会触发这些事件。

在一个元素上设置事件处理程序,意味着两个手指必须同时位于该元素的范围之内,才能触发手势事件(这个元素就是目标)。

由于这些事件冒泡,所以讲事件处理程序放在文档上也可以处理所有手势事件。

此时,事件的目标就算两个手指都位于其范围内的那个元素。

触摸事件和手势事件关系:

每个手势事件的event对象都包含着标准的鼠标事件属性:bubbles,cancelable,view,clientX,clientY,screenX,screenY,detail,altKey,shiftKey,ctrlKey和metaKey。此外还有两个额外的属性:rotation和scale。

rotation属性:表示手指变化引起的旋转角度,负值表示逆时针旋转,正值表示顺时针旋转(该值从0开始)。
scale属性:表示两个手指间距离的变化情况(例如向内收缩会缩短距离);这个值从1开始,并随距离拉大而增长,随距离缩短而减小。
例子:

function handleGestureEvent(event){  
   var output=document.getElementById("output");  
    switch(event.type){  
         case "gesturestart":  
                output.innerHTML="Gesture started ( "+event.ratation+", scale"+event.scale+")";  
                break;  
            case "gestureend":  
                output.innerHTML+="<br/>Gesture ended ("+event.rotation+", scale"+event.scale+")";  
                break;  
            case "gesturechange":  
                event.preventDefault(); //阻止滚动  
                output.innerHTML+="<br/>Gesture changed ("+event.rotation+",scale "+event.scale+")";  
    }  
}  
EventUtil.addHandler(document,"gesturestart",handleGestureEvent);  
EventUtil.addHandler(document,"gestureend",handleGestureEvent);  
EventUtil.addHandler(document,"gesturechange",handleGestureEvent);
收起阅读 »