Android/error
[Error] Android 12 PendingIntent Flag 이슈 대응
mins9273
2024. 11. 20. 14:31
반응형
Android 12(API 31) 이상을 대상으로 앱을 빌드하거나 실행할 경우,
PendingIntent를 생성할 때 FLAG_IMMUTABLE 또는 FLAG_MUTABLE 플래그를 반드시 명시해야 합니다.
이를 지정하지 않을 경우 컴파일 또는 실행 시 다음과 같은 에러 또는 경고를 만날 수 있습니다.
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable.
이는 보안성과 동작 일관성을 강화하기 위해 추가된 요구사항입니다.
PendingIntent의 동작 및 플래그의 목적을 이해하고 올바르게 사용하는 것이 중요합니다.
PendingIntent란?
PendingIntent는 안드로이드에서 다른 앱이나 시스템에서 실행할 작업을 미리 정의하고,
특정 시점에 실행되도록 예약할 수 있는 객체입니다.
예: 알림을 클릭했을 때 앱 화면 열기, 알람 설정, 서비스 시작 등.
FLAG_IMMUTABLE와 FLAG_MUTABLE의 정의
PendingIntent의 mutable(변경 가능) 또는 immutable(변경 불가능) 상태를 정의합니다.
FLAG_IMMUTABLE
- 의미: PendingIntent가 생성된 후, 내부의 Intent 데이터를 변경할 수 없습니다.
- 특징: 보안성이 높음, PendingIntent가 악의적인 코드나 다른 앱에 의해 수정될 가능성을 차단
안드로이드 12(API 31) 이상에서 기본적으로 권장 - 적합한 경우:PendingIntent의 데이터가 고정적이고 변경될 필요가 없는 경우
예: 알림 클릭 시 고정된 동작 실행, 단일 작업 스케줄링 등
val intent = Intent(context, MyActivity::class.java)
val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
FLAG_MUTABLE
- 의미: PendingIntent가 생성된 후, 내부의 Intent 데이터를 수정할 수 있습니다.
- 특징: 앱이 동적으로 데이터를 업데이트하거나 변경된 작업을 처리할 수 있음,
보안 위험이 존재할 수 있으므로 신중히 사용해야 함 - 적합한 경우:PendingIntent를 사용하는 앱이 실행 시점에 동적으로 데이터를 변경해야 하는 경우,
예: 알림에서 동적으로 업데이트되는 버튼 동작, 위치 기반 서비스 등
val intent = Intent(context, MyService::class.java)
val pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_MUTABLE)
두 플래그의 주요 차이점
특성 | FLAG_IMMUTABLE | FLAG_MUTABLE |
변경 가능 여부 | 변경 불가능 | 변경 가능 |
보안 | 보안성이 높음 | 보안 취약점 존재 가능 |
권장 여부 | 기본적으로 권장됨 | 필요한 경우에만 사용 |
주요 사용 사례 | 고정된 알림 동작, 단일 작업 스케줄링 | 동적으로 업데이트되는 알림, 위젯 서비스 |
반응형