RN无埋点的实现原理是修改用户React Native,React-navigation, React-Native-Navigation的源码。所以需要预先处理js文件,GitHub 开源 JS 脚本。
使用命令行进入项目根目录,执行下面操作(二者任选其一即可):
npm install --save react-native-autotrack-growingio
npm install --save https://github.com/growingio/GIORNHook.git#0.0.8
配置 package.json 文件
考虑到了hook.js每次npm install之后都需要执行, 建议直接配在项目的package.json中, 在原有文件中,添加如下代码,保存后执行npm install。
"scripts": {
"postinstall": "node node_modules/react-native-autotrack-growingio/hook.js -run"
}
1. 添加Android无埋点SDK依赖
React Native无埋点SDK是在Android原生SDK上的扩展,请参照Android SDK> 无埋点 SDK集成 完成添加跟踪代码配置。
注意替换SDK版本号:
请将autotrack-version替换成RN版本:RN-autotrack-version。
version为Android 无埋点SDK版本号,最新版本号请参考原生Android SDK更新日志。
集成步骤中只有版本号不同,适配RN与原生混合开发场景。
2.1 添加GrowingIOPackage
由于SDK需要在 java 代码中进行初始化,需要在项目的 Application 中添加 GrowingIOPackage。
注意混淆文件比 Android 原生 SDK 多一条 RN 控件的混淆代码,请复制全部内容添加到您的 proguard_rules.pro 文件中,如下:
方式一:使用CocoaPods 快速添加
添加 pod 'GrowingReactNativeKit'到Podfile中。
执行pod install 或 pod update 更新pod依赖库。
(可选)GrowingIO推荐您添加 AdSupport.framework 依赖库,用于来源管理激活匹配,有利于您更好的分析数据 ,添加项目依赖库的位置在项目设置target -> 选项卡General -> Linked Frameworks and Libraries
方式二:手动添加
将 Growing.h 、module.modulemap 和 GrowingCoreKit.framework、GrowingAutoTrackKit.framework、GrowingReactNativeKit.framework
添加到iOS工程中。
其他参照 iOS SDK > 无埋点 SDK集成 ,操作步骤一致。
2. 集成 React Native 埋点SDK
react-native link react-native-growingio 失败(即发现 Libraries中没有 GrowingIORNPlugin.xcodeproj ,则可手动配置)处理方法:
打开 XCode 工程中, 右键点击 Libraries 文件夹 ➜ Add Files to <...>
去 node_modules ➜ react-native-growingio ➜ iOS ➜ 选择 GrowingIORNPlugin.xcodeproj
在工程Build Phases ➜ Link Binary With Libraries中添加libGrowingIORNPlugin.a
与原生混合开发的开发者可详细查看 iOS SDK > 无埋点 SDK> 重要配置文档,如果原生控件使用不多,只需关注如下配置即可:
由于RN应用的页面切换并不遵循原生的生命周期, 需要单独适配, 目前在 React Native 页面中我们只支持react-navigation, react-native-navigation作为导航器, 并且为了拓展性, 留下了手动的page接口, 开发者可自行适配(直接更改 hook.js 脚本)。
3.1 react-navigation
如果使用react-navigation, 我们的hook脚本进行了自动适配, 默认的page名称为其key值。 用户可以自行设置, 如下代码:
3.2 react-native-navigation
当前支持react-native-navigation版本为 1.1.486, 1.1.406。 理论上兼容1.1版本。
react-native-navigation其标题默认取title, 如果没有title则取screenId,作为唯一标记。
用户可以设置自定义title, 只需要设置growingPagePath字段, 该字段与title同级即可。
如果SDK目前支持的路由方案不能满足您的需求, SDK留下拓展接口, 您需要在您认为页面发生切换时, 将最新的page名称告诉我们。 调用方法如下:
自定义数据上传其实最终是通过 NativeModules.GrowingIO 调用的原生GrowingIO 无埋点的API,以上接口使用时,对应的参数限制条件对您很重要。
(String eventId, Object eventLevelVariable(optional))
(Object conversionVariables)
(String pageName, JSONObject pageVariable)
埋点接口其实最终是通过 NativeModules.GrowingIO 调用的原生GrowingIO 无埋点的API,参数限制与其一致。
代码示例
GrowingIOPackage 向 RN 提供了一个 NativeModule ,所有埋点接口都是由其实现,使用方法如下:
开发者可以为 UI 元素添加 growingParams
代码示例:
属性列表
采集输入框内容,默认采集输入框内容变化次数,不采集内容
支持设置组件(Component)列表(包括但不限于)
添加代码之后,请先Clean项目,然后再进行编译,并在你的 App 安装了 SDK 后重新启动几次 App,保证行为采集数据自动发送给 GrowingIO,以便顺利完成检测。
在GrowingIO平台的应用创建页面继续完成应用创建的数据检测,检测成功后应用创建成功。
7. 验证SDK是否正常采集数据
了解GrowingIO平台数据采集类型请参考数据模型。
GrowingIO为您提供多种验证SDK是否正常采集数据的方式:
方式一:Mobile Debugger
方式二:在SDK中设置了Debug模式后,在IDE编译器控制台查看数据采集日志。
方式三:数据校验
1. iOS使用 react native location 功能时与GrowingIO有冲突吗?
有,但不属于GrowingIO的原因,具体可以参考issue中的解答,并且可以使用rn-patch.zip来解决这个问题。
2. 使用Debugger 工具时是否可以校验SDK采集数据的准确性?
目前不支持,Debugger工具可以辅助您来调试自己的项目,建议您在release 环境下校验。
3. react native 页面中的 tabbar imp event 不准确,click event是否受影响?
(1)原则上对于react native中的tabbar控件,我们只能保证使用原生代码UITabBarController,或者不是RCT为前缀的原生控件实现的tabbar,可以正确采集tabbar上的imp
(2)click event不受影响,可正确采集
4. npm项目中同时集成了不同版本(如4.x、6.x)的react-navigation时,page、click event失效?
如果同时集成了不同版本的react-navigation,预处理的文件路径发生了变化,需要在package.json中手动配置对应的预处理路径,如果不确定路径是否正确可以咨询技术支持
下面的例子为同时集成react-navigation 4.x和6.x时的设置