> For the complete documentation index, see [llms.txt](https://app.developers.karte.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://app.developers.karte.io/android-sdk-appendix/appendix-usage-tracking-android-sdk.md).

# \[Android]イベントの送信方法について理解する

## イベントの種類

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

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

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

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

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

{% hint style="warning" %}
**viewイベントの注意点**

viewイベントへのview\_nameの付与は必須です。付与されない場合KARTEにviewイベントは送信されません。

※viewイベントへのtitleは実装観点での必須項目ではありませんが、運用観点（KARTE管理画面用での視認性のため）で、特別な理由がない限りは付与を推奨しています。
{% endhint %}

{% tabs %}
{% tab title="Kotlin" %}
{% code overflow="wrap" %}

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

{% endcode %}
{% endtab %}

{% tab title="Java" %}
{% code overflow="wrap" %}

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

{% endcode %}
{% endtab %}
{% endtabs %}

なお画面の表示イベントの送信は、track メソッドの第1引数に`view`を指定して行うことも可能です。\
下記コードは、上記コードと同等の意味合いとなります。

{% tabs %}
{% tab title="Kotlin" %}
{% code overflow="wrap" %}

```kotlin
Tracker.track("view", mapOf(
  "view_name" to "signup",
  "title" to "会員登録"
))
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}
{% code overflow="wrap" %}

```java
Map<String, Object> values = new HashMap<>();
values.put("view_name", "signup");
values.put("title", "会員登録");
Tracker.track("view", values);
```

{% endcode %}
{% endtab %}
{% endtabs %}

view メソッドの仕様については、[リファレンス](https://plaidev.github.io/karte-sdk-docs/android/core/latest/io.karte.android.tracking/-tracker/index.html#%5Bio.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23java.lang.String%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23java.util.Map%3Cjava.lang.String%2C%3F%3E%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23org.json.JSONObject%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23java.lang.String%23java.util.Map%3Cjava.lang.String%2C%3F%3E%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23java.lang.String%23org.json.JSONObject%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23java.util.Map%3Cjava.lang.String%2C%3F%3E%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23org.json.JSONObject%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23java.lang.String%23java.util.Map%3Cjava.lang.String%2C%3F%3E%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fview%2F%23java.lang.String%23java.lang.String%23org.json.JSONObject%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%5D%2FFunctions%2F-445401102) をご覧ください。

{% hint style="info" %}
**Viewメソッドの実装位置**

`onResume()` に実装することを推奨します。
{% endhint %}

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

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

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

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

{% hint style="warning" %}
**identifyイベントの注意点**

identifyイベントへのuser\_idの付与は必須です。付与されない場合KARTEにidentifyイベントは送信されません。\
user\_idの確定前にユーザーに紐づく情報を送信する場合 [attributeイベント](https://plaidev.github.io/karte-sdk-docs/android/core/latest/io.karte.android.tracking/-tracker/index.html#%5Bio.karte.android.tracking%2FTracker%2Fattribute%2F%23java.util.Map%3Cjava.lang.String%2C%3F%3E%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fattribute%2F%23org.json.JSONObject%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fattribute%2F%23java.util.Map%3Cjava.lang.String%2C%3F%3E%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fattribute%2F%23org.json.JSONObject%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%5D%2FFunctions%2F-445401102) を使用してください。\
なお、 [attributeイベント](https://plaidev.github.io/karte-sdk-docs/android/core/latest/io.karte.android.tracking/-tracker/index.html#%5Bio.karte.android.tracking%2FTracker%2Fattribute%2F%23java.util.Map%3Cjava.lang.String%2C%3F%3E%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fattribute%2F%23org.json.JSONObject%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fattribute%2F%23java.util.Map%3Cjava.lang.String%2C%3F%3E%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fattribute%2F%23org.json.JSONObject%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%5D%2FFunctions%2F-445401102) には個人情報を含めないよう十分にご注意ください。\
詳細は[個人情報関連イベントの特別な仕様について](https://support.karte.io/post/5WaAqgOMKu7ghwI9ChBVw3)を参照ください。
{% endhint %}

{% tabs %}
{% tab title="Kotlin" %}
{% code overflow="wrap" %}

```kotlin
Tracker.identify("ユーザーID", mapOf(
  "name" to "カルテ太郎"
))
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}
{% code overflow="wrap" %}

```java
Map<String, Object> values = new HashMap<>();
values.put("name", "カルテ太郎");
Tracker.identify("ユーザーID", values);
```

{% endcode %}
{% endtab %}
{% endtabs %}

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

{% tabs %}
{% tab title="Kotlin" %}
{% code overflow="wrap" %}

```kotlin
Tracker.track("identify", mapOf(
  "user_id" to "ユーザID",
  "name" to "カルテ太郎"
))
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}
{% code overflow="wrap" %}

```java
Map<String, Object> values = new HashMap<>();
values.put("user_id", "ユーザID");
values.put("name", "カルテ太郎");
Tracker.track("identify", values);
```

{% endcode %}
{% endtab %}
{% endtabs %}

identify メソッドの仕様については、[リファレンス](https://plaidev.github.io/karte-sdk-docs/android/core/latest/io.karte.android.tracking/-tracker/index.html#%5Bio.karte.android.tracking%2FTracker%2Fidentify%2F%23java.lang.String%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fidentify%2F%23java.util.Map%3Cjava.lang.String%2C%3F%3E%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fidentify%2F%23org.json.JSONObject%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fidentify%2F%23java.lang.String%23java.util.Map%3Cjava.lang.String%2C%3F%3E%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fidentify%2F%23java.lang.String%23org.json.JSONObject%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fidentify%2F%23java.util.Map%3Cjava.lang.String%2C%3F%3E%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fidentify%2F%23org.json.JSONObject%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fidentify%2F%23java.lang.String%23java.util.Map%3Cjava.lang.String%2C%3F%3E%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Fidentify%2F%23java.lang.String%23org.json.JSONObject%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%5D%2FFunctions%2F-445401102) をご覧ください。

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

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

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

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

{% tabs %}
{% tab title="Kotlin" %}
{% code overflow="wrap" %}

```kotlin
Tracker.track("favorite", mapOf(
  "id" to "P00003",
  "name" to "ミネラルウォーター（500ml）",
  "price" to 100
))
```

{% endcode %}
{% endtab %}

{% tab title="Java" %}
{% code overflow="wrap" %}

```java
Map<String, Object> values = new HashMap<>();
values.put("id", "P00003");
values.put("name", "ミネラルウォーター（500ml）");
values.put("price", 100);
Tracker.track("favorite", values);
```

{% endcode %}
{% endtab %}
{% endtabs %}

track メソッドの仕様については、[リファレンス](https://plaidev.github.io/karte-sdk-docs/android/core/latest/io.karte.android.tracking/-tracker/index.html#%5Bio.karte.android.tracking%2FTracker%2Ftrack%2F%23io.karte.android.tracking.Event%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Ftrack%2F%23java.lang.String%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Ftrack%2F%23io.karte.android.tracking.Event%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Ftrack%2F%23io.karte.android.tracking.Event%23java.lang.String%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Ftrack%2F%23java.lang.String%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Ftrack%2F%23java.lang.String%23java.util.Map%3Cjava.lang.String%2C%3F%3E%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Ftrack%2F%23java.lang.String%23org.json.JSONObject%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Ftrack%2F%23io.karte.android.tracking.Event%23java.lang.String%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Ftrack%2F%23java.lang.String%23java.util.Map%3Cjava.lang.String%2C%3F%3E%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%2C+io.karte.android.tracking%2FTracker%2Ftrack%2F%23java.lang.String%23org.json.JSONObject%23io.karte.android.tracking.TrackCompletion%2FPointingToDeclaration%2F%5D%2FFunctions%2F-445401102) をご覧ください。

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

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

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

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

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

なお Map の `Key` および `Value` には制限があります。

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

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

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

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

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

下記表に記載の型のみ利用可能です。\
なお日付型は内部的に浮動小数点型に変換された上で送信されます。

| 種別     | 型                           |
| ------ | --------------------------- |
| 文字列    | `String`                    |
| 整数     | `Byte` `Short` `Int` `Long` |
| 浮動小数点数 | `Double` `Float`            |
| 真偽値    | `Boolean`                   |
| 日付     | `Date`                      |
| 辞書     | `Map`                       |
| 配列     | `List`                      |

※ その他のオブジェクトを利用してもエラー等にはなりませんが、内部的に `Object.toString` メソッドを呼び出し `String` 型に変換します。
