React Native 无埋点 SDK
自动采集用户行为数据、页面元素信息和设备信息等数据,和原生无埋点 SDK 的采集内容和功能一致。
GitHub Demo : https://github.com/growingio/ReactNativeDemo 。
支持版本
兼容 react native 版本:0.46-0.56、0.59.9
兼容组件 react-navigation 版本:^2.7.4、^3.11.0
兼容组件 react-native-navigation 版本:^1.1.486
集成
预处理 JS 文件
RN无埋点的实现原理是修改用户React Native
,React-navigation
, React-Native-Navigation
的源码。所以需要预先处理js
文件,GitHub 开源 JS 脚本。
(1)使用命令行进入项目根目录,执行下面操作(二者任选其一即可):
npm install --save react-native-autotrack-growingio
npm install --save https://github.com/growingio/GIORNHook.git#0.0.6
(2) 配置 package.json
文件
package.json
文件考虑到了hook.js
每次npm install
之后都需要执行, 建议直接配在项目的package.json
中,
在原有文件中,添加如下代码,保存后执行npm install
。
"scripts": {
"postinstall": "node node_modules/react-native-autotrack-growingio/hook.js -run"
}
Android 集成
1. 添加 Android 无埋点 SDK 依赖
React Native 无埋点 SDK 是在 Android 原生 SDK 上的扩展,参照 Android 无埋点 SDK,集成步骤的 1~5.
注意将 SDK 版本号替换成 RN 版本:RN-autotrack-2.8.7 。
集成步骤中,只有版本号不同,适配 RN 与原生混合开发场景。
2. 重要配置项
1.添加 GrowingIOPackage
由于 SDK 需要在java
代码中进行初始化。
在项目的Application中,添加GrowingIOPackage
:
public class MainApplication extends Application implements ReactApplication {
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
// 此处加入GrowingIOPackage
new GrowingIOPackage()
);
}
}
2.混淆文件配置
注意混淆文件比 Android 原生 SDK 多一条 RN 控件的混淆代码,请复制全部内容添加到您的 proguard_rules.pro
文件中,如下:
# GIO RN 控件混淆代码,不添加则会造成点击事件采集失败
-keep class com.facebook.react.uimanager.JSTouchDispatcher{
*;
}
-keep class com.growingio.** {
*;
}
-dontwarn com.growingio.**
-keepnames class * extends android.view.View
-keepnames class * extends android.app.Fragment
-keepnames class * extends android.support.v4.app.Fragment
-keepnames class * extends androidx.fragment.app.Fragment
-keep class android.support.v4.view.ViewPager{
*;
}
-keep class android.support.v4.view.ViewPager$**{
*;
}
-keep class androidx.viewpager.widget.ViewPager{
*;
}
-keep class androidx.viewpager.widget.ViewPager$**{
*;
}
iOS 集成
1. 选择SDK集成方式
注意:请保证Growing,GrowingCoreKit,GrowingAutoTrackKit,GrowingReactNativeKit版本号一致
一.使用 CocoaPods 管理依赖
添加
pod 'GrowingReactNativeKit'
到Podfile中执行
pod update
,不要用--no-repo-update
选项(optional) GrowingIO推荐您添加AdSupport.framework依赖库,用于来源管理激活匹配,有利于您更好的分析的数据
添加项目依赖库的位置在项目设置target -> 选项卡General -> Linked Frameworks and Libraries
二.手动安装
解压上述 iOS SDK 压缩文件
将 Growing.h 、module.modulemap 和 GrowingCoreKit.framework、GrowingAutoTrackKit.framework、GrowingReactNativeKit.framework
添加到iOS工程
其余参照 iOS 无埋点 SDK 集成,操作步骤一致。
2. 集成 React Native 打点 SDK
npm install --save https://github.com/growingio/react-native-growingio.git#0.0.7
react-native link react-native-growingio
如果您使用的是pod 的方式集成 :
请添加以下内容到Podfile中,并在添加之后执行pod update
:
pod 'GrowingReactNativeTrackKit', :path => '../node_modules/react-native-growingio'
3. 重要配置项
与原生混合开发的开发者可详细查看 iOS 无埋点 重要配置文档,如果原生控件使用不多,只需关注如下配置即可:
页面识别
由于RN应用的页面切换并不遵循原生的生命周期, 需要单独适配, 目前在 React Native 页面中我们只支持react-navigation
, react-native-navigation
作为导航器, 并且为了拓展性, 留下了手动的page接口, 开发者可自行适配(直接更改 hook.js 脚本)。
1. react-navigation
如果使用react-navigation, 我们的hook脚本进行了自动适配, 默认的page名称为其key值。 用户可以自行设置, 如下代码:
this.props.navigation.setParams({growingPagePath: 'xx'});
2. react-native-navigation
当前支持
react-native-navigation
版本为 1.1.486, 1.1.406。 理论上兼容1.1版本。react-native-navigation
其标题默认取title
, 如果没有title
则取screenId
,作为唯一标记。
用户可以设置自定义title
, 只需要设置growingPagePath
字段, 该字段与title
同级即可.
3. Page 设置 API
如果SDK目前支持的路由方案不能满足您的需求, SDK留下拓展接口, 您需要在您认为页面发生切换时, 将最新的page名称告诉我们。 调用方法如下:
import {
NativeModules
} from 'react-native';
// 在react native页面将要展示时调用
NativeModules.GrowingIO.onPagePrepare("pageName");
// 在react native页面已经展示时调用
NativeModules.GrowingIO.onPageShow("pageName");
自定义事件和变量API
方法名
参数类型
说明
track
(String eventId, Object eventLevelVariable(optional))
自定义事件
trackWithNumber
(String eventId, Number number, Object eventLevelVariable(optional))
自定义事件
setEvar
(Object conversionVariables)
设置转化变量
setPeopleVariable
(Object peopleVariables)
设置用户变量
setUserId
(String userId)
设置登录用户ID
clearUserId
无参数
清除登录用户ID
setVisitor
(Object visitor)
设置访问用户变量
埋点接口其实最终是通过 NativeModules.GrowingIO 调用的原生GrowingIO 无埋点的API,以上接口使用时,对应的参数限制条件对您很重要。请您注意遵守,并且验证打点是否成功。
参数限制条件
参数名称
限制条件
eventId
非空,长度限制小于等于50;
number
非空。
eventLevelVariable
不可使用嵌套的JSONObject
对象,即为JSONObject中不可以放入JSONObject
或者JSONArray
;
key 长度限制小于等于50,value长度限制小等于1000。
conversionVariables
同上
peopleVariables
同上
visitor
同上
userId
长度限制小于等于1000;
如果值为空则清空了登录用户变量,不建议这么用,
请使用 clearUserId 清除登录用户变量。
代码示例:
GrowingIOPackage 向 RN 提供了一个 NativeModule , 所有打点接口都是由其实现,使用方法如下:
//在使用 GrowingIO 埋点功能的文件中导入 NativeModules
import {
NativeModules
} from 'react-native';
//埋点方法调用示例如下:
//track 设置自定义事件
NativeModules.GrowingIO.track('testEventId', {'卖家Id': 'xxxxxx', '地点': '北京'});
//trackWithNumber 设置自定义事件
NativeModules.GrowingIO.trackWithNumber('addCart',97,{"book":"EnglishBook"});
//setPeopleVariable 设置用户变量
NativeModules.GrowingIO.setPeopleVariable({ "name": "Danny", "Age": 20 });
//setEvar 设置转化变量
NativeModules.GrowingIO.setEvar({ "registered": true, "fee": "200" });
//setUserId 设置登录用户名称
NativeModules.GrowingIO.setUserId("Gioer");
//clearUserId 清除登录用户名称
NativeModules.GrowingIO.clearUserId();
//setVisitor 设置访问用户变量
NativeModules.GrowingIO.setVisitor({ "age": 20, "gender": "male" });
高级选项设置
开发者可以为UI
元素添加growingParams
代码示例:
<Text growingParams={{id:"test",content:"test",info:"test",ignore:"true"}}>高级选项设置</Text>
属性列表
支持设置组件(Component)列表(包括但不限于)
支持的组件
View
ScrollView
ListView
Picker
Text
TextInput
WebView
RefreshControl
ActivityIndicator
验证 SDK 是否正常工作
验证内容:
验证工具:
查看日志: Android 打开 TestMode 和 Debug Mode
查看日志:iOS
常见问题
1.iOS 使用react native location功能时与GrowingIO有冲突么?
是的,但不属于growingio的原因,具体可以参考issue中的解答,并且可以使用rn-patch.zip来解决这个问题
2. 支持react native 版本?
0.46 ~ 0.56
3. chrome debug时是否可以校验sdk采集数据的准确性?
目前不支持,但不影响您chrome debug调试自己的项目, 建议您在release环境下校验
4. react native页面中的tabbar imp event不准确?click event是否受影响?
(1) 原则上对于react native中的tabbar控件,我们只能保证使用原生代码UITabBarController,或者不是RCT为前缀的原生控件实现的tabbar,可以正确采集tabbar上的imp (2) click event不受影响,可正确采集
Last updated