들어가며

요즘은 플러터나 리액트 네이티브 같은 좋은 녀석들이 많아서 앱 개발의 진입장벽이 많이 낮아졌다. 하지만 우리 회사처럼 하드웨어 디펜던시가 높은 서비스(블루투스 시리얼 통신 같은..)나 거기에 웹으로 된 걸 당장 앱에다 때려넣는 그런 서비스라면 안드로이드 웹뷰를 외면할 수 없다.

sessionStorage

안드로이드 웹뷰는 기본적으로 sessionStorage를 쓸 수 없게 되어 있다. 이걸 모르는 상태에서 백날 sessionStorage 들이대봐야 아무런 일도 하지 않는다. 앱 개발자가 생각보다 웹에 대해서 모르는 경우들이 있어서 이 부분에 대한 설명을 잘 해줘야 한다. 신기하게 localStorage는 그냥 쓸 수 있게 되어있다.

safeBrowsing

이건 플레이프로텍트와 연관이 있는데 우리 서비스의 경우 페이지 로드(document.ready) 후에 비동기 통신으로 데이터를 넣는 부분이 꽤 존재한다. 일반 브라우저에서 돌릴 때는 아무런 문제가 없는데 웹뷰에 입혀놓고 돌려보니 서버에서 데이터는 내려줬는데 화면에서 그리지 않는 경우, 혹은 아예 document.ready가 안되는 경우가 꽤 많이 벌어지고 있었다. 역시나 앱 개발자가 웹에 대한 지식이 많은 사람이 아니어서.. 이 부분에 대해 이해시키고 고장탐구를 시키는데 꽤 많은 시간이 필요했다. 다행히 그의 덕력(?)을 자극한 결과 플레이프로텍트 정책에 걸리는게 아니냐 라는 걸 알아냈고 웹뷰 기본세팅(?)에 세이프 브라우징을 끄고 나서야 원활한 서비스 출력이 가능해졌다.

참고로 보통 이러한 정책의 기준들은 절대 가르쳐주지 않는다. 우리는 페이지 로드 후 3개의 비동기 통신을 동시에 시도하는 로직이 있는데 왠지 그게 걸린 게 아닐까 싶다. 생각하건데 3개의 비동기 통신 시도가 순차적으로 생기는 것이 아니고 동시에 시도되는 것 때문에 플레이 프로텍트에서 서비스거부 공격으로 오해하고 저러는게 아닐까 라는 생각을 해보았다.

결론

안드로이드 웹뷰 안에다 웹페이지를 그려야 한다면 기본적으로 위에 언급한 사항들은 잘 기억해놓고 사용하자.