안드로이드 개발을 하다보면 재현이 되지 않는 버그들이 참 많다.  어떤 버그들은 특정 기기에서만 발생하고, 또 어떤 버그는 특정 OS 버전에서만 발생하기도 한다.  따라서 상용 서비스는 반드시 CrashliticsSplunk Mint와 같은 버그 리포트 서비스를 연동 후 배포하기를 권장한다.

실 사용자가 10만명 정도되는 앱에 버그 리포트 서비스를 연동해보면 별 회개망칙한 버그들을 다 볼 수 있다.

오늘 수정한 버그는 앱에서 Notification을 등록 할 때 발생하는 Vibrate로 인해 SecurityException이 발생 할 수 있는 버그다.

앱에서 Notification을 등록 할 때, setVibrate() 함수 또는 setDefaults() 함수로 진동을 줄 수 있는데 이때 사용자 기기의 OS 버전이 4.2.1 미만이고 AndroidManifest.xml에  Vibrate 권한을 설정하지 않았다면 SecurityException이 발생 할 수 있다. (‘발생한다’가 아니라 ‘발생 할 수 있다’고 표현하는 이유는 테스트 결과 일부 기기는 4.2 미만에서도 SecurityException이 발생하지 않는다.)

Android 4.2.1에 이 문제와 관련해서 패치가 있었다. 읽어보면 기기가 진동모드여서 진동이 불가피한 경우거나 setDefaults()의 인자로 Vibrate를 설정하는 경우는 더 이상 AndroidManifest.xml에 Vibrate 권한을 추가 할 필요가 없다. 다만 setVibrate() 함수를 통해 Custom Vibration pattern을 등록하는 경우는 여전히 권한 추가가 필요하다.

따라서 우리는 AndroidManifest.xml에 아래와 같이 권한을 추가하여 꼭 필요한 기기에 한해서만 권한을 요청하도록 설정 할 수 있다.

 

아마 내부 테스트 중에는 Vibrate와 관련한 권한 문제가 없었는데, 버그 리포트로 처음 접한다면 위에서 언급한 문제일 확률이 매우 높다.