---
metadata:
  - name: generator
    content: Diplodoc Platform v5.63.4
alternate:
  - https://yandex.com/support/appmetrica-io/en/sdk/react-native/analytics/react-native-operations.md
  - https://yandex.com/support/appmetrica-io/ru/sdk/react-native/analytics/react-native-operations.md
  - https://yandex.com/support/appmetrica-io/zh/sdk/react-native/analytics/react-native-operations.md
  - href: https://yandex.com/support/appmetrica-io/zh/sdk/react-native/analytics/react-native-operations.md
    type: text/markdown
    title: Markdown version
  - href: https://yandex.com/support/appmetrica-io/zh/llms.txt?revision=r21687218
    rel: describedby
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/support/appmetrica-io/zh/llms.txt?revision=r21687218

# 使用示例

## 使用扩展配置初始化库 {#initialize}

要使用扩展的启动配置初始化库，请创建一个`AppMetricaConfig`实例，使用
适当的设置，并通过`AppMetrica.activate(config: AppMetricaConfig)`方法激活库。 例如，您
可以使用扩展配置来启用/禁用日志记录、设置会话超时时间、传递
参数以[跟踪预安装的应用](https://yandex.com/support/appmetrica-io/zh/mobile-tracking/preinstalled-app-attr.md)，以及更多功能。

扩展配置设置在库初始化时立即生效。

```javascript translate=no
import AppMetrica, {AppMetricaConfig} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const config: AppMetricaConfig = {
  apiKey: API_KEY,
  firstActivationAsUpdate: false,
  logs: true,
  sessionTimeout: 20,
}
AppMetrica.activate(config);
```

在应用程序运行时配置库，请使用`AppMetrica`类的方法。

## 向额外的 API 密钥发送统计数据 {#reporter-different-apikey}

将数据发送到额外的 API 密钥可以让您为这些 API 密钥收集自己的统计数据。 你可以用这来控制其他用户对信息的访问权限。 例如，为了给分析师提供统计数据的访问权限，可以为额外的 API 密钥复制发送营销数据。 这样他们只会有访问所需信息的权限。

要将数据发送到额外的 API 密钥，必须使用报告器。 使用报告器，您可以发送事件、错误消息、个人资料信息和应用内购买数据。 报告员可以在不初始化AppMetrica SDK的情况下工作。

### 步骤 1. (可选) 使用高级配置初始化报告器 {#reporter-different-apikey-initialize}

要设置具有扩展配置的报告器，请创建一个`ReporterConfig`对象，设置您需要的参数，然后通过调用`AppMetrica.activateReporter(config: ReporterConfig)`来激活报告器。 此配置用于具有指定 API 密钥的报告员。 您可以为每个额外的 API 密钥设置自己的配置。

{% note alert "" %}

在第一次调用报告器之前，应先初始化具有扩展配置的报告器。 否则，报告器将在没有配置的情况下初始化。

{% endnote %}

  ```javascript translate=no
  // Creating extended configuration of the reporter.
  // To create it, pass a ANOTHER_API_KEY that is different from the app's API_KEY.
  const reporterConfig: ReporterConfig = {
    apiKey: API_KEY,
    logs: true,
    sessionTimeout: 20,
  }
  AppMetrica.activateReporter(reporterConfig);
  ```

### 步骤 2. 配置使用报告器发送数据 {#reporter-different-apikey-send}

要通过报告器发送数据，检索一个实现 `IReporter` 接口的对象，方法是调用 `AppMetrica.getReporter(apiKey: string)`，然后使用该接口的方法提交您的报告。 如果报告器没有用扩展配置进行初始化，调用此方法将会为指定的API密钥初始化报告器。

事件发送示例：

  ```javascript translate=no
  AppMetrica.getReporter(ANOTHER_API_KEY).reportEvent("Updates installed");
  ```

为了正确追踪，请手动配置报告器，为每个报告器发送会话开始和暂停的事件。 要做到这一点，请使用 `resumeSession()` 和 `pauseSession()` 方法，它们属于 `IReporter` 接口：

  ```javascript translate=no
  // When app goes to foreground
  AppMetrica.getReporter(ANOTHER_API_KEY).resumeSession();
  // When app goes to background
  AppMetrica.getReporter(ANOTHER_API_KEY).pauseSession();
  ```


## 使用库发送设备位置 {#track-location}

{% note info %}

默认情况下，Android 设备位置发送已禁用。

{% endnote %}

要启用发送位置数据，请使用已启用发送设备
位置数据的配置初始化库。 为此，请将 `locationTracking` 属性设置为 `true`，然后创建扩展库
configuration。

```javascript translate=no
import AppMetrica, {AppMetricaConfig} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const config: AppMetricaConfig = {
  apiKey: API_KEY,
  locationTracking: true,
}
AppMetrica.activate(config);
```

要在应用运行时启用发送位置数据，请使用
`AppMetrica.setLocationTracking(enabled: boolean)` 方法：

```javascript translate=no
AppMetrica.setLocationTracking(true);
```

为了获得更精确的位置信息，请在 AndroidManifest.xml 文件中添加以下权限之一：

- [android.permission.ACCESS_COARSE_LOCATION](https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_COARSE_LOCATION) —
  用于发送大致位置。
- [android.permission.ACCESS_FINE_LOCATION](https://developer.android.com/reference/android/Manifest.permission.html#ACCESS_FINE_LOCATION) —
  以发送精确的位置信息。

## 手动设置位置 {#location-manual}

在发送设备位置的自定义信息之前，请确保已启用报告功能。

库会自行确定设备位置。 要发送自定义设备位置
数据，请将`Location`传递给`AppMetrica.setLocation(location?: Location)`方法。

```javascript translate=no
import AppMetrica from '@appmetrica/react-native-analytics';
```

```javascript translate=no
// Determining the location.
const currentLocation: Location = {
  ...
}
// Setting up custom device location data.
AppMetrica.setLocation(currentLocation);
```

要使用扩展配置发送自定义设备位置数据，在创建扩展库配置时，将 `Location` 实例传递给 `location?: Location` 属性。

```javascript translate=no
import AppMetrica, {AppMetricaConfig, Location} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
// Determining the location.
const currentLocation: Location = {
  ...
}
// Creating an extended library configuration.
const config: AppMetricaConfig = {
  apiKey: API_KEY,
  // Set up a custom device location.
  location: currentLocation,
}
// Initializing the AppMetrica SDK.
AppMetrica.activate(config);
```

要在应用运行时发送自定义设备位置数据，请使用
`AppMetrica.setLocation(location?: Location)` 方法。

```javascript translate=no
AppMetrica.setLocation(currentLocation);
```

## 发送自定义事件 {#report-event}

要发送没有嵌套参数的自定义事件，请将事件的短名称或描述传递给 `AppMetrica.reportEvent(eventName: string, attributes?: Record<string, any>)`
 方法：

```javascript translate=no
AppMetrica.reportEvent("Updates installed");
```

## 发送自定义事件，包含嵌套参数 {#report-event-params}

使用 AppMetrica SDK，您可以发送自定义事件，事件包含嵌套参数
，格式为 JSON。 对于此，使用`AppMetrica.reportEvent(eventName: string, attributes?: Record<string, any>)` 方法：

```javascript translate=no
AppMetrica.reportEvent('My event', {foo: 'bar'});
```

网页界面AppMetrica显示事件最多五级嵌套。 因此，如果事件有六级或以上，只会在
报告中显示前五级。 您可以使用[报告 API](https://yandex.com/support/appmetrica-io/zh/mobile-api/stat/intro.md)导出最多十
个级别。

要了解更多关于事件的信息，请查看[事件](https://yandex.com/support/appmetrica-io/zh/data-collection/about-events.md)。

## 发送自定义错误消息 {#send-report-error}

要发送自定义错误消息，请使用该
`AppMetrica.reportError(identifier: string, message: string)` 方法。

```javascript translate=no
try {
...
} catch (e: Error) {
  AppMetrica.reportError('my error', e.message);
}
```

错误按 ID 分组。 不要使用变量值作为分组 ID。
否则，组的数量会增加，分析起来就会困难。

## 从缓冲区发送事件 {#send-events-buffer}

AppMetrica SDK 不会在事件发生后立即发送事件。 库存将事件数据保存在缓冲区中。 The `sendEventsBuffer` 方法从缓冲区发送数据并清空缓冲区。 使用该方法在用户场景的重要检查点之后强制发送已存储的事件。

```javascript translate=no
AppMetrica.sendEventsBuffer();
```

{% note alert "" %}

如果您经常使用此方法，可能会导致互联网流量和电力消耗增加。

{% endnote %}

## 手动监控应用生命周期 {#listen}

AppMetrica 会自动跟踪会话边界。 您可以通过在扩展库配置中将 `false` 传递给 `sessionsAutoTrackingEnabled` 属性来关闭自动会话跟踪。

```javascript translate=no
AppMetrica.activate({
  apiKey: API_KEY,
  sessionsAutoTracking: false
});
```

要手动监控应用生命周期，请使用以下方法：

- 暂停会话：

    ```javascript translate=no
    AppMetrica.pauseSession();
    ```

- 恢复会话或开始新会话：

    ```javascript translate=no
    AppMetrica.resumeSession();
    ```

## Sending ProfileId {#send-profile-id}

如果在初始化 AppMetrica SDK 之前已知用户资料 ID，请在初始化前传入 (`setUserProfileID`)：

```javascript translate=no
AppMetrica.setUserProfileID('your-id');
AppMetrica.activate({apiKey: 'API_KEY'});
```

或在初始化时使用扩展配置 (`userProfileID`)：

```javascript translate=no
AppMetrica.activate({
    apiKey: 'API_KEY',
    userProfileID: 'your-id',
});
```

否则，使用 ID `appmetrica_device_id` 创建用户配置文件。

{% note warning "" %}

AppMetrica 在网页界面中不会显示 `预定义属性`，如果未配置 [ProfieId](https://yandex.com/support/appmetrica-io/zh/data-collection/profile-attributes.md#pre-defined) 的发送。

{% endnote %}

您可以在任何时间通过调用 `ProfileId` 来更新 `setUserProfileID`：


```javascript translate=no
AppMetrica.setUserProfileID('your-id');
```

## 发送配置文件属性 {#send-attribute-profile}

要发送用户属性，请将必要的属性传递给 `UserProfile` 类的实例，然后使用 `AppMetrica.reportUserProfile(userProfile: UserProfile)` 方法发送该实例。 要创建个人属性，请使用`Attributes`类的方法。

```javascript translate=no
import AppMetrica, {Attributes, UserProfile} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
// Creating the UserProfile instance.
const userProfile = new UserProfile()
  // Updating predefined attributes.
  .apply(Attributes.userName().withValue('John'))
  .apply(Attributes.gender().withValue('male'))
  .apply(Attributes.birthDate().withAge(24))
  .apply(Attributes.notificationsEnabled().withValue(false))
  // Updating custom attributes.
  .apply(Attributes.customString('string_attribute').withValue('string'))
  .apply(Attributes.customNumber('number_attribute').withValue(55.0))
  .apply(Attributes.customCounter('counter_attribute').withDelta(1.0))
  .apply(Attributes.customBoolean('boolean_attribute').withValue(true));

// Setting the ProfileID using the method of the AppMetrica class.
AppMetrica.setUserProfileID('your-id');

// Sending the UserProfile instance.
AppMetrica.reportUserProfile(userProfile);
```

## 发送电子商务事件 {#send-ecommerce}

对于不同的用户操作，存在相应的电商事件类型。 要创建特定的事件类型，
使用适当的`ECommerce`类方法。

下面的示例展示了如何发送特定类型的事件：

{% cut "打开页面" %}

```javascript translate=no
import AppMetrica, {
  ECommerce,
  ECommerceScreen,
} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const payload: Record<string, string> = {
  configuration: 'landscape',
  full_screen: 'true',
};
// Creating a screen object.
const screen: ECommerceScreen = {
  name: 'ProductCardActivity',               // Optional.
  searchQuery: 'danissimo maple syrup',  // Optional.
  payload: payload,                          // Optional.
  categoriesPath: ['Promos', 'Hot deal'], // Optional.
};
const showScreen = ECommerce.showScreenEvent(screen);
// Sending an e-commerce event.
AppMetrica.reportECommerce(showScreen);
```

{% endcut %}

{% cut "查看产品卡片" %}

```javascript translate=no
import AppMetrica, {
  ECommerce,
  ECommerceAmount,
  ECommercePrice,
  ECommerceProduct,
  ECommerceScreen,
} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const payload: Record<string, string> = {
  configuration: 'landscape',
  full_screen: 'true',
};
// Creating a screen object.
const screen: ECommerceScreen = {
  name: 'ProductCardActivity',               // Optional.
  searchQuery: 'danissimo maple syrup',  // Optional.
  payload: payload,                          // Optional.
  categoriesPath: ['Promos', 'Hot deal'], // Optional.
};
const amount: ECommerceAmount = {
  amount: 4.53,
  unit: 'USD',
};
// Creating an actualPrice object.
const actualPrice: ECommercePrice = {
  amount: amount,
  internalComponents: [  // Optional.
    {
      amount: 30570000,
      unit: 'wood',
    },
    {
      amount: 26.89,
      unit: 'iron',
    },
    {
      amount: 5.1,
      unit: 'gold',
    },
  ],
};
// Creating an originalPrice object.
const originalPrice: ECommercePrice = {
  amount: {amount: 5.78, unit: 'USD'},
  internalComponents: [  // Optional.
    {
      amount: 30570000,
      unit: 'wood',
    },
    {
      amount: 26.89,
      unit: 'iron',
    },
    {
      amount: 5.1,
      unit: 'gold',
    },
  ],
};
// Creating a product object.
const product: ECommerceProduct = {
  sku: '779213',
  name: 'Danissimo Сurd Dessert 5.9%, 130 g',  // Optional.
  actualPrice: actualPrice, // Optional.
  originalPrice: originalPrice, // Optional.
  promocodes: ['BT79IYX', 'UT5412EP'],  // Optional.
  payload: payload,    // Optional.
  categoriesPath: ['Groceries', 'Dairy', 'Yogurts']  // Optional.
};
// Sending an E-commerce event.
AppMetrica.reportECommerce(ECommerce.showProductCardEvent(product, screen));
```

{% endcut %}

{% cut "查看产品页面" %}

```javascript translate=no
import AppMetrica, {
  ECommerce,
  ECommerceAmount,
  ECommercePrice,
  ECommerceProduct,
  ECommerceReferrer,
  ECommerceScreen,
} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const payload: Record<string, string> = {
  configuration: 'landscape',
  full_screen: 'true',
};
// Creating a screen object.
const screen: ECommerceScreen = {
  name: 'ProductCardActivity',               // Optional.
  searchQuery: 'danissimo maple syrup',  // Optional.
  payload: payload,                          // Optional.
  categoriesPath: ['Promos', 'Hot deal'], // Optional.
};

const amount: ECommerceAmount = {
  amount: 4.53,
  unit: 'USD',
};
// Creating an actualPrice object.
const actualPrice: ECommercePrice = {
  amount: amount,
  internalComponents: [  // Optional.
    {
      amount: 30570000,
      unit: 'wood',
    },
    {
      amount: 26.89,
      unit: 'iron',
    },
    {
      amount: 5.1,
      unit: 'gold',
    },
  ],
};
// Creating an originalPrice object.
const originalPrice: ECommercePrice = {
  amount: {amount: 5.78, unit: 'USD'},
  internalComponents: [  // Optional.
    {
      amount: 30570000,
      unit: 'wood',
    },
    {
      amount: 26.89,
      unit: 'iron',
    },
    {
      amount: 5.1,
      unit: 'gold',
    },
  ],
};
// Creating a product object.
const product: ECommerceProduct = {
  sku: '779213',
  name: 'Danissimo Сurd Dessert 5.9%, 130 g',  // Optional.
  actualPrice: actualPrice, // Optional.
  originalPrice: originalPrice, // Optional.
  promocodes: ['BT79IYX', 'UT5412EP'],  // Optional.
  payload: payload,    // Optional.
  categoriesPath: ['Groceries', 'Dairy', 'Yogurts']  // Optional.
};

const referrer: ECommerceReferrer = {
  type: 'button',
  identifier: '76890',
  screen: screen,
};

const showProductDetails = ECommerce.showProductDetailsEvent(product, referrer);
// Sending an E-commerce event.
AppMetrica.reportECommerce(showProductDetails);
```

{% endcut %}

{% cut "将物品添加到购物车/从购物车中移除" %}

```javascript translate=no
import AppMetrica, {
  ECommerce,
  ECommerceAmount,
  ECommerceCartItem,
  ECommerceOrder,
  ECommercePrice,
  ECommerceProduct,
  ECommerceReferrer,
  ECommerceScreen,
} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const payload: Record<string, string> = {
  configuration: 'landscape',
  full_screen: 'true',
};
// Creating a screen object.
const screen: ECommerceScreen = {
  name: 'ProductCardActivity',               // Optional.
  searchQuery: 'danissimo maple syrup',  // Optional.
  payload: payload,                          // Optional.
  categoriesPath: ['Promos', 'Hot deal'], // Optional.
};

const amount: ECommerceAmount = {
  amount: 4.53,
  unit: 'USD',
};
// Creating an actualPrice object.
const actualPrice: ECommercePrice = {
  amount: amount,
  internalComponents: [  // Optional.
    {
      amount: 30570000,
      unit: 'wood',
    },
    {
      amount: 26.89,
      unit: 'iron',
    },
    {
      amount: 5.1,
      unit: 'gold',
    },
  ],
};
// Creating an originalPrice object.
const originalPrice: ECommercePrice = {
  amount: {amount: 5.78, unit: 'USD'},
  internalComponents: [  // Optional.
    {
      amount: 30570000,
      unit: 'wood',
    },
    {
      amount: 26.89,
      unit: 'iron',
    },
    {
      amount: 5.1,
      unit: 'gold',
    },
  ],
};
// Creating a product object.
const product: ECommerceProduct = {
  sku: '779213',
  name: 'Danissimo Сurd Dessert 5.9%, 130 g',  // Optional.
  actualPrice: actualPrice, // Optional.
  originalPrice: originalPrice, // Optional.
  promocodes: ['BT79IYX', 'UT5412EP'],  // Optional.
  payload: payload,    // Optional.
  categoriesPath: ['Groceries', 'Dairy', 'Yogurts']  // Optional.
};
// Creating a referrer object.
const referrer: ECommerceReferrer = {
  type: 'button', // Optional.
  identifier: '76890', // Optional.
  screen: screen, // Optional.
};
// Creating a cartItem object.
const ecommerceCartItem: ECommerceCartItem = {
  product: product,
  price: actualPrice,
  quantity: 1.0,
  referrer: referrer, // Optional.
};

const addCartItem = ECommerce.addCartItemEvent(ecommerceCartItem);
// Sending an E-commerce event.
AppMetrica.reportECommerce(addCartItem);

const removeCartItem = ECommerce.removeCartItemEvent(ecommerceCartItem);
// Sending an E-commerce event.
AppMetrica.reportECommerce(removeCartItem);
```

{% endcut %}

{% cut "开始并完成购买" %}

```javascript translate=no
import AppMetrica, {
  ECommerce,
  ECommerceAmount,
  ECommerceCartItem,
  ECommerceOrder,
  ECommercePrice,
  ECommerceProduct,
  ECommerceReferrer,
  ECommerceScreen,
} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const payload: Record<string, string> = {
  configuration: 'landscape',
  full_screen: 'true',
};
// Creating a screen object.
const screen: ECommerceScreen = {
  name: 'ProductCardActivity',               // Optional.
  searchQuery: 'danissimo maple syrup',  // Optional.
  payload: payload,                          // Optional.
  categoriesPath: ['Promos', 'Hot deal'], // Optional.
};

const amount: ECommerceAmount = {
  amount: 4.53,
  unit: 'USD',
};
// Creating an actualPrice object.
const actualPrice: ECommercePrice = {
  amount: amount,
  internalComponents: [  // Optional.
    {
      amount: 30570000,
      unit: 'wood',
    },
    {
      amount: 26.89,
      unit: 'iron',
    },
    {
      amount: 5.1,
      unit: 'gold',
    },
  ],
};
// Creating an originalPrice object.
const originalPrice: ECommercePrice = {
  amount: {amount: 5.78, unit: 'USD'},
  internalComponents: [  // Optional.
    {
      amount: 30570000,
      unit: 'wood',
    },
    {
      amount: 26.89,
      unit: 'iron',
    },
    {
      amount: 5.1,
      unit: 'gold',
    },
  ],
};
// Creating a product object.
const product: ECommerceProduct = {
  sku: '779213',
  name: 'Danissimo Сurd Dessert 5.9%, 130 g',  // Optional.
  actualPrice: actualPrice, // Optional.
  originalPrice: originalPrice, // Optional.
  promocodes: ['BT79IYX', 'UT5412EP'],  // Optional.
  payload: payload,    // Optional.
  categoriesPath: ['Groceries', 'Dairy', 'Yogurts']  // Optional.
};
// Creating a referrer object.
const referrer: ECommerceReferrer = {
  type: 'button', // Optional.
  identifier: '76890', // Optional.
  screen: screen, // Optional.
};
// Creating a cartItem object.
const ecommerceCartItem: ECommerceCartItem = {
  product: product,
  price: actualPrice,
  quantity: 1.0,
  referrer: referrer, // Optional.
};

const order: ECommerceOrder = {
  orderId: '88528768',
  products: [ecommerceCartItem],
  payload: undefined,
};

const beginCheckout = ECommerce.beginCheckoutEvent(order);
// Sending an E-commerce event.
AppMetrica.reportECommerce(beginCheckout);

const purchase = ECommerce.purchaseEvent(order);
// Sending an E-commerce event.
AppMetrica.reportECommerce(purchase);
```

{% endcut %}

## 发送收入事件 {#send-revenue}

{% cut "带验证" %}

AppMetrica 支持通过 [Google Play Billing](https://developer.android.com/google/play/billing/billing_overview) 和 [StoreKit](https://developer.apple.com/documentation/storekit) 库进行应用内购买验证。

为了验证购买，请配置发送 `收据` 实例以及 `收入`：

- 在 Android 上，使用 `Receipt` 将 [originalJson](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getOriginalJson()) 发送到 `receiptData`，并将 [signature](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getSignature()) 发送到 `signature` 属性。

- 在 iOS 上，在实现交易完成时配置发送 `transactionID` 和 `receiptData` 字段：

```javascript translate=no
import AppMetrica, {Revenue} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const revenue: Revenue = {
  price: 500,
  currency: 'USD',
  productID: '12345',
  quantity: 1,
  payload: JSON.stringify({test: 'test'}),
  receipt: {
    receiptData: purcahse.getOriginalJson(),
    signature: purcahse.getSignature(),
  },
};
AppMetrica.reportRevenue(revenue);
```

{% endcut %}

{% cut "不带验证" %}

```javascript translate=no
import AppMetrica, {Revenue} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const revenue: Revenue = {
  price: 500,
  currency: 'USD',
  productID: '12345',
  quantity: 1,
  payload: JSON.stringify({test: 'test'}),
};
AppMetrica.reportRevenue(revenue);
```

{% endcut %}

## 发送广告收入事件 {#send-adrevenue}

```javascript translate=no
import AppMetrica, {
  AdRevenue,
  AdType
} from '@appmetrica/react-native-analytics';
```

创建一个`AdRevenue`实例：

```javascript translate=no
const adRevenue: AdRevenue = {
  price: 0.1,
  currency: 'USD',
  payload: {payload_key_1: 'payload_value_1'},
  adNetwork: 'ad_network',
  adPlacementID: 'ad_placement_id',
  adPlacementName: 'ad_placement_name',
  adType: AdType.NATIVE,
  adUnitID: 'ad_unit_id',
  adUnitName: 'ad_unit_name',
  precision: 'some precision',
};
```

发送 `AdRevenue` 实例，使用 `AppMetrica.reportAdRevenue(adRevenue: AdRevenue)` 方法：

```javascript translate=no
AppMetrica.reportAdRevenue(adRevenue);
```

## 设置会话超时时长 {#session-timeout}

默认情况下，会话超时时间为10秒。 这是
`sessionTimeout`属性允许的最小值。

要更改超时时长，请将以秒为单位的值传递给 `sessionTimeout` 方法，在创建扩展
library 配置时。

```javascript translate=no
// Creating an extended library configuration.
const config: AppMetricaConfig = {
  apiKey: API_KEY,
  // Setting session timeout.
  sessionTimeout: 15,
};
// Initializing the AppMetrica SDK.
AppMetrica.activate(config);
```

## 设置应用版本 {#version-app}

要以编程方式指定应用版本，请将应用版本传递给 `appVersion` 属性，在
创建扩展库配置时。

```javascript translate=no
  // Creating an extended library configuration.
const config: AppMetricaConfig = {
  apiKey: API_KEY,
  // Setting the app version.
  appVersion: '1.0',
};
// Initializing the AppMetrica SDK.
AppMetrica.activate(config);
```

其中 `1.0` 是应用版本。

## 确定库的API级别（Android） {#level-api-android}

要从应用程序代码确定库的 API 级别，请使用 `AppMetrica.getLibraryApiLevel()` 方法。

```javascript translate=no
const [libraryApiLevel, setLibraryApiLevel] = useState('???');
AppMetrica.getLibraryApiLevel().then(level => {
  setLibraryApiLevel(level);
});
```

## 确定库的版本 {#version-sdk}

要从应用程序代码中确定库版本，请使用 `AppMetrica.getLibraryVersion()` 方法：

```javascript translate=no
const [appMetricaVersion, setAppMetricaVersion] = useState('???');
AppMetrica.getLibraryVersion().then(version => {
  setAppMetricaVersion(version);
});
```

## 通过深链路跟踪应用打开 {#deeplink}

Deeplink 打开次数默认被跟踪。 您可以通过使用扩展配置来禁用此功能：

```javascript translate=no
  // Creating an extended library configuration.
const config: AppMetricaConfig = {
  apiKey: API_KEY,
  appOpenTrackingEnabled: false,
};
// Initializing the AppMetrica SDK.
AppMetrica.activate(config);
```

如有需要，您可以手动使用
`reportAppOpen()`方法：

```javascript translate=no
AppMetrica.reportAppOpen(deeplink);
```

要了解更多信息，请参见[如何在 AppMetrica 中创建再营销活动？](https://yandex.com/support/appmetrica-io/zh/troubleshooting/troubleshooting.md#remarketing-campaign)

## 请求延迟深链 {#deferreddeeplink-request}

要获取延迟深链，请将实现 `DeferredDeeplinkListener` 接口的对象传递给 `AppMetrica.requestDeferredDeeplink(listener: DeferredDeeplinkListener)`. 该方法仅在应用首次启动并获取 Google Play Install Referrer 后返回延迟深链。

```javascript translate=no
const deferredDeeplinkListener: DeferredDeeplinkListener = {
  onSuccess: (deeplink: string) => {
    console.log('Deferred deeplink:', deeplink);
  },
  onFailure: (error: DeferredDeeplinkError, referrer?: string) => {
    console.log(`Deferred deeplink error: ${error}, referrer: ${referrer}`);
  },
};
AppMetrica.requestDeferredDeeplink(deferredDeeplinkListener);
```

关于延迟深链的更多信息，请参见[延迟深链支持](https://yandex.com/support/appmetrica-io/zh/sdk/android/analytics/android-deferred-deeplinks.md)

## 请求延迟深度链接参数 {#deferreddeeplink-parameters-request}

要获取延迟深链参数，请将实现 `DeferredDeeplinkParametersListener` 接口的对象传递给 `AppMetrica.requestDeferredDeeplinkParameters(listener: DeferredDeeplinkParametersListener)`. 该方法仅在从 Google Play 获取安装来源（Install Referrer）后的第一次应用启动时返回延迟深链参数。

```javascript translate=no
const deferredDeeplinkParametersListener: DeferredDeeplinkParametersListener = {
  onSuccess: (parameters: Record<string, string>) => {
    console.log('Deferred deeplink parameters:', parameters); // or JSON.stringify(parameters)
  },
  onFailure: (error: DeferredDeeplinkError, referrer?: string) => {
    console.log(`Deferred deeplink parameters error: ${error}, referrer: ${referrer}`);
  },
};
AppMetrica.requestDeferredDeeplinkParameters(deferredDeeplinkParametersListener);
```

关于延迟深链的更多信息，请参见[延迟深链支持](https://yandex.com/support/appmetrica-io/zh/sdk/android/analytics/android-deferred-deeplinks.md)


## 跟踪新用户 {#new-user}

默认情况下，当用户第一次打开应用时，会被视为新用户。 如果 AppMetrica SDK
 连接到已有活跃用户的应用，要获取有效的统计数据，您可以设置
跟踪新旧用户。 要做到这一点，请初始化AppMetrica SDK，使用扩展的
启动配置，`AppMetricaConfig`：

```javascript translate=no
const isFirstLaunch: Boolean = false;
// Implement logic to detect whether the app is opening for the first time.
// For example, you can check for files (settings, databases, and so on),
// which the app creates on its first launch.
if (conditions) {
  isFirstLaunch = true;
}
// Creating an extended library configuration.
const config: AppMetricaConfig = {
  apiKey: API_KEY,
  firstActivationAsUpdate: !isFirstLaunch,
};
// Initializing the AppMetrica SDK.
AppMetrica.activate(config);
```

## 禁用和启用发送统计数据 {#stat}

如果需要在发送统计数据前获取用户同意，请将库初始化时禁用
统计数据发送选项。 要做到这一点，传递 `false` 给 `statisticsSending` 属性，在创建 
扩展库配置。

```javascript translate=no
// Creating an extended library configuration.
const config: AppMetricaConfig = {
  apiKey: API_KEY,
  // Disabling sending data.
  statisticsSending: false,
};
// Initializing the AppMetrica SDK.
AppMetrica.activate(config);
```

在用户同意发送统计数据后（例如通过应用设置或在
首次应用启动期间授予权限），使用 `AppMetrica.setDataSendingEnabled(true)` 方法来启用统计数据发送：

```javascript translate=no
// Checking the status of the boolean variable. It shows the user confirmation.
if (flag) {
  // Enabling sending data.
  AppMetrica.setDataSendingEnabled(true);
}
```

### 警告示例 {#stat-alert-example}

您可以使用任何文本来告知用户统计数据的收集。 例如：

> 此应用使用由 YANDEX LLC 提供的 AppMetrica 分析服务,
> 列夫·托尔斯泰街16号，莫斯科，俄罗斯119021（以下称为“Yandex”），根据[使用条款](https://yandex.com/legal/metrica_termsofuse/)。
>
> AppMetrica 分析应用使用数据，包括应用运行设备的信息，
> 安装源、转换和您活动的统计数据，用于产品分析，
> 广告活动优化和故障排除。 通过这种方式收集的数据不能
> 用于识别您。
>
> AppMetrica 工具收集的关于您使用此应用的脱敏信息
> 将被转移到 Yandex 并存储在位于欧盟和俄罗斯联邦的 Yandex 服务器上。 Yandex 将处理此内容
> 提供您应用使用统计信息，为我们生成应用性能报告，
> 并提供其他服务。

## Getting AppMetrica SDK IDs {#get-ids}

To get AppMetrica SDK IDs (`DeviceId`, `DeviceIdHash`, `UUID`), use the
`requestStartupParams()` method. To get the `appmetrica_device_id`, make sure to request the `DeviceIdHash`.

```javascript translate=no
import AppMetrica, {
  DEVICE_ID_HASH_KEY,
  DEVICE_ID_KEY,
  UUID_KEY,
  StartupParams,
  StartupParamsCallback,
  StartupParamsReason,
} from '@appmetrica/react-native-analytics';
```

```javascript translate=no
const paramsList: Array<string> = [
  DEVICE_ID_HASH_KEY,
  DEVICE_ID_KEY,
  UUID_KEY,
];
const paramsCallback: StartupParamsCallback = (params?: StartupParams, reason?: StartupParamsReason) => {
  // ...
};

AppMetrica.requestStartupParams(paramsCallback, paramsList);
```

<!-- source: zh/_includes/feedback-button-3.md -->
如果您没有找到所需答案，可以通过反馈表单提交您的问题。 请尽可能详细地描述问题。 如果可能，请附上截图。

<a href="../troubleshooting/feedback-new">
  <span class="button">联系支持</span>
</a>

<a href="../troubleshooting/feedback-docs">
  <span class="button">为文档提出改进建议</span>
</a>
<!-- endsource: zh/_includes/feedback-button-3.md -->
