微信小程序事件转化

微信小程序App和Page的事件属性转化规则#

APM设计的内置事件名与微信小程序生命周期函数对照表#

微信小程序文档:App Page

事件名生命周期/回调说明
$mp_app_initiatedApp.onLaunch小程序初始化(冷启动),小程序进程被杀死,重新打开时会触发
$mp_app_openedApp.onShow打开小程序(后台进入前台)
$mp_app_closedApp.onHide离开小程序,点击小程序右上角退出按钮、微信进入后台、进入小程序关于页面、手机锁屏、小程序进程被杀死时
无(暂时不设计)App.onError错误监听函数
无(暂时不设计)App.onPageNotFound页面不存在监听函数
无(暂时不设计)App.onUnhandledRejection未处理的 Promise 拒绝事件监听函数
无(暂时不设计)App.onThemeChange监听系统主题变化
$mp_page_openedPage.onLoad加载小程序页面
$mp_page_visitedPage.onShow显示小程序页面
$mp_page_closedPage.onHide卸载小程序页面
$mp_page_leftPage.onUnload隐藏小程序页面
无(暂时不设计)Page.onPullDownRefresh监听用户下拉动作
无(暂时不设计)Page.onReachBottom页面上拉触底事件的处理函数
$mp_page_sharedPage.onShareAppMessage分享小程序
$mp_page_shared_timelinePage.onShareTimeline用户点击右上角转发到朋友圈
$mp_page_added_favoritePage.onAddToFavorites用户点击右上角收藏
无(暂时不设计)Page.onPageScroll页面滚动触发事件的处理函数
无(暂时不设计)Page.onResize页面尺寸改变时触发,详见 响应显示区域变化
无(暂时不设计)Page.onTabItemTap当前是 tab 页时,点击 tab 时触发
$mp_page_opened_from_share从分享打开小程序

1. $mp_app_initiated#

$mp_app_initiated是App.onLaunch产生时使用的内置事件名。它需要如下属性:

1. $sdk_version 基础库版本,通过wx.getSystemInfo获取
2. $os 操作系统,通过wx.getSystemInfo获取
3. $platform 平台,通过wx.getSystemInfo获取
4. $ip 客户端IP
5. $brand 设备品牌,通过wx.getSystemInfo获取
6. $model 设备型号,通过wx.getSystemInfo获取
7. $screen_height 屏幕高度,通过wx.getSystemInfo获取
8. $screen_width 屏幕宽度,通过wx.getSystemInfo获取
9. $network_type 网络类型,通过wx.getNetworkType获取
10. $page_title 页面标题
11. $page_path 页面路径
12. $page_url 页面地址
13. $user_nickname 用户昵称
14. $scene 打开小程序的场景值
15. $utm_source 广告渠道来源
16. $utm_campaign 广告渠道活动名
17. $utm_content 广告渠道内容
18. $utm_medium 广告渠道媒介
19. $utm_term 广告渠道关键字

2. $mp_app_opened#

$mp_app_opened是App.onShow产生时使用的内置事件名。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $user_nickname
14. $scene
15. $utm_source
16. $utm_campaign
17. $utm_content
18. $utm_medium
19. $utm_term

3. $mp_app_closed#

$mp_app_closed是App.onHide产生时使用的内置事件名。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $user_nickname
14. $scene
15. $utm_source
16. $utm_campaign
17. $utm_content
18. $utm_medium
19. $utm_term

6. $mp_page_opened#

$mp_page_opened是Page.onLoad产生时使用的内置事件名。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $user_nickname
14. $scene
15. $utm_source
16. $utm_campaign
17. $utm_content
18. $utm_medium
19. $utm_term
20. $sharer_uuid 分享者的UUID

7. $mp_page_visited#

$mp_page_visited是Page.onShow产生时使用的内置事件名。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $page_referer
14. $user_nickname
15. $scene
16. $utm_source
17. $utm_campaign
18. $utm_content
19. $utm_medium
20. $utm_term
21. $battery_power 设备电量
22. $is_charging 是否正在充电中

8. $mp_page_closed#

$mp_page_closed是Page.onHide产生时使用的内置事件名。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $user_nickname
14. $scene
15. $utm_source
16. $utm_campaign
17. $utm_content
18. $utm_medium
19. $utm_term

9. $mp_page_left#

$mp_page_left是Page.onUnload产生时使用的内置事件名。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $user_nickname
14. $scene
15. $utm_source
16. $utm_campaign
17. $utm_content
18. $utm_medium
19. $utm_term

10. $mp_page_shared#

$mp_page_shared是Page.onShareAppMessage产生时使用的内置事件名。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $user_nickname
14. $scene
15. $utm_source
16. $utm_campaign
17. $utm_content
18. $utm_medium
19. $utm_term
20. $sharer_uuid

11. $mp_page_shared_timeline#

$mp_page_shared_timeline是Page.onShareTimeline产生时使用的内置事件名。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $user_nickname
14. $scene
15. $utm_source
16. $utm_campaign
17. $utm_content
18. $utm_medium
19. $utm_term
20. $sharer_uuid

12. $mp_page_added_favorite#

$mp_page_added_favorite是Page.onAddToFavorites产生时使用的内置事件名。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $user_nickname
14. $scene
15. $utm_source
16. $utm_campaign
17. $utm_content
18. $utm_medium
19. $utm_term

13. $mp_page_opened_from_share#

$mp_page_opened_from_share是用户从分享的小程序卡片打开小程序页面。它需要如下属性:

1. $sdk_version
2. $os
3. $platform
4. $ip
5. $brand
6. $model
7. $screen_height
8. $screen_width
9. $network_type
10. $page_title
11. $page_path
12. $page_url
13. $user_nickname
14. $scene
15. $utm_source
16. $utm_campaign
17. $utm_content
18. $utm_medium
19. $utm_term
20. $sharer_uuid

品牌旧数据转化处理#

eventType = 1 App生命周期事件
eventType = 2 Page生命周期事件
eventType = 3 WXML组件事件
eventType = 4 wx对象内API(内置API)调用追踪事件
eventType = 5 小程序开发者通过JSSDK提供的API setEvent 自定义的事件

处理逻辑:App生命周期事件和Page生命周期事件#

处理逻辑:$page_url的参数#

例子
$mp_page_visited(Page.onShow)事件里有的属性$page_url的值是pages/index/index?curUserKey=aup1612326984856&appShare=1&openId=oGFMu5b-F8nhf3FLLaHcI0z_SQ_g&shareTime=1612456286405&sourceunionid=oirId1RcamJoKolqgAA9KLSQkLg0
生成属性名及属性值
url__curUserKey=aup1612326984856
url__appShare=1
url__openId=oGFMu5b-F8nhf3FLLaHcI0z_SQ_g
url__shareTime=1612456286405
url__sourceunionid=oirId1RcamJoKolqgAA9KLSQkLg0

处理 eventType = 3 WXML组件事件#

  • 在 APM CEV添加一个事件。事件名:wxml_event(显示名字:WXML事件),有一个属性名为:data-p_event_name(text)
  • 事件名:wxmlevent(显示名字:WXML事件),有一个属性名为:data-p_event_name,值是对应的事件名,例如:ArchivesCenterBadgeF_ButtonClickF_ViewBadgeF锋芒初露_3F_20200622091。

处理 eventType = 5 小程序开发者通过JSSDK提供的API setEvent 自定义的事件#

  • 生成需要处理的事件列表,因为我们需要把事件列表导入APM CEV;只需要事件,不需要属性。
  • 事件名不需要更改
  • 事件名字不符合APM要求的事件无需转化,直接丢弃。例如事件名字有空格,有特殊符号,有中文,如下面的例子。
例子:
ArchivesCenterCourseChestF_ButtonClickF_LikeF_6 da sai shi 1 ci pan dian , guo ji ga fei da sai le jie yi xiaF_20200622095
ArchivesCenterBadgeF_ButtonClickF_ViewBadgeF_锋芒初露_3F_20200622091
ArchivesCenterCourseChestF_ButtonClickF_LikeF_ga fei , shi jie shang zui zao de “ da li wan ”F_20200622095
  • 下面的事件无需转化
touchstart
touchmove
touchcancel
touchend
tap
longpress
longtap
transitionend
animationstart
animationiteration
animationend
touchforcechange

处理 eventType = 4 wx对象内API(内置API)调用追踪事件#

  • 只处理下面三个API,其它内置API不需要处理。
  • wx.getSystemInfo:把它的值分解为App和Page生命周期事件的属性
  • wx.getNetworkType:它只有一个值,设为属性$network_type,这个属性是App和Page生命周期事件的属性
  • wx.getBatteryInfo:它有两个值,设为属性$battery_power和$is_charging,这两个属性是$mp_page_visited事件的属性

目前MP系统里的数据例子#

appOnError
MiniProgramError
Cannot read property 'goods_number' of undefined
TypeError: Cannot read property 'goods_number' of undefined
at success (https://usr/app-service.js:13001:15043)
at Function.i. (https://lib/WASubContext.js:2:2042434)
at
at https://lib/WASubContext.js:2:119698
at p (https://lib/WASubContext.js:2:489729)
at Function. (https://lib/WASubContext.js:2:771078)
at
at https://lib/WASubContext.js:2:119698
at https://lib/WASubContext.js:2:710520
at Set.forEach ()
-------------------
getMenuButtonBoundingClientRect
API
wx.getMenuButtonBoundingClientRect
Results
{"top":39,"left":265,"bottom":68,"width":87,"right":352,"height":29}

新的APM MP JSSDK#

issue: https://github.com/catalyst8/Panmeta_Issues/issues/3176