> 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/ios-sdk-appendix/concepts-sending-events-ios-sdk.md).

# \[iOS]イベント送信の仕様について

本ドキュメントでは、イベントを送信するまでに行われる処理、具体的にはイベントのバッファリングの仕組みについて説明します。

## イベントのバッファリングについて

発生したイベントは直接KARTEに送られず、一度SDK内部で一定時間バッファリングされた後に、一つのリクエストにまとめられてKARTEに送られます。

具体的には、あるイベントが発生して `100ms` 以内に、他のイベントが発生するかどうかでリクエストが行われるかどうか決まります。\
他のイベントが発生した場合は、新たに発生したイベントを起点に100ms以内にイベントが発生するかどうかの確認が行われます。\
一方他のイベントが発生しなかった場合は、それまでに発生したイベントを一つのリクエストにまとめて送信します。

![buffering1](https://2393392196-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH4XuUv5EgXiqltJXSiRd%2Fuploads%2Fgit-blob-d1ede2069f876274a7bf62cfccab562194cb585d%2F790255c-buffering1.png?alt=media)

## イベントのバッファリングにおける制約

基本的には上記項目に記載した通り、時間経過に基づいてイベントのバッファリング・リクエストが行われますが、いくつかの例外的な制約が設けられており、その制約に該当する場合は即座にリクエストが行われます。

例外的な制約は、以下の通りです。

* 複数の画面に跨がるリクエストは作成できない
* 複数のシーンに跨がるリクエストは作成できない
* 複数のユーザーに跨がるリクエストは作成できない
* 1つのリクエストに含まれるイベントの数は10個までとする

#### 複数の画面に跨がるリクエストとは？

画面Aで発生したイベントと画面Bで発生したイベントは同じリクエストとして送信されることはありません。

これはアプリ内メッセージの表示制御を適切に機能させるために行っているものになります。

![buffering2](https://2393392196-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FH4XuUv5EgXiqltJXSiRd%2Fuploads%2Fgit-blob-86ccb6d591ada189a8dfb18df24ed01b29511110%2Fa49e63f-buffering2.png?alt=media)

イベントがどの画面で発生したのかを認識するためにSDKでは画面の境界を認識する機能があります。\
詳細については下記ドキュメントをご覧ください。

* [画面の境界を認識する条件](/ios-sdk-appendix/concepts-boundary-transition-ios-sdk.md)

#### 複数のシーンに跨がるリクエストとは？

異なるシーンから同時に発生したイベントは同じリクエストとして送信されることはありません。

これはアプリ内メッセージを適切なシーンに表示させるために行っているものになります。

{% hint style="info" %}
**シーンとは**

1つのアプリケーションプロセス上でマルチウィンドウを実現するために iOS13 で導入された概念です。\
これにより iPadOS では SplitView などの機能が提供されるようになりました。
{% endhint %}

#### 複数のユーザーに跨がるリクエストとは？

異なるユーザーから同時に発生したイベントは同じリクエストとして送信されることはありません。

この制約に基づきリクエストが分割されるのは、基本的にビジターIDのリセットを行った時に限ります。
