支持全埋点的最低版本要求:
react-navigation 目前仅支持 navigators:
注:若混合使用其他未支持的 navigator,可能影响全埋点采集
npm install rangers_applog_reactnative_plugin
通过 Application 集成,或者通过 Lifecycle 集成,两种方法二选一即可。
在 Application 文件(默认是 MainApplication.java)中,将继承的 Application 改为 RangersAppLogApplication:
import com.reactnativerangersapplogreactnativeplugin.RangersAppLogApplication; public class MainApplication extends RangersAppLogApplication implements ReactApplication { ... }
在 Application 文件(默认是 MainApplication.java)中,在 onCreate 钩子方法中,注册 RangersAppLogActivityLifecycle。
注意:如果选择通过 Lifecycle 集成,则当前Application不能继承 RangersAppLogApplication。
import com.reactnativerangersapplogreactnativeplugin.RangersAppLogActivityLifecycle; ... public class MainApplication extends Application implements ReactApplication { @Override public void onCreate() { super.onCreate(); registerActivityLifecycleCallbacks(new RangersAppLogActivityLifecycle()); } }
在入口文件 index.js 中启用全埋点:
import { autoTrack } from 'rangers_applog_reactnative_plugin'; ... AppRegistry.registerComponent(appName, () => App); autoTrack.enable();
全埋点默认关闭,可通过以下方法打开(入参为 true,或者不传):
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enable();
关闭全埋点:
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enable(false);
pageview 默认开启,可用以下方法关闭:
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enablePageView(false);
开启 pageview:
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enablePageView();
pageleave 默认关闭,可用以下方法开启(入参为 true,或者不传):
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enablePageLeave();
关闭 pageleave:
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enablePageLeave(false);
click 默认开启,可用以下方法关闭:
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enableClick(false);
开启 click:
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enableClick();
react navigation 默认开启,可用以下方法关闭:
关闭后不再采集 react navigation 页面。
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enableReactNavigation(false);
开启 react navigation:
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enableReactNavigation();
可以配置一些全埋点上报时,携带的自定义参数:
bindEvent:用于绑定 pageview 信息。在全埋点的 pv 事件触发后,所有通过 RangersAppLogModule.onEventV3 触发的事件,都会加上 page_key,page_manual_key 的事件属性。默认为 false。
pageTitleProp: 用于设置自定义 title 的属性名(props key)。
elementIdProp: 用于设置点击元素自定义 ID 的属性名(props key)。
elementCustomProp:用于设置点击元素自定义参数的属性名(props key)。
pages: 用于配置 RN 页面(通过 AppRegistry 注册的页面)的自定义参数,影响 pageview,pageleave 的埋点事件。
reactNavigation: 用于配置 ReactNavigation 页面(通过 react navigation 注册的页面)的自定义参数,影响 pageview,pageleave 的埋点事件。
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.config({ bindEvent: false, pageTitleProp: 'rangers-app-log-title', elementIdProp: 'rangers-app-log-id', elementCustomProp: 'rangers-app-log-custom', pages: [ { appKey: appName, pageID: 'app', pagePath: '/', ignore: false }, ], reactNavigation: { combineApp: true, disableApp: true, screens: [ { screenName: 'Home', pageID: 'navigationpage-home', pagePath: '/navigationpage/home', ignore: false }, ] } })
appKey:通过 AppRegistry 注册页面时,定义的 appKey,此为页面的唯一标识。
pageID:在 pageview,pageleave 事件的 page_manual_key
属性会带上该字段。
pagePath:在 pageview,pageleave 事件的 page_path
属性会带上该字段。
ignore:在 pageview,pageleave 事件中,是否忽略该页面。如果设置为 true,则忽略该页面,refer page 中也不会有该页面。默认为 false。
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.config({ pages: [ { appKey: appName, pageID: 'app', pagePath: '/', ignore: false }, ], ... })
只有 react navigation 开关开启的情况下,才会使用以下配置:
combineApp:是否将初始 screen 页面及它所属的 rn 页面视为同一个页面,共享 refer 信息。 为 true 时,初始 screen 页面的 refer 信息与它所属的 rn 页面相同。 为 false 时,初始 screen 页面的 refer 信息是它所属的 rn 页面。 默认为 true。
disableApp:是否禁用 screen 所属 rn 页面的埋点。 为 true 时, 禁用 screen 所属 rn 页面的埋点,在 rn 页面同级的跳转链路中,使用 screen 页面信息代替 rn 页面。 为 false 时,screen 所属 rn 页面正常触发埋点。 默认为 true。
screenName:通过 react navigation 注册页面时,为 screen 指定的 name,此为页面的唯一标识。
pageID:在 pageview,pageleave 事件的 page_manual_key
属性会带上该字段。
pagePath:在 pageview,pageleave 事件的 page_path
属性会带上该字段。
ignore:在 pageview,pageleave 事件中,是否忽略该页面。如果设置为 true,则忽略该页面,refer page 中也不会有该页面。默认为 false。
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.config({ ..., reactNavigation: { combineApp: true, disableApp: true, screens: [ { screenName: 'Home', pageID: 'navigationpage-home', pagePath: '/navigationpage/home', ignore: false }, ] } })
在 pageview,pageleave 事件的 page_title
属性会带上 title 值。
设置属性后,title 会自动取组件的内容:
<Text rangers-app-log-title>App Page</Text>
也可以为该属性直接设置 title 值:
<Text rangers-app-log-title="App">App Page</Text>
如果页面内多个组件都设置了 title,会以最后加载的组件为准。
属性名默认为:rangers-app-log-title,若需要修改可参考 3.1 节。
在 click 事件的 element_manual_key
属性会带上 title 值。
<TouchableOpacity rangers-app-log-id="页面1-确认" onPress={testPress}> <Text>确认</Text> </TouchableOpacity>
属性名默认为:rangers-app-log-id,若需要修改可参考 3.1 节。
在 click 事件的 custom
属性会带上该值。
<TouchableOpacity rangers-app-log-custom={{mykey:"myvalue"}} onPress={testPress}> <Text>确认</Text> </TouchableOpacity>
属性名默认为:rangers-app-log-custom,若需要修改可参考 3.1 节。
设置页面的自定义属性后,会在 pageview 事件的 page_custom
属性会带上该值
通过 initialProperties 设置 RN 页面的自定义参数
iOS 设置方式参考:
// 创建 RN 页面时,传入的 initialProperties,会放在 pv 埋点的 page_custom NSDictionary *initialProperties = @{@"mykey": @"myvalue"}; RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:[BridgeManager shared].bridge moduleName:moduleName initialProperties:initialProperties];
Android 设置方式参考:
@Overrideprotected ReactActivityDelegate createReactActivityDelegate() { return new ReactActivityDelegate(this, getMainComponentName()) { @Nullable@Overrideprotected Bundle getLaunchOptions() { Bundle initialProps = new Bundle(); initialProps.putString("mykey", "myvalue"); return initialProps; } }; }
通过 navigation 的 route.params 设置 ReactNavigation 页面的自定义参数
// 通过 navigation 跳转时,传入的参数会放在 pv 埋点的 page_custom navigation.navigate('DetailScreen', { detailId: 12 });
支持圈选的版本要求:
圈选功能依赖:
样例代码如下,在入口文件 index.js 中,需要在导入 react-native 库之前执行 initPicker 方法才能保证圈选成功(因圈选需要通过 devtools 注入,导入 react-native 库之后再执行会导致注入失败)。
注: 不需要使用圈选功能时,请移除 initPicker 方法,该方法可能会影响渲染效率
import { autoTrack } from '@dp/rangers_applog_reactnative_plugin'; autoTrack.initPicker(); import { AppRegistry } from 'react-native'; // register app root component AppRegistry.registerComponent(appName, () => App); autoTrack.enable();
之后按 ios/android 的圈选流程启动圈选,当进入 React Native 页面时,圈选页面的信息会自动变成 React Native 的页面 & 组件信息。