관리 메뉴

나만을 위한 블로그

[Android] Android 13 변경사항 본문

Android

[Android] Android 13 변경사항

참깨빵위에참깨빵 2023. 2. 27. 00:27
728x90
반응형

작년 8월 29일 구글 개발자 블로그에 안드로이드 13의 출시 소식이 올라왔고 이제 곧 안드로이드 14의 최초 개발자 프리뷰가 올라오는 시점에 많이 뒷북같긴 하지만 확인하지 않는 것보단 나을 거 같으니 포스팅한다.

 

안드로이드 13 변경사항에 관한 구글 개발자 블로그 링크는 아래를 참고한다.

 

https://developers-kr.googleblog.com/2022/08/android-13-is-in-aosp.html

 

AOSP에서 Android 13이 출시되었습니다

작성자: Seang Chau (VP of Engineering) 이 글의 원문은 여기서   확인하실 수 있으며 블로그 리뷰에는 노현석(GDE)님이 참여해주셨습니다. 오늘 Android 13 소스를 Android 오픈소스 프로젝트 (AOSP)에 제공하

developers-kr.googleblog.com

 

그리고 아래는 안드로이드 디벨로퍼에서 설명하는 안드로이드 13을 타겟팅하는 앱에 적용될 기능과 변경사항에 관련된 링크들이다.

 

https://developer.android.com/about/versions/13/summary?hl=ko 

 

Android 13 기능 및 변경사항 목록  |  Android 개발자  |  Android Developers

Android 13 기능 및 변경사항 목록 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 다음 표에는 앱 개발자에게 영향을 미칠 수 있는 문서화된 모든 기능 및 동작

developer.android.com

 

https://developer.android.com/about/versions/13/behavior-changes-13?hl=ko 

 

동작 변경사항: Android 13 이상을 타겟팅하는 앱  |  Android 개발자  |  Android Developers

Android 13 이상을 타겟팅하는 앱에 영향을 미치는 Android 13의 변경사항을 알아봅니다.

developer.android.com

 

https://developer.android.com/about/versions/13/behavior-changes-all?hl=ko 

 

동작 변경사항: 모든 앱  |  Android 개발자  |  Android Developers

모든 앱에 영향을 주는 Android 13의 변경사항을 알아봅니다.

developer.android.com

 

 

이 포스팅은 동작 변경사항이란 제목의 링크를 바탕으로 작성한다. 그러나 다른 링크들도 클릭해서 한 번 정도는 훑어보면 좋을 것이다.

 


 

해당 링크의 섹션은 크게 5가지다. 이 중 마지막 핵심 기능은 생략한다.

 

  • 성능 및 배터리
  • 개인 정보 보호
  • 보안
  • 사용자 환경
  • 핵심 기능

 

성능 및 배터리

 

이 섹션에선 FCM 파트가 가장 눈에 띈다. 안드로이드 13에선 FCM 할당량을 업데이트해서 우선순위가 높은 FCM에 응답해 알림을 표시하는 앱을 위해 우선순위가 높은 FCM 전송의 안정성을 개선한다. 안드로이드 13에서 바뀐 사항은 아래와 같다.

 

  • 앱 대기 버킷이 앱에서 쓸 수 있는 우선순위가 높은 FCM 수를 더 이상 결정하지 않는다
  • 우선순위가 높은 FCM 할당량은 우선순위가 높은 FCM에 대한 응답으로 유저에게 표시되는 알림 수에 비례해 확장된다

 

앱에서 우선순위가 높은 FCM에 대한 응답으로 알림을 항상 게시하지 않는 경우 알림을 유발하는 메시지가 다운그레이드되지 않도록 FCM의 우선순위를 일반으로 바꾸는 게 좋다.

 

개인 정보 보호

 

옛날 안드로이드에선 유저에게 알림 권한이 없어도 개발자가 자유자재로 알림을 만들어 표시할 수 있었다.

그러나 이것은 무분별한 광고 알림을 보내거나 별 이상한 방법으로 앱으로 재유입시키려는 어뷰징 앱들이 나타나는 계기가 됐다. 이것의 대안으로 안드로이드 8(오레오)부터는 푸시 알림을 받으려면 채널을 설정하는 것이 의무적인 구현 사항이 되었다.

 

https://developer.android.com/develop/ui/views/notifications/channels

 

Create and Manage Notification Channels  |  Android Developers

Create and Manage Notification Channels Stay organized with collections Save and categorize content based on your preferences. Starting in Android 8.0 (API level 26), all notifications must be assigned to a channel. For each channel, you can set the visual

developer.android.com

 

그러나 어떤 사람들은 설정에서 채널 별로 알림 수신 유무를 설정하는 것도 귀찮아해서 그냥 켜진 채로 냅두는 경우도 많다. 상태바 부분에 엄청나게 많은 알림이 와 있는데 지우지 않고 냅두고 있는 경우를 한 번쯤은 보았을 것이다.

그래서 안드로이드 13부터는 "POST_NOTIFICATIONS" 알림 권한을 도입했다.

 

https://developer.android.com/guide/topics/ui/notifiers/notification-permission?hl=ko 

 

알림 런타임 권한  |  Android 개발자  |  Android Developers

알림 런타임 권한 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 13(API 수준 33) 이상에서는 앱에서의 예외 없는(포그라운드 서비스 포함) 알림 전송

developer.android.com

 

핵심은 사용자에게 알림 권한을 요청한 다음, 유저가 허용하면 그 다음부터 알림을 표시할 수 있게 바뀌는 것이다. 이것의 구현은 기존에 하던 대로 매니페스트에 권한 넣고 허용여부 따져서 허용되지 않았다면 요청하면 된다.

 

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

 

이 때 사용자는 허용 / 허용 안 함을 선택하는 것 외에 다이얼로그를 스와이프해서 없앨 수도 있다. 스와이프해서 없앤 경우 알림 권한의 상태가 바뀌지 않는다.

그럼 허용, 허용 안 함, 스와이프해서 없앤 경우에는 각각 뭐가 어떻게 달라질까?

 

허용 선택 허용 안 함 선택 스와이프해서 없앰
모든 알림 채널이 허용됨 앱이 예외에 해당하지 않는 한 유저에게 알림을 보낼 수 없음 권한 상태 변경 없음
포그라운드 서비스 관련 알림 게시
(알림 창에 표시됨)
특정 역할 몇 개를 제외하고 모든 알림 채널이 차단된다(=유저가 시스템 설정에서 앱의 모든 알림을 수동으로 사용 중지하는 경우와 같음)

 

이것은 targetSdkVersion만 안 올리면 대응할 필요가 없다고 생각할 수 있지만 안드로이드 13으로 업데이트된 or 설정된 기기부터 알림 권한 팝업이 나타난다. 어차피 바꿀 거 미리 적용하는 것도 나쁘지 않아 보인다.

 

다음으로 클립보드다. 앱에서 유저가 비밀번호, 신용카드 정보 같은 민감한 정보를 클립보드에 복사할 수 있게 하는 경우 ClipDescription에 플래그를 추가해야 한다. 이 플래그를 추가하면 민감한 컨텐츠가 클립보드에 복사한 내용 미리보기에 표시되지 않는다.

 

민감한 컨텐츠를 신고하지 않는 복사된 텍스트 미리보기 (플래그 적용 X)
민감한 컨텐츠를 신고하는 복사된 텍스트 미리보기 (플래그 적용 O)

 

코드 예시는 아래와 같다.

 

// 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)를 사용한다.

반응형
Comments