같은 폰, 같은 앱인데 듀얼 메신저로 복제한 쪽만 켜자마자 꺼졌음. 앱 로그에는 아무것도 없었음. 원인은 광고 SDK가 읽으려던 기기 ID 하나.
복제한 앱만 꺼짐
삼성 폰에는 메신저 앱을 하나 더 복제해서 두 계정을 따로 쓰게 해 주는 "듀얼 메신저"가 있음. Mbtigram을 그렇게 복제해서 켜면 1초 만에 꺼졌음. 원래 앱은 멀쩡했음.
앱 로그에는 아무것도 없었음. 오류 한 줄 남기기 전에 프로세스가 통째로 사라졌기 때문임.
시스템 기록 확인
앱이 기록을 못 남기고 죽어도 안드로이드 시스템 쪽에는 흔적이 남음. 두 곳을 봤음.
adb shell dumpsys activity exit-info com.h57studio.mbtigram
adb shell dumpsys dropbox --print
여기에 원인이 있었음.
IllegalStateException: Ssaid settings not accessible
SSAID는 앱마다 주어지는 기기 ID(Settings.Secure.ANDROID_ID)임. 광고 SDK(애드몹)가 광고를
불러오면서 이 값을 읽음. 그런데 듀얼 메신저와 보안 폴더는 안드로이드 입장에서 다른 사용자
공간이고, 그 안에서는 이 값을 읽을 수 없음. 사용자 목록에서 확인할 수 있음.
adb shell pm list users
... 95:DUAL_APP
... 150:Secure Folder
실패 콜백으로는 안 잡힘
광고 SDK에는 광고를 못 불러왔을 때 오는 콜백(onAdFailedToLoad)이 있음. 광고가
안 나오는 상황은 거기서 처리하면 된다고 생각했는데, 이번 건 거기로 오지 않았음. 예외가 메인 스레드로
그대로 올라와서 앱 전체가 죽었음.
광고는 부가 기능이라, 광고가 안 나오는 건 괜찮아도 광고 때문에 앱이 안 켜지면 안 됨.
고친 것
- 광고 SDK를 부르는 곳을 하나도 빼지 않고
try/catch로 감쌌음. - 예외가 나면 "광고 끔" 표시를 세우고, 그 뒤로는 광고를 아예 부르지 않음.
- 그 공간에서는 어차피 광고가 나올 수 없으니, 광고만 빠지고 나머지는 정상 동작함.
광고 ID는 두 벌
광고를 다루는 김에 하나 더 정리했음. 개발용 빌드는 구글이 공개한 테스트 광고 ID를, 출시용 빌드는 실제 계정 ID를 씀. 개발하면서 실제 광고를 받으면 내 광고를 내가 보는 게 되고, 광고 쪽은 그걸 무효 트래픽으로 보고 계정을 정지할 수 있음.
그리고 앱 ID와 광고 단위 ID의 게시자 번호가 서로 다르면 광고가 아예 안 나옴. 오류도 거의 없이 빈칸만 남음. 그래서 두 값이 같은 계정에서 나온 건지부터 확인함.