AGENT SKILL

36-account-login-gpgs

暂无简介

License 许可
MIT
所属仓库
devwinsoft/devian
最近更新
2026-04-12
Stars
★ 0
Forks
0

02 资源文件 2

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>)
  • 기존 중복 로직을 신규 AccountLoginGpgs로 점진 치환한다.
  • GPGS v1 (GooglePlayGames assembly)은 지원하지 않는다.

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 로그인 경로에서는 RequestServerSideAccess auth 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 호출로 치환됨(중복 로직 삭제)
  • 빌드 컴파일 에러 없음(플러그인 미설치 환경에서도 컴파일)

04 同仓库更多 Skills