→ 안드로이드의 알람 권한
안드로이드는 API LEVEL 32 이하, AOS 버전 12 이하 까지는, 알람권한이 기본으로 허용되어있는 옵트아웃(Opt-out) 상태이다.
그리고, 알람권한 처리를 어플 코드상으로 하지 못하고, 알람권한이 허용되었는지 검사조차 할수 있는 방법이 없다!!
→ AOS 13 이후의 알람 권한
이제 API LEVEL 33 이상, AOS 13버전 부터는 알람권한이 옵트인(Opt-in) 으로 변경된다. 알람권한 기본값이 거부로 되어있고, 코드상으로 알람권한에 대한 허용 요청, 권한체크 등이 모두 가능해진다.
따라서 외주를 수행하며 나는 targetSDK 를 33 으로 높이고, 알람권한에 대한 로직을 분기처리 하는것으로 결정하였다!!
→ 우선 targetSDK 와 compileSDK 를 변경해준다
defaultConfig {
applicationId "com.flarez.android"
minSdkVersion 27
targetSdkVersion 33
versionCode 12
versionName "0.1.3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
→ 이제 manifest 에서 알람권한 및 세분화된 파일미디어 접근 권한이 허용 될것이다
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
→ requiredPermissionList (필요권한 리스트) 를 분기처리 해준다
private val requiredPermissionList = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
arrayOf( // 안드로이드 13 이상 필요한 권한들
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_MEDIA_IMAGES,
Manifest.permission.READ_MEDIA_VIDEO,
Manifest.permission.POST_NOTIFICATIONS
)
}else{
arrayOf( // 안드로이드 13 미만 필요한 권한들
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
}
→ 권한 체크 후 권한요청 까지는, 분기처리가 필요 없다. 그대로 사용한다
→ 권한 요청후 콜백에서, AOS 12버전 이하에 대한 알람권한 사용자 안내메세지를 삽입한뒤 분기처리 하였다
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if(requestCode == RC_PERMISSION){
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU){
// 안드로이드 버전 12 이하에서만, 알람 권한 모달 띄우기
val builder = AlertDialog.Builder(this)
builder.setTitle("")
.setMessage("'플레어즈'\n 에서 보내는 웹툰 업데이트 소식을 허용하시겠습니까?")
.setPositiveButton("허용하기",
DialogInterface.OnClickListener { dialog, id ->
})
.setNegativeButton("취소", // 취소 클릭시, 알림권한 설정 화면으로 이동
DialogInterface.OnClickListener { dialog, id ->
gotoSettings("noti")
})
builder.show()
}
}
}
참조링크 : https://nosorae.tistory.com/entry/AndroidKotlin-딱-정리해-targetSdk-33-후-알림-권한요청-Feat-푸시-옵트인-작업