Computer >> 컴퓨터 >  >> 프로그래밍 >> HTML

Mobile Safari에서 HTML5 지오로케이션 '권한 거부됨' 오류 해결 방법

문제 상황

모바일 웹사이트를 개발하다 보면 버튼 클릭 시 사용자의 현재 위치를 가져와야 하는 요구 사항이 자주 발생합니다. 이럴 때 일반적으로 HTML5 지오로케이션(Geolocation) API를 사용하게 되는데, 모바일 Chrome에서는 아무 문제 없이 정상적으로 작동합니다.


Mobile Safari에서 발생하는 오류

그런데 동일한 코드를 Mobile Safari에서 실행하면 문제가 생깁니다. 사용자에게 위치 공유 권한을 요청하는 프롬프트가 뜨고, 브라우저가 지오로케이션으로 기본 설정되어 있음에도 불구하고 다음과 같은 오류가 반환됩니다.

'Permission Denied' (권한 거부됨)

즉, 사용자가 위치 공유에 동의했거나 권한 요청 자체가 정상적으로 처리되었음에도 Safari는 위치 정보 접근을 거부한 것처럼 동작하는 것입니다.


원인

이 오류의 주된 원인은 코드나 웹사이트 자체가 아니라 기기(디바이스) 수준에서 위치 서비스가 비활성화되어 있는 경우입니다. iOS에서는 앱이나 웹사이트가 위치에 접근하기 전에 운영체제 차원의 위치 서비스가 먼저 켜져 있어야 하기 때문입니다.


해결 방법

이 문제를 해결하려면 iOS 기기에서 위치 서비스(Location Services)를 활성화해야 합니다.

1. iPhone 또는 iPad에서 설정(Settings) 앱을 엽니다.
2. 개인정보 보호 및 보안(Privacy & Security) 메뉴로 이동합니다.
3. 위치 서비스(Location Services)를 켭니다.
4. 목록 아래쪽에서 Safari 웹사이트(Safari Websites) 항목을 찾아 '앱 사용 중에 허용' 또는 '항상 허용'으로 설정합니다.

설정을 완료한 후 Safari에서 해당 웹페이지를 다시 열고 위치 요청을 시도하면, HTML5 지오로케이션이 정상적으로 작동하며 사용자의 현재 위치를 성공적으로 가져올 수 있습니다.


개발자를 위한 팁

웹 개발자 입장에서는 사용자의 기기 설정을 직접 제어할 수 없으므로, geolocation 오류 발생 시 navigator.geolocation.getCurrentPosition의 에러 콜백을 활용해 사용자에게 안내 메시지를 표시하는 것이 좋습니다. 예를 들어 PERMISSION_DENIED 오류가 반환되면 "기기 설정에서 위치 서비스를 켜고 Safari의 위치 접근 권한을 허용해 주세요"라는 안내를 제공하면 사용자 경험이 크게 향상됩니다.