# Unity SDK For PC [Unity](http://unity3d.com/)アプリからTreasure Dataにデータを送信するには、Unity SDKライブラリを使用します。SDKを使用することで、Webサイトのアクティビティを追跡するためにサーバー側に何もインストールする必要がありません。 ## GDPRコンプライアンス 欧州一般データ保護規則などの国内およびグローバルなデータプライバシー要件への準拠をサポートするため、当社のSDKは、アプリケーションやWebサイトにおける個人データおよびメタデータの収集と追跡を制御するメソッドを提供しています。企業が個人データに関するデータプライバシーポリシーを定義する際、これらのメソッドをコード内で使用して、デフォルトのデータ収集動作を実装し、個人がデータ収集とプライバシーを自分で管理するためのコントロールを追加できます。 Treasure Dataのお客様は、個人データを収集する使用を含むSDKの使用が、Treasure Dataサービスへのアクセスと使用を管理する法的契約、特に[Treasure Dataの現行利用規約](https://www.treasuredata.com/terms/)、[プライバシーポリシー](https://www.treasuredata.com/privacy/)、および[顧客データのプライバシーステートメント](https://www.treasuredata.com/td-downloads/Privacy-Statement-for-Customer-Data.pdf)に準拠していることを確認する必要があります。 ## 前提条件 - Unity開発の基礎知識 - Treasure Dataの基礎知識 ## ライブラリのインストール 最新バージョンの[Unity package](https://github.com/treasure-data/td-unity-sdk-package)をダウンロードし、Assets > Import Package > Custom Packageを使用してUnityプロジェクトにインポートします。 ## PC Modeの有効化 Player Settings > Scripting Define SymbolsにシンボルTD_SDK_DEV_MODEを追加します。 # ライブラリの初期化 次に、アプリ内で以下のようにライブラリを初期化します。 ```csharp public class MyTreasureDataPlugin : MonoBehaviour { private TreasureData td = null; void Start() { TreasureData.InitializeApiEndpoint("https://in.treasuredata.com"); td = new TreasureData("YOUR_API_KEY"); ... // If you want to use a TDClient over scenes, pass `true` to // `SimpleTDClient.Create` to prevent it from being removed. // Otherwise, pass 'false' If you want to use a TDClient only // within a scene, don't pass `true` to `SimpleTDClient.Create` // so that you can prevent object leaks. td.SetSimpleTDClient(SimpleTDClient.Create(true)); } void OnApplicationPause(bool pauseStatus) { // Make an open request whenever app is resumed if (!pauseStatus) { td.UploadEvents( delegate() { Debug.LogWarning ("UploadEvents Success!!! "); }, delegate(string errorCode, string errorMsg) { Debug.LogWarning ("UploadEvents Error!!! errorCode=" + errorCode + ", errorMsg=" + errorMsg); } ); } } void OnApplicationQuit() { // Make an open request when app is quitting td.UploadEvents( delegate() { Debug.LogWarning ("UploadEvents Success!!! "); }, delegate(string errorCode, string errorMsg) { Debug.LogWarning ("UploadEvents Error!!! errorCode=" + errorCode + ", errorMsg=" + errorMsg); } ); } } ``` APIキーはTD [Console](https://console.treasuredata.com/app/users/current)から取得できます。SDKには[**書き込み専用APIキー**](https://docs.treasuredata.com/smart/project-product-documentation/about-access-control)を使用することを推奨します。 バッファされたイベントをいつ、どのくらいの頻度でアップロードするかは、アプリケーションの特性によって異なります。アップロードに適したタイミングには以下が含まれます。 - 現在の画面が閉じられる時、またはバックグラウンドに移動する時 - アプリケーションを閉じる時 ## 個人情報の追跡を有効化(オプション) さまざまなドメインにおけるデータプライバシー規制、特にEUのGDPRに準拠するため、Treasure Data Unity SDKはデフォルトでは個人を特定できる特定のイベントメタデータを収集しません。具体的には、以下の情報はデフォルトでは収集されません。 - td_uuid - クライアントの識別子、このデバイス上のこのアプリケーションのこのインストールに固有 td_uuidは、個々のユーザーを追跡し、ユーザーセッション内および複数セッションにわたってデータを分析し、追跡された行動を実在の個人に関連付ける場合などに必要です。 収集すべき個人情報について、会社のデータプライバシー責任者および法務顧問とデータ収集ポリシーを確認する必要があります。個人の追跡を有効にすることを決定した場合は、同意管理システムと統合して、個々のユーザーの追跡へのオプトインを追跡することも推奨します。 ユーザーの同意を確認したら、個人データの収集を有効にできます。例: ``` td.EnableAutoAppendUniqId(); ``` テストでは、収集している情報を確認し、意図した個人情報のみが含まれ、それ以上のものが含まれていないことを確認してください。 ## Cloudへのイベント送信 次に、アプリケーション内の適切なタイミングでAddEvent()関数を呼び出します。以下の例は、database_a内のtable_bテーブルにイベントが送信されることを示しています。 ``` Dictionary ev = new Dictionary(); ev["str"] = "strstr"; ev["int"] = 12345; ev["long"] = 12345678912345678; ev["float"] = 12.345; ev["double"] = 12.3459832987654; ev["bool"] = true; td.AddEvent("database_a", "table_b", ev); ``` IPホワイトリストは、Unity SDKからのインポートには適用されません。また、ブラウザは頻繁に無効なタイムスタンプ(1970/01/01など)を指定することが確認されているため、現在、7日前より古く、3日以上先のタイムスタンプを持つレコードは無視されます。 ## その他の機能とオプション ### アプリケーションライフサイクルイベントの追跡 オプションとして、このSDKはアプリライフサイクルイベントを自動的にキャプチャするように有効にできます(デフォルトでは無効)。このオプションを明示的に有効にする必要があります。`setDefaultTable()`を通じてターゲットテーブルを設定できます。 ```csharp [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void OnRuntimeInitialization() { // TreasureData client setup... TreasureData.DefaultTable = "app_lifecycles"; TreasureData.Instance.EnableAppLifecycleEvent(); } ``` 自動的に追跡される3種類のイベントがあります。Application Open、Install、Updateです。これらのイベントは、イベントの特定のタイプに応じた関連メタデータとともにキャプチャされます。 *Application Open* ``` { "tdunityevent": "TDUNITYAPPOPEN", "tdapp_ver": "1.0", ... } ``` *Application Install* ``` { "tdunityevent": "TDUNITYAPPINSTALL", "tdapp_ver": "1.0", ... } ``` *Application Update* ``` { "tdunityevent": "TDUNITYAPPUPDATE", "tdappver": "1.1", "tdapppreviousver": "1.0", ... } ``` ## オプトアウト このSDKは、特定のデバイスのすべてのイベント追跡をオプトアウトし、`td_uuid`をリセット(または完全に無効化)することでユーザーを非識別化できます。後続のすべてのイベントに対して`td_uuid`を別のIDに変更できます。 ```csharp TreasureData.Instance.disableCustomEvent(); // disable your own events, ones that collect through manual calls to addEvent... TreasureData.Instance.disableAppLifecycleEvent(); // disable the auto-collected app lifecycle events ``` 他のオプションフラグとは異なり、enable/disableCustomEventとenable/disableAppLifecycleEventは永続的な設定であり、これらの設定はアプリの起動を跨いで保持されます。ユーザーが追跡されたくないことを示した場合は、この呼び出しを使用することが重要です。Treasure Dataクライアントのセットアップごとにオプションを呼び出す必要はありません。 ```csharp TreasureData.Instance.resetUniqId(); TreasureData.Instance.disableAppendUniqId(); // temporary configuration, need to call on Treasure Data client setup ``` オプションフラグ`resetUniqId`は、`DefaultTable`に監査イベントも追加します。 ```csharp { "td_unity_event": "forget_device_uuid", "td_uuid": , } ``` ## アップロードの再試行と重複排除 モバイルまたはUnity SDKのデータ転送中の重複レコードを回避するため、Treasure Dataはレコードごとの重複排除を提供しています。 レコードごとの重複排除は、顧客がレコード内で提供したUUIDフィールド(またはメタデータとして提供される内部割り当てUUID)に基づいています。 SDKは、これらの機能の組み合わせにより1つのスタイルでイベントをインポートします。 - このSDKは、一意のキーを追加してバッファされたイベントを保持し、イベントがサーバー側にアップロードおよび保存されたことを確認するまでアップロードを再試行します(少なくとも1回) - サーバー側は、デフォルトで過去1時間以内のすべてのイベントの一意のキーを記憶し、重複インポートを防ぐことができます 重複排除は、同じデータセット内で同じ識別子を持つレコードが最大で過去1時間以内、または過去4096レコード以内(いずれか早い方)に見られた場合に重複レコードを識別するベストエフォートシステムです。 ## 次のステップ Unity SDKはGithubで入手できます。最新のSDKを使用していることを確認するため、リポジトリをチェックしてください。 - [https://github.com/treasure-data/td-unity-sdk-package](https://github.com/treasure-data/td-unity-sdk-package)