[Android] TARGET  API 26 변경 관련 작업 내역


안드로이드 타겟 API최소 레벨이 26으로 제한되면서 

구 프로젝트 업데이트 작업을 진행하면서 변경된 내용 정리 및 정보 공유해봅니다.

target 26 변경 이유.


1.  GCM > FCM 변경

: GCM에서 만들어진 regstrion Id 로 푸시를 보내도 정상동작!!

: Eclipse 에선 정식 지원이 아니라 AAR파일을 가지고 적용.  저는 Android Studio로 변경. 

이슈 사항  - 구글 플레이서비스도 업데이트 함에 따라 

 GoogleMap 등 구글 플레이서비스 관련 호환성 패치도 같이 진행하였음


2. 알림채널 지원(api 26 이상)

: 알림을 채널별로 구분하고, 시스템에서 알림제어를 할수 있도록 변경

: 26이상에서 무조건 한개이상의 알림채널이 있어야 함( 없으면 알림이 안뜸 )

: 최초 한번만 생성하면 됨


이슈사항 -  앱의 설정으로 알림사운드, 진동을 제어했는데 알림 채널적용 후 기존 알림설정이 동작안됨

> 사운드, 진동을 알림채널에서 적용하는 걸로 변경. 즉 푸시메시지 건별로 알림설정이 불가능해짐.

* 저의 경우 특정 그룹별로 알림 관리를 했는데, 이 경우 그룹의 수만큼 알림 채널을 추가해 주어야해서, 

알림관리를 게시글, 댓글, 자신에게쓴 글 3개의 채널로 통합관리함

* 알림을 껏다가 다시  켤 경우 초기에 설정한 IMPORTANCE가 Default값으로 변경됨.

오픈 이슈 :  https://issuetracker.google.com/issues/65108694

https://issuetracker.google.com/issues/73719217

* 기존에 서버에 알림 값을 가지고 재설정 했는데 알림채널이 생기면서

앱이 아닌 OS에서 알림을 관리를 하기 때문에 변경된 값에 대한 상세 정보를 가져올수 없음. 

즉, 로컬에서만 관리 하도록 변경.


* 알림채널 설정 호출 방법 (채널아이디를 빼면 알림채널 설정 목록으로 이동합니다!)


3. Permission Check 지원 (api23 이상)

: 현재 사용하는 permission 중 Protection level이 dangerous 로 되어있으면, 사용자에게 동의를 받아야 정상동작함

: Protection level 검색방법

https://developer.android.com/reference/android/Manifest.permission

위 링크 들어간 후 사용중인 퍼미션 이름 검색


4. Background Service 임시제거

: 아래의 내용 때문에 임시 제거한  상태 

시스템이 서비스를 생성한 후, 앱은 5초 이내에 해당 서비스의 startForeground() 메서드를 호출하여 새 서비스의 알림을 사용자에게 표시해야 합니다. 앱이 이 시간 한도 내에 startForeground()를 호출하지 않으면 시스템이 서비스를 중단하고 이 앱을 ANR로 선언합니다.

> 백그라운드 상태를 유지하기 위해 서비스 종료시후 다시 백그라운드서비스를 올리도록 되어 있어 ANR 발생. (안 좋은 방식이기도 해서 이참에 손볼 예정)

* 임시로 앱이 실행중인 상태에서만 실행하도록 변경한 상태 

 jobschdule을 사용하여 처리하는 방법이 있는걸로 보이나, 업데이트 일자가 촉박하여 임시 패치.

관령 링크 - https://developer.android.com/about/versions/oreo/background?hl=ko


5. 기타 참고 사항 요약 정리

: FCM > GCM에서 생성된 Regstration ID로 푸시 메시지 전송 가능 

: 알림설정을 시스템에서 세분화하여 관리하도록 변경(알림채널 기능)

기존에 알림을 컨트롤 했다면, 이젠 불가능해짐.

API 26이상의 단말에서는 필수로 1개이상의 채널이 있어야 함.

: 퍼미션 Protection level검색 후  dangerous로 되어 있다면 유저로 부터 동의를 받아야함. 

: 백그라운드 서비스 정책변경 

앱이 시간 한도 내에 startForeground()를 호출하지 않으면 시스템이 서비스를 중단하고 이 앱을 ANR로 선언


알림채널 문서로 몇번을 봐도 이해가 잘 안됐는데.. 

직접구현하고 테스트해보니 그제야 개념이 좀 잡히네요.

실제 패치 시에는 Eclipse환경에서 Android Studio로 변경하는 작업에서 가장 애를 먹었는데, 

아직 Eclipse를 쓰신다면 이참에 변경해보세요!


저의 경우 기존에 Android Library Project 로 메인 소스를 구성하고, 

서브프로젝트에서 Import해서 하나의 소스로 앱을 다르게 구성하여 배포를 했는데, 

이번에 Android Studio로 변경하고 productFlavors라는 옵션을  사용하니

예전 보다 훨씬 간편하고 쉽게 구성할 수 있었네요.  


저처럼 패치는 해야겠고, 뭐부터 봐야할지 모르는 분들을 위해 한번 포스트해봤네요.

도움이 됐다면 아래 하트 한번 눌러주세요.!!