Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /