Chrome 외부 앱 딥링크 "항상 열기" 해제
언제 — 커스텀 스킴(myapp://) 다이얼로그에서 “항상 열기 허용”을 실수로 체크해 되돌리고 싶을 때. 설정 UI 에는 항목이 없고 실제 상태는 프로필의 JSON 에 origin 단위로 저장된다.
- 체크는
Preferences의protocol_handler.allowed_origin_protocol_pairs에{ "origin": { "scheme": true } }로 저장된다. chrome://settings/handlers는 웹 프로토콜 핸들러(mailto:등 사이트가 등록한 것)만 다룬다. 외부 앱 실행 허용과는 별개다.- Chrome 은 종료 시 메모리 상태를
Preferences에 덮어쓴다 — 실행 중에 파일을 고치면 되돌아간다. - MAC 해시로 보호되는 pref 는
Secure Preferences에 들어가며 손으로 고치면 무시·초기화된다.
다이얼로그를 다시 띄우고 싶다
├─ R1 사이트 데이터 삭제 ─── 해결? → 끝
├─ Chrome 완전 종료
├─ R2 Preferences 편집 ─── protocol_handler 있음? → 편집 → 끝
├─ R3 grep 추적 ─┬─ 다른 프로필/브라우저? → 경로 바꿔 R2
│ ├─ Secure Preferences? → R1
│ └─ chrome://policy → R4
└─ macOS 인데 여전히 안 뜸 → R5 (Launch Services)
R1. 사이트 데이터 삭제 (가장 안전, 우선 시도)
chrome://settings/content/all → 해당 사이트 검색 → 항목 클릭 → “데이터 및 권한 삭제”.
외부 프로토콜 허용이 origin 단위 사이트 데이터에 묶여 있어 함께 초기화되는 경우가 많다.
R2. Preferences 직접 편집
R1 로 안 될 때. 반드시 Chrome 을 완전히 종료(백그라운드 프로세스 포함)한 뒤 진행한다.
| OS | 경로 |
|---|---|
| macOS | ~/Library/Application Support/Google/Chrome/<Profile>/Preferences |
| Windows | %LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\Preferences |
| Linux | ~/.config/google-chrome/<Profile>/Preferences |
<Profile> 은 보통 Default 또는 Profile 1… 정확한 값은 chrome://version 의 “프로필 경로”에서 본다.
한 줄로 압축된 JSON 이라 jq 가 편하다.
jq '.protocol_handler.allowed_origin_protocol_pairs' Preferences # 확인
jq 'del(.protocol_handler.allowed_origin_protocol_pairs["https://example.com"])' \
Preferences > tmp && mv tmp Preferences # 특정 origin
jq 'del(.protocol_handler.allowed_origin_protocol_pairs)' \
Preferences > tmp && mv tmp Preferences # 전체 초기화
확인 — Chrome 재시작 후 다이얼로그가 다시 뜬다. excluded_schemes 에 true 로 들어간 스킴은 “차단” 상태이니 반대로 차단을 풀고 싶을 때 같이 본다.
R3. 안 보일 때 추적
protocol_handler 가 비어 보이거나 없을 때.
grep -l "myapp" Preferences "Secure Preferences" "Local State" 2>/dev/null
grep -o '.\{200\}myapp.\{200\}' Preferences # 한 줄 JSON이라 주변 컨텍스트째로
체크리스트 — 다른 프로필(Default 가 아닐 수 있다, chrome://version 재확인) / 다른 브라우저(Beta·Canary·Chromium·Edge 는 완전히 별도 디렉터리) / Secure Preferences 에 있으면 파일 편집을 포기하고 R1 로 / 검색 실패는 Chrome 실행 중이라 덮어써졌거나 한 줄 JSON 에서 눈으로 놓친 것.
R4. 정책으로 걸린 경우
chrome://policy 에서 AutoLaunchProtocolsFromOrigins 를 본다. 값이 있으면 사용자가 체크한 게 아니라 관리 정책으로 처음부터 다이얼로그가 억제된 것이라 로컬 편집으로 못 지운다. 회사 관리 기기면 IT/MDM 쪽 문제다.
반대로 스킴 자체를 막고 싶으면 URLBlocklist 에 myapp://* 를 넣는다.
R5. macOS — Chrome 밖일 가능성
Chrome 이 아니라 OS(Launch Services)가 스킴을 확인 없이 넘기는 경우.
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister \
-dump | grep -B5 -A5 "myapp:"
앱이 스킴 핸들러로 등록돼 있으면 여기서 확인된다.