일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 2022 플러터 설치
- ANR이란
- 스택 자바 코드
- 플러터 설치 2022
- 안드로이드 유닛 테스트 예시
- 큐 자바 코드
- 서비스 쓰레드 차이
- 안드로이드 레트로핏 사용법
- 스택 큐 차이
- 안드로이드 라이선스 종류
- 안드로이드 유닛 테스트
- rxjava hot observable
- jvm이란
- rxjava cold observable
- 안드로이드 os 구조
- android ar 개발
- ar vr 차이
- 서비스 vs 쓰레드
- 클래스
- 안드로이드 유닛테스트란
- 안드로이드 라이선스
- 안드로이드 레트로핏 crud
- android retrofit login
- jvm 작동 원리
- rxjava disposable
- Rxjava Observable
- 멤버변수
- 객체
- 자바 다형성
- 2022 플러터 안드로이드 스튜디오
- Today
- Total
나만을 위한 블로그
[Android] Android 13 변경사항 본문
작년 8월 29일 구글 개발자 블로그에 안드로이드 13의 출시 소식이 올라왔고 이제 곧 안드로이드 14의 최초 개발자 프리뷰가 올라오는 시점에 많이 뒷북같긴 하지만 확인하지 않는 것보단 나을 거 같으니 포스팅한다.
안드로이드 13 변경사항에 관한 구글 개발자 블로그 링크는 아래를 참고한다.
https://developers-kr.googleblog.com/2022/08/android-13-is-in-aosp.html
그리고 아래는 안드로이드 디벨로퍼에서 설명하는 안드로이드 13을 타겟팅하는 앱에 적용될 기능과 변경사항에 관련된 링크들이다.
https://developer.android.com/about/versions/13/summary?hl=ko
https://developer.android.com/about/versions/13/behavior-changes-13?hl=ko
https://developer.android.com/about/versions/13/behavior-changes-all?hl=ko
이 포스팅은 동작 변경사항이란 제목의 링크를 바탕으로 작성한다. 그러나 다른 링크들도 클릭해서 한 번 정도는 훑어보면 좋을 것이다.
해당 링크의 섹션은 크게 5가지다. 이 중 마지막 핵심 기능은 생략한다.
- 성능 및 배터리
- 개인 정보 보호
- 보안
- 사용자 환경
- 핵심 기능
성능 및 배터리
이 섹션에선 FCM 파트가 가장 눈에 띈다. 안드로이드 13에선 FCM 할당량을 업데이트해서 우선순위가 높은 FCM에 응답해 알림을 표시하는 앱을 위해 우선순위가 높은 FCM 전송의 안정성을 개선한다. 안드로이드 13에서 바뀐 사항은 아래와 같다.
- 앱 대기 버킷이 앱에서 쓸 수 있는 우선순위가 높은 FCM 수를 더 이상 결정하지 않는다
- 우선순위가 높은 FCM 할당량은 우선순위가 높은 FCM에 대한 응답으로 유저에게 표시되는 알림 수에 비례해 확장된다
앱에서 우선순위가 높은 FCM에 대한 응답으로 알림을 항상 게시하지 않는 경우 알림을 유발하는 메시지가 다운그레이드되지 않도록 FCM의 우선순위를 일반으로 바꾸는 게 좋다.
개인 정보 보호
옛날 안드로이드에선 유저에게 알림 권한이 없어도 개발자가 자유자재로 알림을 만들어 표시할 수 있었다.
그러나 이것은 무분별한 광고 알림을 보내거나 별 이상한 방법으로 앱으로 재유입시키려는 어뷰징 앱들이 나타나는 계기가 됐다. 이것의 대안으로 안드로이드 8(오레오)부터는 푸시 알림을 받으려면 채널을 설정하는 것이 의무적인 구현 사항이 되었다.
https://developer.android.com/develop/ui/views/notifications/channels
그러나 어떤 사람들은 설정에서 채널 별로 알림 수신 유무를 설정하는 것도 귀찮아해서 그냥 켜진 채로 냅두는 경우도 많다. 상태바 부분에 엄청나게 많은 알림이 와 있는데 지우지 않고 냅두고 있는 경우를 한 번쯤은 보았을 것이다.
그래서 안드로이드 13부터는 "POST_NOTIFICATIONS" 알림 권한을 도입했다.
https://developer.android.com/guide/topics/ui/notifiers/notification-permission?hl=ko
핵심은 사용자에게 알림 권한을 요청한 다음, 유저가 허용하면 그 다음부터 알림을 표시할 수 있게 바뀌는 것이다. 이것의 구현은 기존에 하던 대로 매니페스트에 권한 넣고 허용여부 따져서 허용되지 않았다면 요청하면 된다.
<manifest ...>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application ...>
...
</application>
</manifest>
이 때 사용자는 허용 / 허용 안 함을 선택하는 것 외에 다이얼로그를 스와이프해서 없앨 수도 있다. 스와이프해서 없앤 경우 알림 권한의 상태가 바뀌지 않는다.
그럼 허용, 허용 안 함, 스와이프해서 없앤 경우에는 각각 뭐가 어떻게 달라질까?
허용 선택 | 허용 안 함 선택 | 스와이프해서 없앰 |
모든 알림 채널이 허용됨 | 앱이 예외에 해당하지 않는 한 유저에게 알림을 보낼 수 없음 | 권한 상태 변경 없음 |
포그라운드 서비스 관련 알림 게시 (알림 창에 표시됨) |
특정 역할 몇 개를 제외하고 모든 알림 채널이 차단된다(=유저가 시스템 설정에서 앱의 모든 알림을 수동으로 사용 중지하는 경우와 같음) |
이것은 targetSdkVersion만 안 올리면 대응할 필요가 없다고 생각할 수 있지만 안드로이드 13으로 업데이트된 or 설정된 기기부터 알림 권한 팝업이 나타난다. 어차피 바꿀 거 미리 적용하는 것도 나쁘지 않아 보인다.
다음으로 클립보드다. 앱에서 유저가 비밀번호, 신용카드 정보 같은 민감한 정보를 클립보드에 복사할 수 있게 하는 경우 ClipDescription에 플래그를 추가해야 한다. 이 플래그를 추가하면 민감한 컨텐츠가 클립보드에 복사한 내용 미리보기에 표시되지 않는다.
코드 예시는 아래와 같다.
// When your app targets API level 33 or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app targets a lower API level
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean("android.content.extra.IS_SENSITIVE", true)
}
}
보안
앱이 안드로이드 13 이상을 타겟팅하는 다른 앱의 내보낸 구성요소로 인텐트를 보내면 이 인텐트는 수신 앱의 <intent-filter> 요소와 일치할 때만 전달된다. 일치하지 않는 인텐트는 차단된다. 앱이 안드로이드 13 이상으로 업그레이드되면 다른 앱에서 전송된 모든 인텐트가 앱에서 선언된 <intent-filter> 요소와 일치할 때만 앱의 내보낸 구성요소로 전달된다.
사용자 환경
안드로이드 13 이상을 실행하는 기기에선 유저가 기본적으로 포그라운드 서비스 관련 알림을 닫을 수 있다. 이걸 위해 유저는 알림을 스와이프할 수 있다. 일반적으로 포그라우드 서비스가 중지되거나 포그라운드에서 제거되지 않는 한 알림이 해제되지 않는다. 유저가 알림을 못 닫게 하려면 Notification.Builder를 써서 알림을 만들 때 setOnGoing(true)를 사용한다.
'Android' 카테고리의 다른 글
[Android] StateFlow vs SharedFlow (0) | 2023.03.14 |
---|---|
[Android] Context, ContextImpl, ContextWrapper란? (0) | 2023.03.01 |
[Android] 안드로이드 스튜디오 Electric Eel 업데이트 후 앱 실행 시마다 Run 탭 올라오지 않게 하기 (0) | 2023.02.04 |
[Android] Coroutine의 Job과 Dispatchers란? (0) | 2023.01.31 |
[Android] LiveData observe()가 여러 번 호출되는 에러 해결 (0) | 2023.01.31 |