# 변경 이력

이 프로젝트의 주요 변경 사항을 기록합니다.

이 문서는 [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) 형식을 따르며,
[유의적 버전](https://semver.org/spec/v2.0.0.html)을 준수합니다.

## [0.2.0] - 미정

### 추가

- **통합 리워드 슬롯 API 추가** — 보상형 비디오·배너·공유를 하나의 슬롯 모델로 통합
  - `GetRewardedAdSlots(onSuccess, onFail)` — 활성 리워드 슬롯 목록 조회
  - `GetRewardedAdSlot(slotId, onSuccess, onFail)` — 단일 슬롯 조회
  - `ShowRewardedAd(slot, ...)` 오버로드 — 슬롯 실행 (action `REWARD_VIDEO`/`BANNER`/`SHARE` 자동 디스패치)
  - 새 타입: `RewardSlotData`(`imageUrl`/`title`/`expiresAt`), `RewardedAdSlot`(`slotId`/`action`(string)/`slotData`)
  - 기존 배너 API(`GetAvailableBannerIds`/`GetBanner`/`RunBannerAction`)는 통합 슬롯으로 대체 권장
  - WebGL jslib 브릿지 함수 추가
- **결제(Payment) API 추가** — `TudadaSDK.Instance.payment.*`
  - `GetProducts` / `GetProduct` / `Purchase` / `GetTransaction` (콜백 기반 — `onFail` 은 `PaymentFailResult`, `code` 로 분기)
  - 새 타입: `PaymentProduct`, `PaymentTransaction`, `PaymentFailResult`(`code`/`errMsg`/`txnKey`/`failReason`), `GetProductsResult`/`GetProductResult`/`PurchaseResult`/`GetTransactionResult`
  - JS SDK가 플랫폼(game-web)으로 라운드트립하여 동작 — 가용성·결과 판정은 플랫폼(결제 미제공 시 `PAYMENT_UNAVAILABLE`)
  - WebGL jslib에 4개 결제 브릿지 함수 추가
- **`SystemInfo`/`AppBaseInfo`에 `servicePlatform` 필드 추가** — 호스트 서비스 식별 (`"kakaotalk"`/`"kakaopay"`/`"house"`)

### Deprecated

- **`CreateRewardedVideoAd` / `TudadaRewardedVideoAd` (@deprecated)** — wx 호환 레거시 인스턴스 API. 통합 API `ShowRewardedAd()` 로 대체됐으며 **다음 버전에서 제거될 예정**입니다. `[System.Obsolete]` 특성 추가(사용 시 컴파일 경고).

## [0.1.6] - 2026-05-12

### 추가

- **Banner Ad API 추가 (슬롯 모델)** — 게임이 슬롯별로 배너 이미지를 받아 자체 렌더링하고, 사용자 탭 시 액션을 플랫폼에 위임
  - `GetAvailableBannerIds(onSuccess, onFail)` — 활성 배너 슬롯 ID 목록 조회
  - `GetBanner(bannerId, onSuccess, onFail)` — 슬롯에 매칭되는 배너 데이터 조회
  - `RunBannerAction(bannerId, onSuccess, onFail)` — 사용자 탭 시 호출. 응답은 success/fail 신호만 전달 (보상 지급은 게임이 자체 처리)
  - `Banner` 타입 — `bannerId`(슬롯 이름 겸용), `imageUrl`, `expiresAt?`
  - 새 결과 타입: `GetAvailableBannerIdsResult`, `GetBannerResult`
  - WebGL jslib에 3개 브릿지 함수 추가 (GetAvailableBannerIds, GetBanner, RunBannerAction)
  - Unity Editor 모드에서는 빈/no-op mock 응답으로 폴백
- **`TudadaSDK.GameAction` 액션 로깅 API 추가 (Phase 1)** — 게임 라이프사이클 액션을 fire-and-forget으로 플랫폼에 송신
  - `GameAction.Start(option?)` — `START_PLAY` 액션 송신
  - `GameAction.Complete(option)` — `COMPLETE_PLAY` 액션 송신
  - `GameAction.Exit(option)` — `EXIT_PLAY` 액션 송신
  - 새 파일: `Scripts/TudadaSDK.GameAction.cs`, `Scripts/Types/GameActionTypes.cs` (payload/result/reason 타입)
  - WebGL jslib에 3개 브릿지 함수 추가 (`TudadaSDK_GameAction_Start/Complete/Exit`)
- **`Login()` 응답에 사용자 정보 자격증명 필드 추가**
  - `LoginResult.userInfoPayload` — URL-encoded query string (attribute, authDate, gameUserId, name, profileImageUrl 포함)
  - `LoginResult.userInfoSignature` — payload에 대한 HMAC 서명
  - 게임 서버가 시크릿키만으로 자체 검증 가능한 서명된 사용자 정보. 서버-to-서버 통신 불필요
  - 기존 `LoginResult` 필드(`code`, `userId`, `errMsg`, `errCode`)는 그대로 보존
  - WebGL jslib는 `JSON.stringify`로 자동 직렬화되어 두 필드가 C# 측으로 전달됨
  - Unity Editor mock 데이터에도 두 필드 포함

### 변경

- **`GetUserInfo()` 응답을 Tudada-fit으로 reshape** (Breaking change)
  - 기존 wx 호환 4필드(`encryptedData`/`iv`/`signature`/`rawData`) 제거 — mock만 반환되던 dead surface 정리
  - `userInfoPayload`/`userInfoSignature` 추가 — login 시점에 발급된 자격증명과 동일 값
  - `withCredentials` 파라미터 제거: `GetUserInfo(onSuccess, onFail)` 시그니처로 단순화
  - `TudadaSDK_GetUserInfo` jslib 브릿지 인수에서 `withCredentials` 제거
  - `CreateMockGetUserInfoResult`(Unity Editor mock) 새 필드 셋으로 갱신

## [0.1.5] - 2026-03-30

### 추가

- **ShareForReward API**: 보상형 공유 API 추가
  - `ShareForReward(url, onSuccess, onFail)`: 공유 완료 시 보상 지급
  - 플랫폼에 따라 적절한 공유 방식 자동 선택
  - URL은 선택적 파라미터

## [0.1.4] - 2026-03-18

### 추가

- **ShowRewardedAd API**: 보상형 광고 통합 API 추가
  - `ShowRewardedAd(adUnitId, onSuccess, onFail)`: load + show 일괄 처리
  - `ShowRewardedAdResult`: 시청 완료 여부 (`isEnded`)
  - 플랫폼이 로딩 UI, 재시도, 실패 팝업 자동 처리
  - `CreateRewardedVideoAd`는 레거시로 유지
- **LaunchOptions API**: 게임 실행 시 전달된 런치 옵션 조회 API 추가
  - `GetLaunchOptions()`: 런치 옵션 동기 조회
  - `TudadaLaunchOptions`: 쿼리 파라미터(JSON 문자열) 및 리퍼러 정보 포함
  - `LaunchOptionsReferrerInfo`: 리퍼러 추가 데이터 타입
  - Unity Editor 시뮬레이션 지원 (기본값 반환)
  - 새 타입: `LifecycleTypes.cs`에 `TudadaLaunchOptions`, `LaunchOptionsReferrerInfo` 추가
- **CheckFeature API**: 기능 지원 여부 사전 확인 API 추가
  - `CheckFeature(apiName, onSuccess, onFail)`: API 지원 여부 확인
  - `CheckFeatureResult`: 지원 여부, 미지원 사유, API 이름 포함
  - `CheckFeatureStatus` enum: `supported`, `unknown_api`, `version_required`, `platform_unsupported`, `device_unsupported`, `permission_denied`
  - 성공/실패 모두 `CheckFeatureResult` JSON으로 파싱
  - Unity Editor 시뮬레이션 지원 (항상 `supported` 반환)
  - 새 파일: `Types/CheckFeatureTypes.cs`

---

## [0.1.3] - 2026-02-26

### 추가

- **가속도계 API**: 가속도계 센서 플랫 API 추가
  - `StartAccelerometerSensor()`: 센싱 시작 (sensitivity 설정)
  - `StopAccelerometerSensor()`: 센싱 중지
  - `OnAccelerometerChange` 이벤트: 가속도 변화 수신 (XYZ 축)
  - 민감도(sensitivity) 기반 제어: `sensitive` | `normal` | `insensitive`
  - 내부 싱글톤 패턴으로 센서 관리
  - 새 파일: `Types/AccelerometerTypes.cs`, `Objects/TudadaAccelerometerSensor.cs`
  - Unity Editor 시뮬레이션 지원

---

## [0.1.2] - 2026-02-26

### 추가

- **시스템 API**: `SystemInfo` 및 `AppBaseInfo`에 `environment` 필드 추가
  - 현재 환경을 나타냄 (`"prod"` / `"dev"`)
  - `GetSystemInfoSync()`, `GetSystemInfo()`, `GetAppBaseInfo()` 응답에 포함

---

## [0.1.1] - 2026-02-20

### 변경

- unity-client 측 변경 사항 없음 (내부 SDK 개선만 진행)

---

## [0.1.0] - 2026-02-06

### 추가

#### 인증 API
- 로그인 성공 결과에 `userId` 필드 추가

#### 시스템 정보
- `wifiEnabled` 속성 추가 (boolean 타입, Mock 제거)

### 변경

#### checkSession
- 성공 결과 타입을 `TudadaLoginSuccessResult`에서 `TudadaCallbackResult`로 변경

---

## [0.0.1] - 2026-02-02

최초 릴리스.

### 추가

#### 인증 API
- `Login`, `CheckSession`, `GetUserInfo`

#### 스토리지 API
- 로컬 스토리지: `SetStorage`, `SetStorageSync`, `GetStorage`, `GetStorageSync`
- 스토리지 관리: `RemoveStorage`, `RemoveStorageSync`, `ClearStorage`, `ClearStorageSync`
- 스토리지 정보: `GetStorageInfoSync`
- 클라우드 스토리지: `TudadaStoreSave`, `TudadaStoreGet`

#### 시스템 API
- `GetSystemInfoSync`, `GetSystemInfo`
- `GetWindowInfo`, `GetAppBaseInfo`, `GetDeviceInfo`
- `GetMenuButtonBoundingClientRect`

#### 디바이스 API
- 진동: `VibrateShort`, `VibrateLong`
- 키보드: `ShowKeyboard`, `HideKeyboard`
- 키보드 이벤트: `OnKeyboardInput`, `OnKeyboardConfirm`, `OnKeyboardComplete`
- 클립보드: `SetClipboardData`, `GetClipboardData`

#### 라이프사이클 API
- 라이프사이클 이벤트: `OnShow`, `OnHide`
- 앱 제어: `ExitMiniProgram`, `RestartMiniProgram`

#### 광고 API
- 리워드 비디오 광고: `CreateRewardedVideoAd` (Load, Show, Destroy)
- 광고 이벤트: `OnLoad`, `OnError`, `OnClose`

#### 기타
- Unity Editor 시뮬레이션 지원 (PlayerPrefs / Mock 데이터)
- 사용 예제 (`TudadaSDKExample.cs`)
