更新记录
0.0.6(2024-07-11)
1.升级安卓百度统计sdk版本到Baidu_Mtj_android_4.0.10.9。
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以下版本。
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 11.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:支持 | 适用版本区间:11 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
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
捐赠作者研发
如果您认为作者帮到了您的开发工作,您可以捐赠作者的研发工作,捐赠无门槛,哪怕是一杯可乐也好(相信这比打赏主播更有意义)。