1.0.7 • Published 1 year ago

nyzt_buriedset v1.0.7

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

问题

分离成包之后,php相关页面还是得额外维护 发布包的时候报 400 Bad Request - PUT https://registry.npmjs.org/nyzt_buriedSet - "nyzt_buriedSet" is invalid for new packages -- 不能包含大小写

埋点代码相关

如何增加一个新的埋点路径?

正常增加路径

首先在GlobalSetting中找到originNameMap, indexNameMap 然后在里面按顺序继续增加一条记录(最好是resultMap中也增加一条记录,全写1就得了,保不定后面又要复用)

增加一个广告位的点击路径

类似首页顶部icon那种,需要先输入 首页-找名医icon 再输入 广告 的 (结合起来就是一次点击输入路径 首页-找名医icon|广告) 在对广告点击指令传入对象时多传入一个path_name_obj,即可实现

// 例如:
  v-adclick="{ ...item, path_name_obj: {
    id: 'xxx',
    name: 'xxxxxx'
  }}"

在广告点击,广告曝光事件中如何增加新的属性?

正常情况

找到src/utils/utils.js文件中的transSendParams方法 在对应的事件下面增加新属性(当然你要在指令传入的时候就把你的新属性带上)

// 例如:
  v-adclick="{ ...item, attr: '新属性'}"

// transSendParams中
// 广告点击 
    case 'ad_click':
      send_params = {
        item_type: data.item_type || '',
        item_id: data.item_id || '',
        item_name: data.item_name || '',
        from_function_id: data.form_function_id || getUrlParam('form_function_id') || '',
        from_function_name: decodeURIComponent(data.form_function_name || getUrlParam('form_function_name') || ''),
        cur_function_id: 'AD',
        cur_function_name: '广告',
        location_id: data.location_id || data.locate_id || data.ad_location_id || data.locationId || data.locateId || data.adlocation_id,
        location_name: data.location_name || data.locationName || data.locate_name || data.locateName || '',
        bhv_pos: data.position,
        ad_id: data.ad_id || data.adId,
        ad_name: data.ad_name || data.adName,
        ad_img_url: data.ad_image || data.image || data.adImage,
        ad_target_url: data.url,
        serving_dep_name: data.serving_dep_name,
        serving_project_name: data.serving_project_name,
        serving_ill_name: data.serving_ill_name,
        ad_putting_mode: data.location_type,
        ev_name: 'ad_click',
        path_name_obj: data.path_name_obj,
        attr: data.attr // 新属性
      }
      send_params.is_ad = send_params.location_id ? 1 : 0
      break

异常情况--暂时没有发现,等待补充扩展

跟app交换数据中如何添加新属性?

正常情况

在src/utils/scUtils下找到concatAppParams方法 在baseParams中初始化的时候添加新属性 --> 这个是初始化属性 找到getAppSaParams方法 在query中的jsonStr对象里面添加新属性 --> 这个是获取app的 在compositionSaParams中里面的返回属性中要加上新属性 --> 这个是h5自身的 如果要对新增属性进行特殊处理 在遍历baseQuery(基础属性)的时候增加条件判断或者在最后返回总数据之前进行合并就行

// 例:
// 可以搜索advertNewDatas属性在哪里加了

跟小程序交换数据中如何添加新属性?

在src/utils/scUtils下找到HandleWechatMpParmas方法 在该方法中可以对小程序传过来的参数进行处理(一般是放入缓存,具体是放入sessionStorage还是localStorage) 找到transWechatMpParmas方法 ---> 给小程序传递的参数 在函数返回的对象里面添加新属性

新增事件需要上报埋点属性如何获得?

在src/utils/scUtils下找到getCommonBuryParams方法 可以直接获得与app或者小程序数据组合之后的数据或者自身h5的数据

如何获得from_page_name, from_page_id(来源页面名字, id)?

已添加来源页面路径和对应id与name的情况下

在src/utils/scUtils下找到getFromPageName, getFromPageId方法 即可获得

没有添加来源页面路径和对应id与name的情况下

在src/utils/scUtils下找到getPageNameFromUrl方法 按照分类通过给的模板添加新页面 页面对应的id与name,记得问产品要

// 例如:
// 1. 页面路径单指一个页面,不用通过额外参数区分
  const pageMap = {
    // 机构主页相关
    '/h5/register/unit/dep.html': {
      id: '',
      name: '机构主页/主页tab页'
    }
  }
// 2. 页面路径不止一个页面,还得通过链接上的额外参数来区分
// 医生主页,专科页,频道页是通过链接上携带的type参数来区分是哪个tab页的
// _type指的取值方式,目前支持两种url与session,url指的从链接上取值,_key指的是值对应的key 这里是type
  const pageMap = {
    // 医生主页相关
    '/h5/register/doctor/detail.html': {
      id: '',
      name: '医生主页',
      children: {
        _type: 'url',
        _key: 'type',
        'video': {
          id: '',
          name: '医生主页/视频tab页'
        }
      }
    },
  }
// 3. 页面共享路径,但是tab区分靠接口返回的值来区分
// 首页,笔记详情(图文与视频)
// _type指的取值方式,目前支持两种url与session,session指的从sessionStorage上取值,_key指的是值对应的key 这里是NOTE_PAGE_NAME_CACHE
// 这个NOTE_PAGE_NAME_CACHE是自己定义的缓存数值的名字(最好取独特一点)
  const NOTE_PAGE_NAME_CACHE = 'note_page_name_cache' // 笔记页存入的当前来源名字
  const pageMap = {
    '/h5/wecontent/personal/notedetail.html': {
      // 图文笔记与视频笔记通过接口的mediaType区分
      id: '',
      name: '笔记页',
      children: {
        _type: 'session',
        _key: NOTE_PAGE_NAME_CACHE // sessionStorage中存入的key
        // 考虑到接口返回动态tab,所以直接存name, 而不经过这里获取
      }
    },
  }

如何给新广告添加点击事件与曝光事件?

引入adclick, adclickv3(vue3引入), adexport 然后注册成指令,传入广告数据即可

静态文件

一些映射表 文件位置:src/config/GlobalSetting.js

eventNameMap(已废弃)

需要上报埋点属性的事件综合表 对产品提供的表进行映射(已废弃)

resultMap(已废弃)

对需要添加埋点上报的事件 根据产品提供的表 是否在该事件中上报该路径的表 横坐标是eventNameMap中的事件key对应的value值 纵坐标是路径顺序

originNameMap

路径对象的id为key, 对应的表中顺序0~n 提供给简单加密解密

indexNameMap

根据路径在表中的排列顺序,返回路径对象 提供给简单加密解密

advertArr

根据产品(胡圳阳)提供的表,组合出来的location_id聚合数组,只有在这个数组里面的广告id才会进行广告埋点相关属性的存储

路径相关

文件位置:src/utils/path.js

removeEventPath(pathArr, eventName) 已废弃

通过事件名(eventName)对指定路径进行消除(参照 GlobalSetting文件里的resultMap)

sliceEventPath(pathArr)

截取pathArr中最后10个

concatArrPath(pathArr)

通过数组对象进行名字的拼接,结果类似 首页|广告|医生主页 ...

removeDuplicationPath(pathArr)

对传进来的对象数组pathArr进行去重 大概逻辑就是以1个元素~n个元素为单位,向前或者向后比较,相同就消除 例如: a,a -> a a,b,a,b -> a,b a,b,c,a,b,c,b,c -> a,b,c a,b,c,b -> a,b,c,b

removeEventPath(pathArr, eventName)

综合处理路径对象数组方法 --> 传入路径对象数组pathArr,返回拼接后的路径结果 a|b|c 这样的

encryptPathArr(pathArr)

对传进来的路径对象数组进行加密(通过GlobalSetting中的映射表) 限制最大的路径为100

decryptPathArr(pathArr)

对传进来的路径对象数组进行解密(通过GlobalSetting中的映射表) 限制最大的路径为100

广告相关

广告数据存储

路径:src/utils/advert.js

广告数据组装

广告数据上报

广告点击事件

广告浏览事件

与其他端交互

app

小程序

移植指南

// 如果需要本地进行先调试,然后再发布包
1. 将这个项目中的代码使用 npm run build 打包后
2. 使用 npm link 将包关联到本地的文件
3. 然后再需要引入该包的项目中使用 npm link nyzt_buriedset 与之关联,这样就可以热更新,及时看到效果
4. 如果上一步骤不生效,查看是否已引入该正式包 nyzt_buriedset (在package.json中查看是否已引入不同版本), 删除node_modules下的引入版本,再进行上一步骤

// 正常引入 ---》 将该包引入所需项目之中
npm install nyzt_buriedset@latest

// 然后将项目里面相关埋点代码改为npm包中取相应函数引入
1. scUtils下的引入统一改为npm包引入,注意的点是:要确认目标项目中scUtils中的方法是否与包中的方法是一样的,包中如果少了记得补充
2. directive文件里面的adclick和adexport可以替换成包中的,注意事项还是如果有额外参数记得更新在包中
3. 项目里面的dataBI.js目前仅用于广告点击事件上报与数据埋点,所以需要将项目里面使用BI进行广告上报的全部替换成为该包中的adclick进行上报 
  方法:  1. 在指令处引入该包中的adclick (如果项目中已定义,直接用包中的adclick替换项目中的adclick, 如果有额外参数记得更新在该包中) 
         2. 全局搜索data-BI-params, 在有它的地方使用 v-adclick="data" 代替
         3. 全部替换完成之后找到项目中引入dataBI的地方,一般是src/plugins/prototype中引入的
         4. 注释引入(删除等稳定再删除)
4. util下的getSessionStorage, setSessionStorage, 如果是用于以下字段存储的,全换成包引入
   const pushCookieList = ['pathArr', 'lastWLData', 'lastAdvertData', 'doctor_view', 'goods_view', 'temp_goods', 'advertDataArr'] // 设置一个白名单 key值为白名单内容时同时把存储内容放入cookie中携带(为了跨三级域名携带数据)
   如果不是以上字段存储的,不必切换到该包引入
   可以将项目中util里面的方法优化, 参考以下

    export function setSessionStorage(key, value) {
      if (Object.prototype.toString.call(value) == '[object Object]') {
        value = JSON.stringify(value)
      }
      if (Object.prototype.toString.call(value) == '[object Array]') {
        value = JSON.stringify(value)
      }
      sessionStorage.setItem(key, value)
    }

    export function getSessionStorage(key) {
      let item = sessionStorage.getItem(key)
      if (item) {
        // 先将拿到的试着进行json转为对象的形式
        try {
          item = JSON.parse(item)
        } catch (error) {
          item = item
        }
      }
      return item
    }
5. 检查项目里面的setPath与getPath方法,切换成包引入(不出意外如果第一点换完基本不会有其他引入,再搜一遍防止遗漏)

package.json

  "main": "./dist/bundle.cjs.js", // require导入npm包时读取的目录对应cjs文件 module.exports
  "module": "./dist/bundle.esm.js", // 导入npm包时读取的目录对应esm文件
1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago