You need to enable JavaScript to run this app.
导航
React Native SDK 集成场景实践
最近更新时间:2025.06.30 18:49:45首次发布时间:2025.06.30 18:49:45
我的收藏
有用
有用
无用
无用

事件公共属性

如需在每个事件中都包括某属性,可通过公共属性设置,无需在每个事件中重复设置。公共属性只需设置一次,即可包括在所有代码埋点事件、预置事件和全埋点事件中。

设置公共属性

关于自定义 “公共属性” 请注意:

  1. 上报机制是随着每一次日志发送进行提交,默认的日志发送频率是1分钟,所以如果在一分钟内连续修改自定义公共属性,按照日志发送前的最后一次修改为准;
  2. 不推荐高频次修改,如每秒修改一次;
    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");

user_unique_id、用户属性相关

用户登录态设置

用户登录

如您的产品中有账户体系,请在用户登录后立即设置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);

设置用户属性

profileSet

设置用户属性,存在则覆盖,不存在则创建。

import { NativeModules } from 'react-native';
const { RangersAppLogModule } = NativeModules;

// 示例:设置用户属性,属性名为key,属性值为value
RangersAppLogModule.profileSet({"key": "value"});

profileSetOnce

设置用户属性,存在则不设置,不存在则创建,适合首次相关的用户属性,比如首次访问时间等。

import { NativeModules } from 'react-native';
const { RangersAppLogModule } = NativeModules;

// 示例:设置用户属性,属性名为key_once,属性值为value_once
RangersAppLogModule.profileSetOnce({"key_once": "value_once"});

profileIncrement

设置数值类型的属性,可进行累加。

import { NativeModules } from 'react-native';
const { RangersAppLogModule } = NativeModules;

// 示例:设置用户属性,属性名为key,属性值为1
RangersAppLogModule.profileIncrement({"key": 1});

profileAppend

设置集合类型的用户属性,可持续向集合内添加。

import { NativeModules } from 'react-native';
const { RangersAppLogModule } = NativeModules;

// 示例:置用户属性,属性名为key,原本已有属性值,现添加属性值为value_append
RangersAppLogModule.profileAppend({"key": "value_append"});

profileUnset

删除用户的属性。

import { NativeModules } from 'react-native';
const { RangersAppLogModule } = NativeModules;

// 示例:删除用户属性,属性名为key
RangersAppLogModule.profileUnset("key");

获取平台ID

获取平台生成ID

请注意 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和上报域名更换成自己的。

ReactNavigationExample_带全埋点.zip
未知大小

React Native侧要求

说明

支持全埋点的最低版本要求:

  • react-native ≥ 0.62.0
  • react-navigation ≥ 6.0.0
    react-navigation 目前仅支持 navigators:
    • Stack
    • Native Stack
    • Bottom Tabs
      注:若混合使用其他未支持的 navigator,可能影响全埋点采集

版本对应关系:

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']

原生Android侧代码及要求

通过 Application 集成,或者通过 Lifecycle 集成,两种方法二选一即可。

通过 Application 集成

在 Application 文件(默认是 MainApplication.java)中,将继承的 Application 改为 RangersAppLogApplication:

import com.reactnativerangersapplogreactnativeplugin.RangersAppLogApplication;

public class MainApplication extends RangersAppLogApplication implements ReactApplication {
    // ...
}

通过 Lifecycle 集成

在 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 开关

pageview 默认开启,可用以下方法开启(入参为 true,或者不传)

import { autoTrack } from 'rangers_applog_reactnative_plugin';

autoTrack.enablePageView();

关闭 pageview

import { autoTrack } from 'rangers_applog_reactnative_plugin';

autoTrack.enablePageView(false);

pageleave 开关

pageleave 默认关闭,可用以下方法开启(入参为 true,或者不传)

import { autoTrack } from 'rangers_applog_reactnative_plugin';

autoTrack.enablePageLeave();

关闭 pageleave

import { autoTrack } from 'rangers_applog_reactnative_plugin';

autoTrack.enablePageLeave(false);

click 开关

click 默认开启,可用以下方法开启(入参为 true,或者不传)

import { autoTrack } from 'rangers_applog_reactnative_plugin';

autoTrack.enableClick();

关闭 click

import { autoTrack } from 'rangers_applog_reactnative_plugin';

autoTrack.enableClick(false);

react navigation 开关

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);

相关配置(可选)

自定义参数

可以配置一些全埋点上报时,携带的自定义参数:

  • 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
      },
    ]
  }
})

配置 RN 页面

  • 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
    },
  ],
  // ...
})

配置 ReactNavigation 页面

只有 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
      },
    ]
  }
})

配置组件的自定义属性

配置页面自定义 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

圈选功能依赖:

  1. React Native 全埋点功能,需要保证全埋点开启
  2. iOS/Android 圈选功能,需要集成圈选模块,完成圈选配置

样例代码如下,在入口文件 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 的页面 & 组件信息。