AGENT SKILL
24-login-manager
暂无简介
- License 许可
- MIT
- 最近更新
- 2026-04-12
- Stars
- ★ 0
- Forks
- 0
03 SKILL.md 正文
24-login-manager — LoginManager
Status: ACTIVE AppliesTo: v10
Purpose
로그인 세션 복구 + 게임 진입용 데이터 초기화 오케스트레이터.
AccountManager(인증)와 각 시스템 초기화를 연결하지만, Scene/UI는 제어하지 않는다.
Scope
포함:
- 런타임 인증 세션 복구 (
AccountManager.EnsureRuntimeAuthSessionAsync) - 명시 로그인 (
AccountManager.LoginAsync) - RemoteData 초기화 (
RemoteDataManager.InitializeAsync) — 버전 체크 + 서버 UTC - 저장 동기화 (
SaveDataManager.SyncGameStorageAsync) - 충돌 해소 + 재초기화 (
ResolveConflictAndInitializeAsync) - 초기 상태 판별 (
LoginInitializeResult.IsInitial) — 호출자가InventoryManager.FirstInitAsync를 외부에서 실행 - 게임 시스템 초기화 (Mission/Achieve/Ad/Push/Shop)
- 시즌 전환 보상 sync (
LeaderboardManager.SyncSeasonTransitionRewardsAsync) - 최종 local 저장 (
SaveDataManager.SaveGameStorageAsync(false, ...)) - 구매 진입 인증 보정 (
EnsurePurchaseLoginReadyAsync, Android silent Google restore) - 결과 반환 (
CommonResult)
제외:
- Scene 전환 (
SceneTransManager) 호출 - UI 표시/버튼 제어 (
UICanvas*) 호출 - 로그인 credential 획득 세부 구현 (AccountManager 소관)
API
EnsureRuntimeSessionAndInitializeAsync(CancellationToken ct = default) : Task<CommonResult<LoginInitializeResult>>- 앱 시작 시
RemoteDataManager.InitializeAsync를 가장 먼저 호출한 뒤 인증 복구 + 초기화 경로 - 이전 로그인 정보가 없거나(
loginType=NONE) 자동 복구가 불가능하면 로컬 모드 초기화(syncAndInitializeAsync) 결과를 그대로 반환한다. - 클라이언트 버전은 내부에서
Application.version→VersionNumber.Parse()로 자동 결정한다.
- 앱 시작 시
LoginAndInitializeAsync(LoginType loginType, CancellationToken ct = default) : Task<CommonResult<LoginInitializeResult>>- 사용자 선택 로그인 시
RemoteDataManager.InitializeAsync선행 + 초기화 경로
- 사용자 선택 로그인 시
ResolveConflictAndInitializeAsync(SyncResolution resolution, CancellationToken ct = default) : Task<CommonResult<LoginInitializeResult>>- 충돌 해소 경로에서도
RemoteDataManager.InitializeAsync를 먼저 수행한다. - 재초기화 후에도
Conflict면SAVEDATA_SYNC_RESOLVE_FAILED실패 반환
- 충돌 해소 경로에서도
VersionCheck(CancellationToken ct = default) : Task<CommonResult<VersionCheckResult>>VersionCheckAsync(CancellationToken ct = default) : Task<CommonResult<VersionCheckResult>>- 버전 판정 API (
RemoteDataManager.InitializeAsync위임 결과 사용) - 클라이언트 버전 SSOT:
Application.version(PlayerSettings.bundleVersion)
- 버전 판정 API (
IsPurchaseLoginReady() : bool- 현재 Firebase 인증 세션 존재 여부
EnsurePurchaseLoginReadyAsync(CancellationToken ct = default) : Task<CommonResult<bool>>- 구매 진입 시 인증 세션 보정(필요 시 silent restore)
LoginInitializeResult:
SyncState(Success/Initial/Conflict)IsInitialIsConflictVersionResult(Success/RecommendUpdate/ForceUpdate)IsRecommendUpdate,IsForceUpdateLocalDeviceId,CloudDeviceId(Conflict 디버깅 정보)LocalSummary,CloudSummary(SaveRecordSummary)- 충돌 시 local/cloud 저장 요약(메타 + payload 해석 결과)
반환 규약:
- 성공:
CommonResult.Success(LoginInitializeResult) - 실패:
CommonResult.Failure(CommonError, ...)
Fatal / Non-fatal
fatal (실패 반환):
- 계정 로그인/세션 복구 실패
- 저장 동기화 실패
- Resolve 후 재충돌(명시적 resolve 경로)
- 초기 지급/저장 실패 (호출자 책임)
- Mission/Achieve/Shop 초기화 실패
- 최종 저장 실패
non-fatal (로그만 남기고 진행):
- 강제 업데이트 필요 (
VersionResult == ForceUpdate)는 실패가 아니라 성공 결과로 반환된다. - 서버 UTC 동기화 실패 (클라이언트 UTC fallback)
PurchaseManager.SyncAsync실패AdsManager.InitializeAsync실패PushManager.InitializeAsync실패LeaderboardManager.SyncSeasonTransitionRewardsAsync실패
Hard Rules
- LoginManager는 Scene/UI 레이어를 참조하지 않는다.
- LoginManager 공개 API는
CommonResult계열만 반환한다. - RemoteData 초기화는 로그인 초기화 진입점의 첫 단계에서 수행한다.
- Manager 초기화 함수 내부에서 SaveData 저장을 수행하지 않고, LoginManager 마지막 단계에서만 local save를 수행한다.
- 버전 체크/서버 UTC fetch 및 해당 상태(property) 소유는
RemoteDataManager가 담당한다. - 인증 상태 판단은
AccountManager를 통해서만 수행한다. - Save payload 해석/요약 생성은 LoginManager에서 구현하지 않는다. (
SaveDataManager책임)
Sample Wiring
SceneLoading은 부트 시EnsureRuntimeSessionAndInitializeAsync를 호출한다.UICanvasLoading은 버튼 로그인 시LoginAndInitializeAsync를 호출한다.Conflict감지/선택 UI는 Scene/UI 레이어에서 처리하고, 실제 해소는ResolveConflictAndInitializeAsync를 호출한다.- 초기 지급:
LoginAndInitializeAsync는IsInitial시InventoryManager.FirstInitAsync+SaveDataManager.SaveGameStorageAsync를 내부 수행한다.EnsureRuntimeSessionAndInitializeAsync/ResolveConflictAndInitializeAsync호출자는result.IsInitial을 확인한 뒤 외부에서 직접 수행한다.
Implementation Location (3-path mirror)
- UPM (정본):
framework-cs/upm/com.devian.foundation/Samples~/MobilePackage/Runtime/Login/LoginManager.cs - UPM (정본):
framework-cs/upm/com.devian.foundation/Samples~/MobilePackage/Runtime/Login/VersionCheckResult.cs - Packages (sync):
framework-cs/apps/UnityExample/Packages/com.devian.foundation/Samples~/MobilePackage/Runtime/Login/LoginManager.cs - Packages (sync):
framework-cs/apps/UnityExample/Packages/com.devian.foundation/Samples~/MobilePackage/Runtime/Login/VersionCheckResult.cs - Assets/Samples (import):
framework-cs/apps/UnityExample/Assets/Samples/Devian Samples/{version}/MobilePackage/Runtime/Login/LoginManager.cs - Assets/Samples (import):
framework-cs/apps/UnityExample/Assets/Samples/Devian Samples/{version}/MobilePackage/Runtime/Login/VersionCheckResult.cs