# バージョン 5.0.0 への移行

> Update your code to migrate from Analytics SDK version 4.x to version 5.0.0.

Analytics SDK の新しい 5.0.0 バージョンには、SDK の初期化と同意フローに対する多数の変更が含まれています。このガイドは、これらの変更のナビゲートに役立ちます。

> **Note:**
>
> 移行中は後方互換性のために従来の初期化と同意のロジックがバージョン 5.0.0 にまだ存在しますが、SDK が意図したとおりに動作するように、できるだけ早く新しいロジックに切り替える必要があります。従来のフロー操作は `Obsolete` 属性でマークが付けられ、SDK の将来のバージョンで削除されます。

従来の初期化フローには、プレイヤーの場所を調べて (GeoIP を使用)、データ収集の同意が必要かどうかや、明示的に拒否されるまではデータ収集が許可されるかどうかを判断するなど、いくつかの自動ステップが含まれていました。これは変更されています。

新しい初期化フローでは、SDK はプレイヤーの場所を **調べず**、アクティビティを自動的には実行 **しません**。新しい初期化フローでは、`StartDataCollection()` メソッドを呼び出すことで SDK を明示的にアクティベートする必要があります。このメソッドは、以下のいずれかに当てはまる場合に **のみ** 呼び出されます。

* 影響を及ぼす適切なデータプライバシー法の下でデータの収集に対する同意をプレイヤーに求め、同意を得た。
* プレイヤーは、明示的な同意を必要としないデータプライバシー法の影響を受け、明示的にオプトアウトしていない。
* プレイヤーは、どのデータプライバシー法の影響も受けない。

`UnityServices.InitializeAsync()` を呼び出しても、Analytics SDK が初期化されます。ただし、この初期化は SDK をメモリに取り込むだけなので、`StartDataCollection()` の呼び出しで明示的にアクティベートするまで '休止' のままになります。同様に、`StopDataCollecton()` メソッドで SDK をアクティベート解除した場合、SDK はメモリに残るため、初期化後のある時点でプレイヤーが同意を提供または回復した場合にこれを再アクティベートできます。

> **Note:**
>
> 新しいフローまたは古いフローからメソッドを呼び出すと、SDK はそのフローに関連付けられている呼び出しのみを受け入れるようにロックされます。両方のフローからメソッドを呼び出そうとした場合、例外がスローされます。

## 初期化フロー##initialization-flow

以前は、初期化フローは以下のようなものでした。

```cs
await UnityServices.InitializeAsync();
List<string> requiredConsents = await AnalyticsService.Instance.CheckForRequiredConsents();

if (consents.Count > 0)
{
	// Show UI element asking the user for their consent //

	bool userGaveConsent = ...

	foreach (string legislationIdentifier in requiredConsents)
	{
		AnalyticsService.Instance.ProvideOptInConsent(identifier, userGaveConsent);
	}
}
```

バージョン 5.0.0 より前のバージョンの SDK では、サービスの初期化により、プレイヤーの場所を調べる (また、プレイヤーが特定のプライバシー法の対象となる地域にいるかどうかを判断する) ウェブリクエストが行われます。このリクエストに失敗した場合は、`CheckForRequiredConsents()` 呼び出しの内部で再試行されました。この 2 回めの試行に失敗した場合、SDK はデータを収集できませんでした。これは事実上、以前に同意があったかどうか、また接続が復元されたときにアップロードできるようにイベントをバッチ化して格納できるかどうかに関係なく、データを収集するためにアプリケーションがインターネット接続で初期化されることを必要としました。

新しい初期化フローは、ウェブリクエストを行いません。代わりに、プレイヤーが、特定のデータプライバシー法で要求されているため個人データの収集に同意が必要な地域にいるかどうかを判断する独自のロジックをビルドする必要があります。プレイヤーの同意があることを確認したら、`StartDataCollection()` メソッドを呼び出して SDK を有効にし、個人データの収集を開始します。プレイヤーが同意しない場合、SDK は `StartDataCollection()` 信号が明示的に与えられるまで休止したままになるため、アクションは必要ありません。

> **Note:**
>
> データプライバシー法への適切なコンプライアンスの詳細については、以下のページを参照してください: [データプライバシー](../privacy-and-consent/manage-data-privacy)、[GDPR と CCPA への準拠](../privacy-and-consent/privacy-overview)、PIPL への準拠。自身の弁護士に相談する必要もあります。

初期化フローは以下のようになります。

```cs
await UnityServices.InitializeAsync();

// Show UI element asking the user for their consent OR retrieve prior consent from storage //

bool userGaveConsent = ...

if (userGaveConsent)
{
	AnalyticsService.Instance.StartDataCollection();
}
```

サービスの初期化後、いつでも `StartDataCollection()` メソッドを呼び出して、データ収集を開始できます。アプリケーションの起動直後に呼び出す必要はありません。

> **Note:**
>
> SDK の休止中に記録されたイベントは破棄されます。後で `StartDataCollection()` が呼び出された場合、これらは送信のためのバッファに **入りません**。イベントは、`StartDataCollection()` を呼び出した後で **のみ** 記録されます。

> **Note:**
>
> **gameStarted** や **clientDevice** などの起動イベントは、`StartDataCollection()` メソッドが呼び出されたときに記録されるようになりましたが、以前はそうではありませんでした。データ収集が開始してから、単一セッション内で停止して再度開始した場合、それらは最初の `StartDataCollection()` で 1 回のみ記録されます。

## オプトアウト##opting-out

以前は、`OptOut()` メソッドは SDK を無効にしてメモリから削除し、プレイヤーのデータ削除のリクエストをトリガーしました。これにより、プレイヤーが後で考えを変えてデータ収集を再びオプトインすることが難しくなりました。SDK は '同意拒否' ステータスの知識を維持し、さらなる初期化を阻止するためです。個人データの収集をオプトアウトしているプレイヤーが必ずしも以前に収集したデータのパージも望んでいるとは限らないため、この時点でのデータ削除のリクエストも不要でした。

新しい `StopDataCollection()` メソッドを呼び出すと、これは SDK を無効にするだけで、必要に応じて後で再アクティベートできるようにメモリに残しておきます。SDK は、その時点までに記録されたイベントの最終アップロードを試行してから、それ以降のイベントを破棄します。

プレイヤーがバックエンドからのデータのパージもリクエストしたい場合は、`RequestDataDeletion()` メソッドを別途呼び出す必要があります。

> **Note:**
>
> データの削除メカニズムは、必要に応じてセッションをまたがっても、成功するまでリクエストの送信を試行し続けます。Analytics SDK は、`PlayerPrefs` API を使用してこのステータスを記憶するため、`PlayerPrefs.DeleteAll()` を呼び出すとプロセスが混乱する可能性があります。

プレイヤーがデータ削除をリクエストせずにオプトアウトした場合でも、後で `RequestDataDeletion()` メソッドを使用してデータのパージをリクエストできます。SDK がアクティブか休止中かにかかわらず、これはいつでも呼び出すことができます。
