From e8d3549f0273ff0cf9749d6d12cd2e3e9dd33676 Mon Sep 17 00:00:00 2001 From: ByungCheol Date: Sun, 28 Jun 2026 18:43:22 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B3=84=EC=A0=95=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EC=95=88=EB=82=B4=20=ED=8E=98=EC=9D=B4=EC=A7=80=20+=20?= =?UTF-8?q?=EC=B9=B4=EB=93=9C=EC=95=8C=EB=A6=BC(=EC=95=8C=EB=A6=BC?= =?UTF-8?q?=EC=A0=91=EA=B7=BC)=20=EC=B2=AB=20=EC=B6=9C=EC=8B=9C=20?= =?UTF-8?q?=EB=B9=84=ED=99=9C=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - /account-deletion 공개 페이지(웹 접근) — Play 데이터 삭제 정책 URL, 웹 안내 하단 링크 - CARD_NOTIF_ENABLED=false: 카드알림 자동인식 UI 숨김 - AndroidManifest: CardNotifListenerService 선언 주석 처리(알림접근 정책 회피) Co-Authored-By: Claude Opus 4.8 --- android/app/src/main/AndroidManifest.xml | 6 +- src/components/WebOnlyNotice.vue | 2 + src/config/features.js | 5 ++ src/router/index.js | 7 ++ src/views/AccountDeletionView.vue | 105 +++++++++++++++++++++++ src/views/account/AccountView.vue | 3 +- 6 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 src/views/AccountDeletionView.vue diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 84ae199..a0f293a 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -29,7 +29,10 @@ - + + diff --git a/src/components/WebOnlyNotice.vue b/src/components/WebOnlyNotice.vue index aa9edd8..4ee2e20 100644 --- a/src/components/WebOnlyNotice.vue +++ b/src/components/WebOnlyNotice.vue @@ -44,6 +44,8 @@ const mobileReady = false 개인정보처리방침 이용약관 + + 계정 삭제 diff --git a/src/config/features.js b/src/config/features.js index 9f1b049..ab55e9c 100644 --- a/src/config/features.js +++ b/src/config/features.js @@ -3,3 +3,8 @@ // 백엔드(/api/auth/login, /api/auth/signup)는 비상용으로 그대로 유지 — // 되돌리려면 이 값을 true 로 바꾸면 아이디 로그인/회원가입이 다시 노출된다. export const ID_LOGIN_ENABLED = false + +// 카드 결제 알림 자동인식(NotificationListenerService) 기능. +// 스토어 첫 출시에서는 Google Play 알림 접근 정책 심사 회피를 위해 비활성화. +// (AndroidManifest 의 CardNotifListenerService 선언도 함께 주석 처리되어 있음) +export const CARD_NOTIF_ENABLED = false diff --git a/src/router/index.js b/src/router/index.js index bd63d41..95e30e3 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -45,6 +45,13 @@ const router = createRouter({ component: () => import('../views/LegalView.vue'), meta: { public: true, doc: 'terms' }, }, + { + // 계정·데이터 삭제 안내 (공개 — 앱 마켓 데이터 삭제 정책 URL) + path: '/account-deletion', + name: 'account-deletion', + component: () => import('../views/AccountDeletionView.vue'), + meta: { public: true }, + }, { path: '/users', name: 'users', diff --git a/src/views/AccountDeletionView.vue b/src/views/AccountDeletionView.vue new file mode 100644 index 0000000..c41b0b6 --- /dev/null +++ b/src/views/AccountDeletionView.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/views/account/AccountView.vue b/src/views/account/AccountView.vue index 9881f88..3cf3851 100644 --- a/src/views/account/AccountView.vue +++ b/src/views/account/AccountView.vue @@ -7,6 +7,7 @@ import { useDialog } from '@/composables/dialog' import IconBtn from '@/components/ui/IconBtn.vue' import { imageToBlob, parseReceiptText } from '@/utils/receiptOcr' import { cardNotif } from '@/native/cardNotif' +import { CARD_NOTIF_ENABLED } from '@/config/features' import { Capacitor } from '@capacitor/core' // @capacitor/camera 는 네이티브에서만 동적 로드 (웹은 file input 사용 — 정적 import 시 모바일 웹 청크 로드 실패 유발) @@ -25,7 +26,7 @@ const pendingCount = ref(0) // 확인 필요(카드 알림 자동인식) 건수 const editingPending = ref(false) // 수정 중인 항목이 미확인 건인지 // 카드 결제 알림 자동인식 권한 (네이티브 전용) -const notifNative = cardNotif.isNative() +const notifNative = CARD_NOTIF_ENABLED && cardNotif.isNative() const notifEnabled = ref(true) // 미허용일 때만 배너 노출 async function checkNotifPermission() { if (notifNative) notifEnabled.value = await cardNotif.isEnabled()