AGENT SKILL
36-account-login-gpgs
暂无简介
- License 许可
- MIT
- 最近更新
- 2026-04-12
- Stars
- ★ 0
- Forks
- 0
02 资源文件 2
- 参考文档DEEPENING.md3.5 KB
- 参考文档DESIGN-IT-TWICE.md2.8 KB
03 SKILL.md 正文
36-account-login-gpgs — AccountLoginGpgs (Sign-in + Cloud Save)
범위
- Google Play Games Services(GPGS) v2 기반 (assembly:
Google.Play.Games):- Sign-in (
Action<SignInStatus>) - Saved Games(Cloud Save) Load/Save/Delete
- RequestServerSideAccess (
Action<AuthResponse>)
- Sign-in (
- 기존 중복 로직을 신규
AccountLoginGpgs로 점진 치환한다. - GPGS v1 (
GooglePlayGamesassembly)은 지원하지 않는다.
Implementation Location (3-path mirror)
- UPM (정본):
framework-cs/upm/com.devian.foundation/Samples~/MobilePackage/Runtime/Account/AccountLoginGpgs.cs - Packages (sync):
framework-cs/apps/UnityExample/Packages/com.devian.foundation/Samples~/MobilePackage/Runtime/Account/AccountLoginGpgs.cs - Assets/Samples (import):
framework-cs/apps/UnityExample/Assets/Samples/Devian Samples/{version}/MobilePackage/Runtime/Account/AccountLoginGpgs.cs
핵심 정책
- GPGS v2 전용 —
Google.Play.Games어셈블리만 참조한다. - GPGS 플러그인이 없는 환경에서도 컴파일 가능해야 한다(Reflection 기반).
- Android 런타임 외에서는
NotAvailable로 안전하게 처리한다. - 인증 시도 순서:
Authenticate(silent) 우선, 실패 시ManuallyAuthenticate(UI) fallback. - AccountManager 로그인 경로에서는
RequestServerSideAccessauth code가 필수다. auth code가 비어 있으면 성공으로 처리하지 않고 실패로 반환한다. - 구매 진입 자동보정 경로에서는
GetServerAuthCodeCredentialSilentAsync(silent-only, UI 없음)를 사용한다. - 기존 기능(1) AccountManager의 GPGS auth code 획득, (2) SaveCloudClientGoogle의 Saved Games 호출을
AccountLoginGpgs로 모은다. - 완료 후 기존 분산 로직은 삭제(리팩터링)한다.
사용 예시
1) 백엔드 로그인/계정 연결(서버 Auth Code 기반) — AccountManager에서 호출
// before: AccountManager 내부에서 Reflection으로 auth code 획득
// after: AccountLoginGpgs.Instance.GetServerAuthCodeCredentialAsync(ct)
var credResult = await AccountLoginGpgs.Instance.GetServerAuthCodeCredentialAsync(ct);
if (credResult.IsFailure) return CoreResult<LoginCredential>.Failure(credResult.Error!);
// LoginCredential.ServerAuthCode를 사용해 백엔드 sign-in/link 로직 진행(구현체는 프로젝트 선택)
2) Cloud Save — SaveCloudManager/SaveCloudClientGoogle 내부에서 호출
await AccountLoginGpgs.Instance.SignInIfNeededAsync(ct);
var (result, payload) = await AccountLoginGpgs.Instance.LoadAsync(slot, ct);
if (result == SaveCloudResult.Success) { /* payload 사용 */ }
await AccountLoginGpgs.Instance.SaveAsync(slot, payload, ct);
체크리스트(DoD)
- UPM/Example 경로에 동일한 AccountLoginGpgs.cs 존재
- AccountManager의 Google credential 획득 로직이 AccountLoginGpgs 호출로 치환됨
- SaveCloudClientGoogle의 Saved Games 핵심 로직이 AccountLoginGpgs 호출로 치환됨(중복 로직 삭제)
- 빌드 컴파일 에러 없음(플러그인 미설치 환경에서도 컴파일)