알람권한 분기처리 (Android 13 / Android 12)

박진성·2023년 4월 16일
0

개요

→ 안드로이드의 알람 권한

안드로이드는 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 에서 알람권한 및 세분화된 파일미디어 접근 권한이 허용 될것이다

  • 또한 targetSDK 를 33 높이면서, 배포시 아래 광고권한도 필요하다. 추가해줬다
<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버전 이하에 대한 알람권한 사용자 안내메세지를 삽입한뒤 분기처리 하였다

  • 사용자가 직접 Setting 앱에 들어가서 알람권한 설정을 해줘야 하므로, 모달창을 띄워 안내를 하도록 하였다
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-푸시-옵트인-작업

profile
Android Developer

0개의 댓글