Android

안드로이드14) USE_FULL_SCREEN_INTENT (전체화면 인텐트) 사용이 제한되며, 기기 네트워크 악용 정책 위반이 될 수 있으니 주의가 필요하다.

안드로이드 14 운영체제가 속속히 정식 출시되어 사용하는 휴대폰에서 업데이트가 이루어지고 있다. 지금 현제 갤럭시S23에 적용되었다.

운영체제가 업데이트 되면서 새로운 정책이 추가되었는데, 그 중에 나의 앱에 영향을 줄 수있는 전체화면 인텐트 USE_FULL_SCREEN_INTENT에 대해 알아보자.

우선 가장큰 문제는 현재 앱에서 알람을 목적으로 사용중인 전체화면 인텐트가 까딱하면 일반기기 및 네트워크 악용 위반으로 처리될 수 있다는 것이다.

일반적인 기기 및 네트워크 악용 위반 예제는 아래와 같으며, 가장 아래쪽에 새롭게 추가된 것 같다.


일반적인 기기 및 네트워크 악용 위반의 예

  • 광고를 표시하는 다른 앱을 차단하거나 방해하는 앱
  • 다른 앱의 게임플레이에 영향을 미치는 게임 속임수 앱
  • 서비스, 소프트웨어 또는 하드웨어를 해킹하거나 보안 기능을 우회하는 방법을 조장하거나 안내하는 앱
  • 서비스 약관을 위반하는 방식으로 서비스 또는 API에 액세스하거나 이를 사용하는 앱
  • 허용 목록에 포함할 수 없고 시스템 전원 관리를 우회하려고 시도하는 앱
  • 서드 파티에게 프록시 서비스를 제공하는 앱은 사용자를 대상으로 이러한 기능을 제공하는 것이 앱의 주된 목적인 경우에만 서비스를 제공할 수 있습니다.
  • Google Play 이외의 출처에서 dex 파일, 네이티브 코드와 같이 실행 가능한 코드를 다운로드하는 앱 또는 서드 파티 코드(예: SDK)
  • 사용자의 사전 동의 없이 기기에 다른 앱을 설치하는 앱
  • 악성 소프트웨어 배포 또는 설치로 연결하거나 이러한 활동을 조장하는 앱
  • 신뢰할 수 없는 웹 콘텐츠(예: http:// URL) 또는 신뢰할 수 없는 출처에서 획득한 확인되지 않은 URL(예: 신뢰할 수 없는 인텐트를 통해 획득한 URL)을 로드하는 JavaScript 인터페이스가 추가된 웹뷰 포함 앱 또는 서드 파티 코드(예: SDK)
  • 전체 화면 인텐트 권한을 이용하여 불편을 야기하는 광고 또는 알림을 통해 사용자가 상호작용하도록 강제하는 앱


2024년 5월까지 안드로이드 U 이상을 타켓팅하는 앱의 경우 USE_FULL_SCREEN_INTENT를 사용하려면 앱의 핵심 기능에 전체 화면 알림이 필요한 앱에만 자동으로 부여되는 특별한 앱 권한이 된다.

타게팅 Build.VERSION_CODES#Q이상의 앱은 Manifest.permission.USE_FULL_SCREEN_INTENT전체 화면 인텐트를 사용하기 위해 권한( )을 요청해야 합니다.

체 화면 의도로 실행하려면 중요도 수준이 IMPORTANCE_HIGH 이상으로 설정된 채널에도 알림을 게시해야 합니다.

매개변수
intentPendingIntent: 보류 중인 출시 의도입니다.
highPriorityboolean: true를 전달하면 다른 알림이 표시되지 않는 경우에도 이 알림이 전송됩니다.

Android 11(API 수준 30)에서는 휴대전화가 잠겨 있을 때 앱에서 Notification.Builder.setFullScreenIntent를 사용하여 전체 화면 인텐트를 전송할 수 있었다. AndroidManifest에서 USE_FULL_SCREEN_INTENT 권한을 선언하면 앱을 설치시 이 권한이 자동으로 부여되었다.


안드로이드 U부터는 아래와 같이 반영된다.

전체 화면 인텐트 보안 알림

전체 화면 인텐트 알림은 수신 전화 또는 사용자가 구성한 알람 시계 설정과 같이 사용자의 즉각적인 주의가 요구되는 매우 높은 우선순위의 알림을 위해 설계되었습니다. Android 14부터는 통화와 알람을 제공하는 앱만 이 권한을 사용할 수 있도록 제한됩니다. Google Play 스토어에서는 이 프로필에 맞지 않는 앱의 기본 USE_FULL_SCREEN_INTENT 권한을 취소합니다.

이 권한은 사용자가 Android 14로 업데이트하기 전에 휴대전화에 설치된 앱에는 계속 사용 설정됩니다. 사용자는 이 권한을 사용 설정 또는 사용 중지할 수 있습니다.

새 API NotificationManager.canUseFullScreenIntent를 사용하여 앱에 권한이 있는지 확인할 수 있습니다. 권한이 없으면 앱에서 새 인텐트 ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT를 사용하여 사용자가 권한을 부여할 수 있는 설정 페이지를 실행할 수 있습니다.



위 내용을 토대로 NotificationManager.canUseFullScreenIntent

권한이 있는지 확인 후 , 권한이 없다면 ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT

인텐트를 호출하여 사용자를 설정페이지로 이동하여 권한을 부여하도록 요청할 수 있다.


하지만 문제는 구글입장에서는 일반적인 기기 및 네트워크 악용 위반으로 볼 수 있다는 것이다.

정책 위반에서 벗어나려면 광고를 제거해야할 수 도 있다.


카톡 안드로이드 개발 관련 오픈 채팅방에서 문의를 올렸는데, 아래와 같은 메세지를 누군가가 보내줬다. 아이디어가 문득 생겼다.

setFullScreenIntent가 왜 쓰이는지 모르겟네용 alarmManager에서 PendingIntent.getActivity하는게 알람앱인데!!

포그라운드서비스에서 내가 원하는 알람시점이 왔을 때 alarmManger를 즉시 호출하여 우회 하면 될 것 같은 느낌이 든다. 한번 시도를 해보아야겠다.

USE_FULL_SCREEN_INTENT 를 사용하게되면 잠금화면에서 액티비티가 자동실행된다. 반대로 화면이 켜져있을 경우에는 해드업 노티가 되고, 노티를 클릭해야만 액티비티가 실행되게 되어있다. 화면이 켜져있으면 헤드업으로 뜨는거고, 클릭시 앱이 실행되는 것이다.

[관련자료]

https://developer.android.com/about/versions/14/behavior-changes-all?hl=ko#secure-fsi

Leave a Reply

error: Content is protected !!