更新记录

0.0.5(2023-09-11)

修复初始化后,没有记录事件,导致后台看不到启动记录问题。

0.0.4(2023-06-25)

IOS平台更新:

1.修改IOS初始化函数名称(ps:init名称无法有返回值,因此修改)和入参方式,取消debug参数,调整记录一次事件的时长方法时间参数为字符串类型。

2.IOS新增设置app类型方法。

3.兼容Xcode14版本,调整编译最低版本支持IOS 11,不在支持IOS 11以下版本。

0.0.3(2023-02-25)

1.修改targetSdkVersion到32。 2.Android平台添加权限说明。 3.更新使用说明文档。

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 11.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 适用版本区间:11 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


更新内容

V0.0.1

1.首次提交,文档说明不恰当之处,请联系作者,感谢支持!

V0.0.2

1.修改加载插件名称!

2.新增Android和IOS平台调用文档。

V0.0.3

1.修改targetSdkVersion到32。

2.Android平台添加权限说明。

3.更新使用说明文档。

V0.0.4

IOS平台更新:

1.修改IOS初始化函数名称(ps:init名称无法有返回值,因此修改)和入参方式,取消debug参数,调整记录一次事件的时长方法时间参数为字符串类型。

2.IOS新增设置app类型方法。

3.兼容Xcode14版本,调整编译最低版本支持IOS 11,不在支持IOS 11以下版本。

V0.0.5

修复已知问题。

引用方式

const BaiduTongji = uni.requireNativePlugin("spx-baidutongji-BaiduTongji");

权限声明:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.BLUETOOTH" />
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.WRITE_SETTINGS" />
 <uses-permission android:name="android.permission.GET_TASKS" />

1.使用方法

(1) IOS平台

初始化

使用埋点统计功能前,必须先进行初始化操作。全局触发一次即可。

/**
* 初始化插件
* @param appId  百度统计appKey (必填项)
* @param testFlag 任意值(填写后,返回参数为测试设备ID,不填写返回SDK中获取的设备ID,用于百度统计后台添加测试设备)
* @param channel 渠道 (默认为appStore,非必填)
* @param version  自定义app版本号版本号(默认为app版本号,非必填)
*/
let deviceId = BaiduTongji.initialization({
                'appId': 'xxxx',
                'channel': 'xxx',
                'version': '1.0.0',
                'testFlag': true
            });

其他方法

/**
 记录一次事件的点击,eventId和对应的attribute的key请在网站上创建,未创建的evenId和key将无法统计。 (必填)
 @param eventId 事件Id,提前在网站端创建 (必填)
 @param attributes 事件属性,对应的key需要在网站上创建,注意:value只接受NSString(示例:{'key1':'value1','key2':'value2'})(可以为空null)
 */
BaiduTongji.logEvent("eventId",attributes);

/**
 记录一次事件的时长,eventId和对应的attribute的key请在网站上创建,未创建的evenId和key将无法统计。
 @param eventId 自定义事件Id,提前在网站端创建 (必填)
 @param duration 已知的自定义事件时长,单位为毫秒(ms) (必填 字符串形式)
 @param attributes 事件属性,对应的key需要在网站上创建,注意:value只接受NSString(示例:{'key1':'value1','key2':'value2'})(可以为空null)
 */
BaiduTongji.logEventWithDurationTime("eventId",'duration',attributes);

/**
 记录一次事件的开始,eventId请在网站上创建。未创建的evenId记录将无效。
 @param eventId 自定义事件Id,提前在网站端创建 (必填)
 */
BaiduTongji.eventStart("Event3");

/**
 记录一次事件的结束,eventId和对应的attribute的key请在网站上创建,未创建的evenId和key将无法统计。
 @param eventId 自定义事件Id,提前在网站端创建 (必填)
 @param attributes 事件属性,对应的key需要在网站上创建,注意:value只接受NSString(示例:{'key1':'value1','key2':'value2'})(可以为空null)
 */
BaiduTongji.eventEnd("eventId",attributes);

/**
 记录某个页面访问的开始,请参见Example程序,在合适的位置调用。
 建议在ViewController的viewDidAppear函数中调用
 @param name 页面名称 (必填)
 */
BaiduTongji.pageviewStartWithName("name");

/**
 记录某个页面访问的结束,与pageviewStartWithName配对使用,请参见Example程序,在合适的位置调用。
 建议在ViewController的viewDidDisappear函数中调用
 @param name 页面名称 (必填)
 */
BaiduTongji.pageviewEndWithName("name");

/**
 设置app类型,从以下类型中选择
 0:标准app
 1:ReactNative
 2:flutter
 3: cordova
 4: apicloud
 默认为0,sdk内部使用,开发者可不设置
*/
BaiduTongji.setPlatformType({
                    'platformType': 0
                })

(2) Android平台

初始化

使用埋点统计功能前,必须先进行初始化操作。全局触发一次即可,调用成功回返回一个设备标识ID。

/**
  * 初始化插件
  *
  * @param appKey  百度统计appKey (必填)
  * @param debug   是否开启debug(仅在原生代码调式中生效,true打开,则显示日志输出,fasle则不现实日志,非必填,正式环境请务必设置为false)
  * @param channel 渠道值,数值自定义,不同渠道自己能区分即可,例如"baidu market"
  * @param version 自定义app版本号版本号(默认为app版本号,非必填)
  * @return 设备唯一标识ID(用于百度统计后台添加测试设备)
  */
let deviceId = BaiduTongji.init('appKey',debug,'channel','version');

其他方法

/**
  * 记录事件(无时长事件分析)
  *
  * @param eventId    事件Id,提前在网站端创建(必填)
  * @param eventLabel 事件标签,附加参数,不能为空字符串(必填)
  * @param acc        事件发生次数(可以为空null 默认为1)
  * @param attributes 事件属性,对应的key需要在网站上创建,注意:key,value只接受String(示例:{key1:"value1",key2:"value2"})(可以为空null)
  */
BaiduTongji.logEvent("Event1","eventLabel",acc,attributes);

/**
  * 固定时长事件分析
  *
  * @param eventId    事件Id,提前在网站端创建(必填)
  * @param eventLabel 事件标签,附加参数,不能为空字符串(必填)
  * @param duration   已知的自定义事件时长,单位为毫秒(ms)(必填)
  * @param attributes 事件属性,对应的key需要在网站上创建,注意:key,value只接受String(示例:{key1:"value1",key2:"value2"})(可以为空null)
  */
BaiduTongji.logEventWithDurationTime("eventId","eventLabel",duration,attributes);

/**
  * 自定义时长事件分析(开始)
  *
  * @param eventId    事件Id,提前在网站端创建(必填)
  * @param eventLabel 事件标签,附加参数,不能为空字符串(必填)
  */
BaiduTongji.eventStart("eventId","eventLabel");

/**
  * 自定义时长事件分析(结束,传入事件属性数据)
  *
  * @param eventId    事件Id,提前在网站端创建(必填)
  * @param eventLabel 事件标签,附加参数,不能为空字符串(必填)
  * @param attributes 事件属性,对应的key需要在网站上创建,注意:key,value只接受String(示例:{key1:"value1",key2:"value2"})(可以为空null)
  */
BaiduTongji.eventEnd("eventId","eventLabel",attributes);

/**
 记录某个页面访问的开始
 @param pageName 页面名称(必填)
 */
BaiduTongji.pageviewStartWithName("pageName");

/**
 记录某个页面访问的结束
 @param pageName 页面名称(必填)
 */
BaiduTongji.pageviewEndWithName("pageName");

2.注意

minSdkVersion 16 应用兼容的最低Android版本(API等级)。

targetSdkVersion 32 用于指定应用的目标Android版本(API等级)

不明白的请去项目中mainfest.json中App常用设置中查看。

安卓init方法初始化插件有返回值为设备ID,IOS initialization方法需要设置testFlag方可返回设备ID。调用后请稍等些时间在百度统计看是否有新设备数据,有则说明插件调用成功。

3.QA

Q:为什么没有页面智能自动全埋点(自动记录访问的页面)?

A:作者试了各种方式,具体原因作者也没明白,又可能是原生集成方式,因为uniapp和原生渲染方式不同。导致只能手动记录,于是作者手写了一套拦截器,供参考:

<script>
    let oldPage = null;
    let newPage = null;
    const list = ["navigateTo", "redirectTo", "reLaunch", "switchTab", 'navigateBack'];
    export default {
        onLaunch: function() {
            console.log('App Launch');
            this.addRoutesInterceptor();
        },
        onShow: function() {
            console.log('App Show')
        },
        onHide: function() {
            list.forEach(item => {
                // 删除拦截器
                uni.removeInterceptor(item);
            })
            console.log('App Hide');

        },
        methods: {
            addRoutesInterceptor() {
                let isSuccess = false;
                list.forEach(item => {
                    // 添加页面跳转拦截器
                    uni.addInterceptor(item, {
                        invoke() {
                            let routes = getCurrentPages();
                            // 解决首次打开页面栈为0导致异常
                            if (routes.length > 0) {
                                oldPage = routes[routes.length - 1];
                                console.log("旧页面:" + oldPage.route)
                            }
                        },
                        success() {
                            let routes = getCurrentPages();
                            newPage = routes[routes.length - 1];
                            console.log("新页面:" + newPage.route)
                            isSuccess = true;
                        },
                        fail() {
                            isSuccess = false;
                        },
                        complete() {
                            if (isSuccess && oldPage) {
                                // 结束
                                // this.$BaiduTongji.pageviewEndWithName(oldPage.route)
                            };
                            if (isSuccess && newPage) {
                                // 开始
                                // this.$BaiduTongji.pageviewStartWithName(oldPage.route)
                            };
                        },
                    })
                });
            }
        }
    }
</script>

Q:初始化时固定的chanel和version,但在百度实时访客中,渠道和版本都是其他。

A:具体原因作者也不太清楚(已经测试了各种方法还是不行),但是在页面分析和渠道分析中是正常显示的。

Q:ios在初始化的时候debug参数填写为true或false为什么闪退(0.0.4版本已经解决)?

A:有可能是uniapp一直在更新,导致不兼容问题,debug参数其实只是在原生开发插件时有用,将此值设置为null即可解决(稍后作者有空后会更新,请见谅)。

交流反馈:

QQ群:522375350

捐赠作者研发

如果您认为作者帮到了您的开发工作,您可以捐赠作者的研发工作,捐赠无门槛,哪怕是一杯可乐也好(相信这比打赏主播更有意义)。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android:采用百度移动统计SDK; IOS:采用百度移动统计SDK,权限:无。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

本插件集成了百度移动统计SDK。 隐私协议和采集数据参考:https://mtj.baidu.com/static/userguide/book/ios/sdk/cocoapods.html 本插件为百度统计为接口,采集的数据均与使用者具体怎么使用相关,数据发送到的是百度统计的后台。 本插件仅仅是帮使用者集成了ios和Android平台百度统计(埋点)代码,省去了使用者的开发时间。所收集数据均与开发者本人无关。望悉知。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问