如需在每个事件中都包括某属性,可通过公共属性设置,无需在每个事件中重复设置。公共属性只需设置一次,即可包括在所有代码埋点事件、预置事件和全埋点事件中。
关于自定义 “公共属性” 请注意:
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 示例:设置自定义的公共属性,属性名为key_public,属性值为value_public RangersAppLogModule.setHeaderInfo({ "key_public": "value_public" });
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 示例:设置自定义的公共属性,属性名为key_public,属性值为value_public RangersAppLogModule.removeHeaderInfo("key_public");
如您的产品中有账户体系,请在用户登录后立即设置uuid,以保证用户登录前后口径一致性。
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 登录时设置您账号体系的ID, 并保证其唯一性 RangersAppLogModule.setUserUniqueId('{{USER_UNIQUE_ID}}');
在账户登出时调用。
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 登出时设置uuid为null RangersAppLogModule.setUserUniqueId(null);
设置用户属性,存在则覆盖,不存在则创建。
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 示例:设置用户属性,属性名为key,属性值为value RangersAppLogModule.profileSet({"key": "value"});
设置用户属性,存在则不设置,不存在则创建,适合首次相关的用户属性,比如首次访问时间等。
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 示例:设置用户属性,属性名为key_once,属性值为value_once RangersAppLogModule.profileSetOnce({"key_once": "value_once"});
设置数值类型的属性,可进行累加。
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 示例:设置用户属性,属性名为key,属性值为1 RangersAppLogModule.profileIncrement({"key": 1});
设置集合类型的用户属性,可持续向集合内添加。
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 示例:置用户属性,属性名为key,原本已有属性值,现添加属性值为value_append RangersAppLogModule.profileAppend({"key": "value_append"});
删除用户的属性。
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 示例:删除用户属性,属性名为key RangersAppLogModule.profileUnset("key");
请注意 device_id 是火山生成的 id,不是原始设备 id。
import { NativeModules } from 'react-native'; const { RangersAppLogModule } = NativeModules; // 示例:获取did let didPromise = RangersAppLogModule.getDeviceID(); didPromise.then((deviceID) => { console.log(deviceID); });
可以参考这个带全埋点Demo。注意:使用Demo时请将其中的app_id和上报域名更换成自己的。
说明
支持全埋点的最低版本要求:
版本对应关系:
react 版本 | rangers_applog_reactnative_plugin版本 | finder sdk版本 |
---|---|---|
< 17 | ≥ 0.2.0 | ≥ 6.14.1 |
≥ 17 | 0.2.13-rc.0 | ≥ 6.14.1 |
注意
react 17 以上的版本引入了jsx tr
ansform,为兼容请使用0.2.13及以上版本的rangers_applog_reactnative_plugin,并且需要按如下方式引入babel插件 (react 17以下可忽略)
//babel.config.js plugins: ['rangers_applog_reactnative_plugin/plugins/babel-plugin-jsx-hook.js']
通过 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 默认开启,可用以下方法开启(入参为 true,或者不传)
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enablePageView();
关闭 pageview
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enablePageView(false);
pageleave 默认关闭,可用以下方法开启(入参为 true,或者不传)
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enablePageLeave();
关闭 pageleave
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enablePageLeave(false);
click 默认开启,可用以下方法开启(入参为 true,或者不传)
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enableClick();
关闭 click
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enableClick(false);
react navigation 默认开启,可用以下方法开启(入参为 true,或者不传)
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enableReactNavigation();
关闭 react navigation,关闭后不再采集 react navigation 页面
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.enableReactNavigation(false);
可以配置一些全埋点上报时,携带的自定义参数:
示例
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 }, ] } })
page_manual_key
属性会带上该字段。page_path
属性会带上该字段。示例
import { autoTrack } from 'rangers_applog_reactnative_plugin'; autoTrack.config({ pages: [ { appKey: appName, pageID: 'app', pagePath: '/', ignore: false }, ], // ... })
只有 react navigation 开关开启的情况下,才会使用以下配置:
page_manual_key
属性会带上该字段。page_path
属性会带上该字段。示例
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 }, ] } })
配置页面自定义 title
在 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,若需要修改可参考上面自定义参数
内容。
配置点击元素的自定义 ID
在 click 事件的 element_manual_key
属性会带上 title 值。
<TouchableOpacity rangers-app-log-id="页面1-确认" onPress={testPress}> <Text>确认</Text> </TouchableOpacity>
属性名默认为:rangers-app-log-id,若需要修改可参考上面自定义参数
内容。
配置点击元素的自定义参数
在 click 事件的 custom
属性会带上该值。
<TouchableOpacity rangers-app-log-custom={{mykey:"myvalue"}} onPress={testPress}> <Text>确认</Text> </TouchableOpacity>
属性名默认为:rangers-app-log-custom,若需要修改可参考上面自定义参数
内容。
设置页面的自定义属性后,会在 pageview 事件的 page_custom
属性会带上该值
设置 RN 页面
通过 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; } }; }
设置 ReactNavigation 页面
通过 navigation 的 route.params 设置 ReactNavigation 页面的自定义参数
// 通过 navigation 跳转时,传入的参数会放在 pv 埋点的 page_custom navigation.navigate('DetailScreen', { detailId: 12 });
支持圈选的版本要求:
react-native 版本 | rangers_applog_reactnative_plugin版本 | finder sdk版本 |
---|---|---|
< 0.69.0 | ≥ 0.2.4 | ≥ 6.14.1 |
≥ 0.69.0 | 0.2.13-rc.0 | ≥ 6.14.1 |
圈选功能依赖:
样例代码如下,在入口文件 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 的页面 & 组件信息。