diff --git a/src/entities/alarm/ui/login-type-bottom-sheet.tsx b/src/entities/alarm/ui/login-type-bottom-sheet.tsx index c9d2da4..8393814 100644 --- a/src/entities/alarm/ui/login-type-bottom-sheet.tsx +++ b/src/entities/alarm/ui/login-type-bottom-sheet.tsx @@ -52,13 +52,9 @@ export const LoginTypeBottomSheet = ({ onClick={ () => onChangeLoginType(LoginType.ID) } >{ APP_LOGIN_TYPE[LoginType.ID] }
  • onChangeLoginType(LoginType.FINGER) } - >{ APP_LOGIN_TYPE[LoginType.FINGER] }
  • -
  • onChangeLoginType(LoginType.FACE) } - >{ APP_LOGIN_TYPE[LoginType.FACE] }
  • + className={ `${(loginType === LoginType.BIOMETRIC)? 'selected': ''}` } + onClick={ () => onChangeLoginType(LoginType.BIOMETRIC) } + >{ APP_LOGIN_TYPE[LoginType.BIOMETRIC] } diff --git a/src/entities/common/model/constant.ts b/src/entities/common/model/constant.ts index f5fa7ec..04b15ac 100644 --- a/src/entities/common/model/constant.ts +++ b/src/entities/common/model/constant.ts @@ -8,8 +8,7 @@ export const APP_LANGUAGE = { }; export const APP_LOGIN_TYPE = { ID: 'ID/PW 입력', - FINGER: '지문 인증', - FACE: '안면 인증' + BIOMETRIC: '생체 인증', }; export const DEFAULT_PAGE_PARAM = { cursor: null, diff --git a/src/entities/common/model/types.ts b/src/entities/common/model/types.ts index d7eed7e..2e836a3 100644 --- a/src/entities/common/model/types.ts +++ b/src/entities/common/model/types.ts @@ -5,8 +5,7 @@ export enum AppLanguage { }; export enum LoginType { ID = 'ID', - FINGER = 'FINGER', - FACE = 'FACE' + BIOMETRIC = 'BIOMETRIC', }; export enum SuccessResult { SUCCESS = 'SUCCESS', diff --git a/src/hooks/useAppBridge.tsx b/src/hooks/useAppBridge.tsx index 117b527..82afbec 100644 --- a/src/hooks/useAppBridge.tsx +++ b/src/hooks/useAppBridge.tsx @@ -59,6 +59,9 @@ interface UseAppBridgeReturn { // 앱 설정 화면 열기 openAppSettings: () => Promise; + + // 로그인 방식 설정 조회 + getLoginType: () => Promise; } export const useAppBridge = (): UseAppBridgeReturn => { @@ -250,6 +253,14 @@ export const useAppBridge = (): UseAppBridgeReturn => { return appBridge.safeCall(() => appBridge.openAppSettings()); }, [isNativeEnvironment]); + const getLoginType = useCallback(async (): Promise => { + if (!isNativeEnvironment) { + return 'ID'; + } + const result = await appBridge.safeCall(() => appBridge.getLoginType(), 'ID'); + return result || 'ID'; + }, [isNativeEnvironment]); + return { isNativeEnvironment, isAndroid, @@ -272,6 +283,7 @@ export const useAppBridge = (): UseAppBridgeReturn => { openBiometricRegistrationPopup, closeBiometricRegistrationPopup, isPushNotificationEnabled, - openAppSettings + openAppSettings, + getLoginType }; }; \ No newline at end of file diff --git a/src/pages/setting/setting-page.tsx b/src/pages/setting/setting-page.tsx index a370e59..9289f86 100644 --- a/src/pages/setting/setting-page.tsx +++ b/src/pages/setting/setting-page.tsx @@ -11,12 +11,12 @@ import { useSetHeaderType, useSetFooterMode } from '@/widgets/sub-layout/use-sub-layout'; -import { ChangeEvent, useEffect, useState } from 'react'; +import { ChangeEvent, useCallback, useEffect, useState } from 'react'; import { useAppBridge } from '@/hooks/useAppBridge'; export const SettingPage = () => { let userInfo = useStore.getState().UserStore.userInfo; - const { isPushNotificationEnabled, openAppSettings } = useAppBridge(); + const { isPushNotificationEnabled, openAppSettings, logout, getLoginType } = useAppBridge(); useSetHeaderTitle('설정'); useSetHeaderType(HeaderType.LeftArrow); @@ -45,11 +45,22 @@ export const SettingPage = () => { window.open('https://www.nicevan.co.kr/privacy-policy', '_blank'); }; - const checkPushNotificationStatus = () => { + const onClickLogout = () => { + logout(); + }; + + const checkPushNotificationStatus = useCallback(() => { + console.log('checkPushNotificationStatus'); isPushNotificationEnabled().then((enabled) => { setPushNotificationEnabled(enabled); }); - }; + }, [isPushNotificationEnabled]); + + const loadLoginType = useCallback(() => { + getLoginType().then((type) => { + setLoginType(type as LoginType); + }); + }, [getLoginType]); const onClickPushNotificationToggle = () => { openAppSettings(); @@ -103,6 +114,7 @@ export const SettingPage = () => { useEffect(() => { callAppAlarmFind(); checkPushNotificationStatus(); + loadLoginType(); // 앱이 포어그라운드로 돌아올 때 푸시 알림 권한 상태 재확인 const handleVisibilityChange = () => { @@ -122,7 +134,7 @@ export const SettingPage = () => { document.removeEventListener('visibilitychange', handleVisibilityChange); window.removeEventListener('focus', handleFocus); }; - }, []); + }, [checkPushNotificationStatus, loadLoginType]); return ( <> @@ -131,7 +143,12 @@ export const SettingPage = () => {
    알림 수신 설정
    @@ -234,7 +251,7 @@ export const SettingPage = () => { -
    setLoginTypeBottomSheetOn(true) } > @@ -242,7 +259,7 @@ export const SettingPage = () => {
    { APP_LOGIN_TYPE[loginType] }
    -
    setServiceLanguageBottomSheetOn(true) } > @@ -252,7 +269,7 @@ export const SettingPage = () => {
    -
    +
    로그아웃
    diff --git a/src/types/bridge.ts b/src/types/bridge.ts index 16c5559..e5a7597 100644 --- a/src/types/bridge.ts +++ b/src/types/bridge.ts @@ -71,7 +71,10 @@ export enum BridgeMessageType { IS_PUSH_NOTIFICATION_ENABLED = 'isPushNotificationEnabled', // 앱 설정 화면 열기 - OPEN_APP_SETTINGS = 'openAppSettings' + OPEN_APP_SETTINGS = 'openAppSettings', + + // 로그인 방식 설정 + GET_LOGIN_TYPE = 'getLoginType' } export interface DeviceInfo { diff --git a/src/utils/appBridge.ts b/src/utils/appBridge.ts index a02fd62..85cc242 100644 --- a/src/utils/appBridge.ts +++ b/src/utils/appBridge.ts @@ -205,6 +205,11 @@ class AppBridge { return this.sendMessage(BridgeMessageType.OPEN_APP_SETTINGS); } + // 로그인 방식 설정 조회 + async getLoginType(): Promise { + return this.sendMessage(BridgeMessageType.GET_LOGIN_TYPE); + } + // 네이티브 환경 체크 isNativeEnvironment(): boolean { return !!(