이번에는 아주 어이없는 실수를 해버린 에피소드를 하나 소개해보려한다.
다른 앱에서 딥링크를 통해 내 앱을 실행하는데 앱이 비정상 종료되는 문제였다. 소위 말하는 앱 크래시현상이다.
이유가 뭐였을까?
먼저 내 앱은 딥링크로 앱 실행 시 스플래시 화면으로 진입하게 되고,
여기서 intent의 data안에 있는 uri를 파싱해 토큰을 얻어온 다음,
Extra와 함께 로그인 화면으로 넘어간다.
여기서 갑자기 런타임 에러가 났다는 건데...
나의 경우에는 총 2가지 문제가 있었다.
- 조건문에서 null처리가 되지 않은 문제(온전한 나의 문제)
- 딥링크가 정상값이 아님(서버 측 문제)
나의 문제였던 1번의 경우, 앱 푸시를 눌렀을 때 진입점이 같은 스플래시 화면이었다.
여기서 딥링크로 앱을 실행할 때와 차이점이 발생한다.
푸시로 앱을 실행하는 경우, intent의 action 값이 null이다.
하지만, 딥링크로는 action값이 ACTION_VIEW였다.
아래 코드가 나의 첫 실수였다.
https://gist.github.com/BonusTrack02/6aa1b1871f2fb519836ae7d88ed2843b
사실 취업이전이나 개인 프로젝트를 할 때는 코틀린을 사용하는 편이라 null 처리에 대해 민감하지 않게 생각했던 부분이 컸던 것 같다.
2번의 경우는 서버에서 전달받은 딥링크가 정상값이 아닌 문제였다.
예를 들면 딥링크 형식은 아래와 같다.
app://app?param=12312313123
하지만 서버에서 전달받은 딥링크 형식은 아래와 같았다.
app://app??param=12312313123
차이점이 보일지 모르겠다.
자세히 보면 ?가 하나 더 있다.
그래서 쿼리를 해석하지 못해 자동 로그인을 위한 API가 제대로 작동하지 않았다.
문제 해결
결국 나는 해당 스플래시 화면의 파일을 코틀린으로 변환했고 null 처리구문을 추가했다.
https://gist.github.com/BonusTrack02/7b4f75c95a46538c5a36bd0c3ffa7713
이렇게 처리하니 null 처리와 딥링크가 비정상값일 때 둘 다 해결할 수 있었다.
(아직까지 서버 측에서 딥링크가 제대로 전달되는 지는 확인하지 못했다.
정상값이라면 제대로 로그인까지 되었으리라 믿는다.)
'Android' 카테고리의 다른 글
Android Notification Max Count (0) | 2023.07.04 |
---|---|
Android Notification 누적시키기 (0) | 2023.06.16 |
Codelab으로 Room 알아보기 - 1. Download and inspect the starter app (0) | 2023.06.13 |
Android Notification channel 설정이 적용안되는 경우 (0) | 2023.06.09 |
Codelab으로 LiveData transform해보기 - 3. 정리(完) (0) | 2023.05.23 |