# \[React Native]イベントを送信する

アプリケーションにおけるユーザーの行動情報（以降イベント）をKARTEに送信することが可能です。

KARTEに送信したイベントは、解析され統計値として保持されます。\
解析済みの統計値は、セグメントやアクション（アプリ内メッセージの表示やプッシュ通知など）のトリガーとして利用することができます。

## イベントの送信方法

イベントを送信するためには、下記の手順でアプリケーションにコードを追加します。

1. SDKのインポート宣言を追加 イベント送信処理を実装するファイルの先頭にインポート宣言を追加します。

{% code overflow="wrap" %}

```typescript
import { Tracker } from '@react-native-karte/core';
```

{% endcode %}

2. イベント送信するためのコードを追加 例として「商品をお気に入りに追加」したことを表現するイベントを送信します。

{% code overflow="wrap" %}

```typescript
Tracker.track("favorite", {
  "id": "P00003",
  "name": "ミネラルウォーター（500ml）",
  "price": 100,
});
```

{% endcode %}

## イベントの種類

KARTE では目的に応じて `view` `identify` `track` の3つのイベント送信メソッドを提供しています。

### 画面の表示イベントを送信する

ある画面の表示（閲覧）したことをイベントとして送信する場合は、`view` メソッドを利用します。

第1引数には、画面を一意に識別するための識別子を指定します。\
第2引数には、画面の名称（タイトル）を指定します。

このメソッドを利用して送信するイベントは `view` イベントと呼ばれます。

{% code overflow="wrap" %}

```typescript
Tracker.view("signup", "会員登録");
```

{% endcode %}

なお画面の表示イベントの送信は、track メソッドを利用しても行うことが可能です。 下記コードは、上記コードと同等の意味合いとなります。

{% code overflow="wrap" %}

```typescript
Tracker.track("view", {
  "view_name": "signup",
  "title": "会員登録",
});
```

{% endcode %}

### ユーザーの情報を送信する

ユーザーに紐付く情報（ユーザーIDや名前、年齢等）を送信する場合は、`identify` メソッドを利用します。

第1引数には、ユーザーに紐付ける情報を指定します。

このメソッドを利用して送信するイベントは `identify` イベントと呼ばれます。

[ユーザーデータ管理プラグイン](https://support.karte.io/post/6Uu930PTyQBc6SVAOEOTYp)がインストールされたKARTEプロジェクトでは、`identify` イベント 送信の際、`user_id` の値は必須となります。`user_id` の送信なしに、属性情報の送信を行う場合は [attributeイベント](https://support.karte.io/post/1X39NRwR0HXzCtigtRrbLJ) をご利用下さい。

{% code overflow="wrap" %}

```typescript
Tracker.identify({
  "user_id": "ユーザID（文字列）",
  "name": "カルテ太郎",
});
```

{% endcode %}

なお `identify` イベントの送信は、track メソッドを利用しても行うことが可能です。 下記コードは、上記コードと同等の意味合いとなります。

{% code overflow="wrap" %}

```typescript
Tracker.track("identify", {
  "user_id": "ユーザID（文字列）",
  "name": "カルテ太郎",
});
```

{% endcode %}

### 任意の行動イベントを送信する

画面の表示やユーザー情報以外の行動情報について送信する場合は、`track` メソッドを利用します。

第1引数には、行動を表すイベント名を指定します。\
第2引数には、行動に紐付く情報を任意で指定します。

このメソッドを利用して送信するイベントはカスタムイベントと呼ばれます。

{% code overflow="wrap" %}

```typescript
Tracker.track("favorite", {
  "id": "P00003",
  "name": "ミネラルウォーター（500ml）",
  "price": 100,
});
```

{% endcode %}

{% hint style="info" %}
**イベント名の制限と予約済みのイベント名**

イベント名には制限があります。 詳細については、 [イベント名の制限](https://support.karte.io/post/44VkfBjO7JdRnDv9YOfbFB#1-0) をご覧ください。

また一部のイベント名は予約されており、KARTE上で特別な扱いを受けます。 詳細については、[定義済みイベント](https://support.karte.io/post/44VkfBjO7JdRnDv9YOfbFB) をご覧ください。
{% endhint %}

## イベントに付与可能な値の型

各イベントの送信メソッドには、任意でオブジェクトを渡すことが可能です。\
これによりイベントに様々なフィールドを紐付けて送信することが可能になります。

### Keyとして利用可能な型

`string` 型の値のみ利用可能です。

{% hint style="info" %}
**フィールド名の制限**

フィールド名には制限があります。 詳細については、[フィールド名の制限](https://support.karte.io/post/44VkfBjO7JdRnDv9YOfbFB#2-0) をご覧ください。
{% endhint %}

### Valueとして利用可能な型

下記表に記載の型のみ利用可能です。

| 種別         | 型            | 備考                                 |
| ---------- | ------------ | ---------------------------------- |
| 文字列        | `string`     |                                    |
| 数値         | `number`     |                                    |
| 真偽値        | `boolean`    |                                    |
| オブジェクト（辞書） | `object`     |                                    |
| 配列         | `Array<any>` |                                    |
| 日付型        | `Date`       | core 1.4.0 / variables 1.3.0 以上で対応 |

{% hint style="warning" %}
**日付型の扱い**

日付型（Date）は core 1.4.0 および variables 1.3.0 以上で対応しております。 内部的には整数値に変換して送信されます。
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://app.developers.karte.io/react-native-sdk/tracking-react-native-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
