Skip to content

Commit c475a2a

Browse files
committed
feat: api 스팩 변경
1 parent 794e829 commit c475a2a

18 files changed

+1014
-10
lines changed
Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
using UnityEngine;
2+
using ProjectVG.Infrastructure.Auth.Services;
3+
using ProjectVG.Infrastructure.Auth.Utils;
4+
using ProjectVG.Infrastructure.Auth.Models;
5+
6+
namespace ProjectVG.Infrastructure.Auth.Examples
7+
{
8+
/// <summary>
9+
/// Guest 로그인 사용 예제
10+
/// </summary>
11+
public class GuestLoginExample : MonoBehaviour
12+
{
13+
[Header("Debug UI")]
14+
public bool showDebugUI = true;
15+
16+
private GuestAuthService _guestAuthService;
17+
private TokenManager _tokenManager;
18+
private bool _isLoggingIn = false;
19+
20+
private void Start()
21+
{
22+
InitializeServices();
23+
SetupEventHandlers();
24+
25+
// 앱 시작 시 자동 게스트 로그인 시도
26+
CheckAutoGuestLogin();
27+
}
28+
29+
private void InitializeServices()
30+
{
31+
_guestAuthService = GuestAuthService.Instance;
32+
_tokenManager = TokenManager.Instance;
33+
34+
Debug.Log("[GuestLoginExample] 서비스 초기화 완료");
35+
}
36+
37+
private void SetupEventHandlers()
38+
{
39+
// Guest 로그인 이벤트 구독
40+
_guestAuthService.OnGuestLoginSuccess += HandleGuestLoginSuccess;
41+
_guestAuthService.OnGuestLoginFailed += HandleGuestLoginFailed;
42+
43+
// Token 이벤트 구독
44+
_tokenManager.OnTokensUpdated += HandleTokensUpdated;
45+
_tokenManager.OnTokensExpired += HandleTokensExpired;
46+
}
47+
48+
private async void CheckAutoGuestLogin()
49+
{
50+
// 이미 유효한 토큰이 있으면 자동 로그인 스킵
51+
if (_tokenManager.HasValidTokens)
52+
{
53+
Debug.Log("[GuestLoginExample] 유효한 토큰 존재 - 자동 로그인 스킵");
54+
return;
55+
}
56+
57+
// RefreshToken이 있으면 자동 갱신 대기
58+
if (_tokenManager.HasRefreshToken && !_tokenManager.IsRefreshTokenExpired())
59+
{
60+
Debug.Log("[GuestLoginExample] RefreshToken 존재 - 자동 갱신 대기");
61+
return;
62+
}
63+
64+
// Guest 로그인 가능하면 자동 로그인 시도
65+
if (_guestAuthService.CanLoginAsGuest())
66+
{
67+
Debug.Log("[GuestLoginExample] 자동 Guest 로그인 시도");
68+
await PerformGuestLoginAsync();
69+
}
70+
}
71+
72+
/// <summary>
73+
/// Guest 로그인 수행
74+
/// </summary>
75+
public async void PerformGuestLogin()
76+
{
77+
await PerformGuestLoginAsync();
78+
}
79+
80+
private async System.Threading.Tasks.Task PerformGuestLoginAsync()
81+
{
82+
if (_isLoggingIn)
83+
{
84+
Debug.LogWarning("[GuestLoginExample] 이미 로그인 진행 중입니다.");
85+
return;
86+
}
87+
88+
_isLoggingIn = true;
89+
90+
try
91+
{
92+
Debug.Log("[GuestLoginExample] Guest 로그인 시작");
93+
94+
// 디바이스 정보 출력
95+
Debug.Log($"[GuestLoginExample] 디바이스 정보: {DeviceIdProvider.GetPlatformInfo()}");
96+
Debug.Log($"[GuestLoginExample] 디바이스 ID: {MaskString(_guestAuthService.GetCurrentDeviceId())}");
97+
98+
// Guest 로그인 수행
99+
bool success = await _guestAuthService.LoginAsGuestAsync();
100+
101+
if (success)
102+
{
103+
Debug.Log("[GuestLoginExample] Guest 로그인 성공");
104+
}
105+
else
106+
{
107+
Debug.LogError("[GuestLoginExample] Guest 로그인 실패");
108+
}
109+
}
110+
catch (System.Exception ex)
111+
{
112+
Debug.LogError($"[GuestLoginExample] Guest 로그인 중 오류: {ex.Message}");
113+
}
114+
finally
115+
{
116+
_isLoggingIn = false;
117+
}
118+
}
119+
120+
/// <summary>
121+
/// 토큰 상태 확인
122+
/// </summary>
123+
public void CheckTokenStatus()
124+
{
125+
Debug.Log("=== Token Status ===");
126+
Debug.Log(_tokenManager.GetDebugInfo());
127+
Debug.Log("===================");
128+
}
129+
130+
/// <summary>
131+
/// Guest 로그인 상태 확인
132+
/// </summary>
133+
public void CheckGuestLoginStatus()
134+
{
135+
var status = _guestAuthService.GetGuestLoginStatus();
136+
Debug.Log("=== Guest Login Status ===");
137+
Debug.Log(status.GetDebugInfo());
138+
Debug.Log("==========================");
139+
}
140+
141+
/// <summary>
142+
/// 모든 토큰 삭제 (테스트용)
143+
/// </summary>
144+
public void ClearAllTokens()
145+
{
146+
_tokenManager.ClearTokens();
147+
Debug.Log("[GuestLoginExample] 모든 토큰 삭제 완료");
148+
}
149+
150+
/// <summary>
151+
/// 디바이스 ID 리셋 (테스트용)
152+
/// </summary>
153+
public void ResetDeviceId()
154+
{
155+
_guestAuthService.ResetDeviceId();
156+
Debug.Log("[GuestLoginExample] 디바이스 ID 리셋 완료");
157+
}
158+
159+
#region Event Handlers
160+
161+
private void HandleGuestLoginSuccess(TokenSet tokenSet)
162+
{
163+
Debug.Log("[GuestLoginExample] Guest 로그인 성공 이벤트 수신");
164+
Debug.Log($"[GuestLoginExample] AccessToken 만료: {tokenSet.AccessToken.ExpiresAt}");
165+
}
166+
167+
private void HandleGuestLoginFailed(string error)
168+
{
169+
Debug.LogError($"[GuestLoginExample] Guest 로그인 실패 이벤트 수신: {error}");
170+
}
171+
172+
private void HandleTokensUpdated(TokenSet tokenSet)
173+
{
174+
Debug.Log("[GuestLoginExample] 토큰 업데이트 이벤트 수신");
175+
}
176+
177+
private void HandleTokensExpired()
178+
{
179+
Debug.Log("[GuestLoginExample] 토큰 만료 이벤트 수신 - 자동 갱신 시도");
180+
}
181+
182+
#endregion
183+
184+
#region Debug UI
185+
186+
private void OnGUI()
187+
{
188+
if (!showDebugUI) return;
189+
190+
GUILayout.BeginArea(new Rect(10, 10, 400, 600));
191+
GUILayout.Label("=== Guest Login Debug UI ===", GUI.skin.box);
192+
193+
// 로그인 버튼
194+
GUI.enabled = !_isLoggingIn && _guestAuthService.CanLoginAsGuest();
195+
if (GUILayout.Button(_isLoggingIn ? "로그인 중..." : "Guest 로그인"))
196+
{
197+
PerformGuestLogin();
198+
}
199+
GUI.enabled = true;
200+
201+
GUILayout.Space(10);
202+
203+
// 상태 확인 버튼들
204+
if (GUILayout.Button("토큰 상태 확인"))
205+
{
206+
CheckTokenStatus();
207+
}
208+
209+
if (GUILayout.Button("Guest 로그인 상태 확인"))
210+
{
211+
CheckGuestLoginStatus();
212+
}
213+
214+
GUILayout.Space(10);
215+
216+
// 테스트 버튼들
217+
GUILayout.Label("=== 테스트 기능 ===", GUI.skin.box);
218+
219+
if (GUILayout.Button("모든 토큰 삭제"))
220+
{
221+
ClearAllTokens();
222+
}
223+
224+
if (GUILayout.Button("디바이스 ID 리셋"))
225+
{
226+
ResetDeviceId();
227+
}
228+
229+
GUILayout.Space(10);
230+
231+
// 현재 상태 표시
232+
GUILayout.Label("=== 현재 상태 ===", GUI.skin.box);
233+
GUILayout.Label($"로그인 중: {_isLoggingIn}");
234+
GUILayout.Label($"유효한 토큰: {_tokenManager?.HasValidTokens ?? false}");
235+
GUILayout.Label($"RefreshToken: {_tokenManager?.HasRefreshToken ?? false}");
236+
GUILayout.Label($"Guest 로그인 가능: {_guestAuthService?.CanLoginAsGuest() ?? false}");
237+
238+
GUILayout.EndArea();
239+
}
240+
241+
#endregion
242+
243+
private string MaskString(string input)
244+
{
245+
if (string.IsNullOrEmpty(input) || input.Length < 8)
246+
return "***";
247+
return $"{input.Substring(0, 4)}****{input.Substring(input.Length - 4)}";
248+
}
249+
250+
private void OnDestroy()
251+
{
252+
// 이벤트 구독 해제
253+
if (_guestAuthService != null)
254+
{
255+
_guestAuthService.OnGuestLoginSuccess -= HandleGuestLoginSuccess;
256+
_guestAuthService.OnGuestLoginFailed -= HandleGuestLoginFailed;
257+
}
258+
259+
if (_tokenManager != null)
260+
{
261+
_tokenManager.OnTokensUpdated -= HandleTokensUpdated;
262+
_tokenManager.OnTokensExpired -= HandleTokensExpired;
263+
}
264+
}
265+
}
266+
}

Assets/Infrastructure/Auth/Examples/GuestLoginExample.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Infrastructure/Auth/Services.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)