QUERY_ALL_PACKAGES 관련 이슈로 앱 업로드가 거부되는 상황 발생시 해결방법
- 플러터 앱 개발에 사용하던 라이브러리 중 AndroidManifest.xml 파일에 QUERY_ALL_PACKAGES 라는 uses-permission을 사용하는 것이 있었다.
- 이 부분이 문제가 되어 계속해서 앱 업데이트/개시 등이 문제가 되었다.
이전에도 그랬는지는 잘 모르겠는데, QUERY_ALL_PACKAGES에 대해서는 엄격하게 검사하는 것 같다.
문제 파악
- 폭넓은 패키지(앱) 가시성(QUERY_ALL_PACKAGES) 권한(클릭!) 사용에 대한 공식문서를 보고
대체 이게 뭔지 좀 알아보았다.
- 기능. 기기에 설치된 앱 인벤토리 확인
- 조건 1. 앱이 Android 11 이상, Android API 수준 30 이상 타겟팅
- 조건 2. 모든 앱을 검색하기 위한 핵심 목적 소명 필요(개인정보 이슈로 인해)
- 허용 용도. 기기 검색, 바이러스 백신 앱, 파일 관리자, 브라우저, 금융 거래 기능, 등
- 비허용 용도.
1. 앱의 핵심 목적과 직접적인 관련이 없는 경우(p2p공유 등)
3. 앱에서 쿼리된 앱 인벤토리 데이터를 분석 또는 광고 수익 창출 목적으로 판매하거나 공유하는 경우
4. 범위가 좁은 앱 가시성 방식으로도 필요한 작업을 처리할 수 있는 경우
해결책 1. 소명하기
-
머리아프게 앱을 바꾸는 것 보다 스토어 측에 "우리 이거 꼭 필요해요"를 말하는게 더 빠를 수 있다.
-
스토어로 들어가서 앱 콘텐츠 -> 모든 패키지 쿼리 권한의 "관리"를 누른다.
-
핵심목적, 용도(체크리스트), 동영상URL을 첨부해야 한다.
(1) 핵심목적 : 허용 용도 내에서 앱이 무슨 일을 하는지 설명
(2) 용도 : 체크리스트를 보고 적당한 부분에 체크해둔다
(3) 앱 실행 영상을 촬영한 다음 youtube에 "링크 있는 사람만 보기" 옵션으로 업로드 해서 url첨부
세 가지를 모두 작성했으면 저장을 누르고,
좌측 드롭다운 메뉴 목록의 "게시 개요"로 들어가서 변경사항을 전송해준다.
이러고 스토어 심사에서 Ok해주면 여기서 끝
해결책 2-1. 프로젝트 수정
-
작업하던 앱은 금융 거래 기능에도 해당되기 때문에 소명하면 될 거라고 생각했는데, "범위가 좁은 앱 가시성 방식" 때문에 계속해서 반려가 났다.
아무튼 전부 접근시키는건 개인정보 보호상 위험하다는 조치.
이렇게 된 이상 프로젝트를 수정해보자.
-
내 프로젝트/android/app/src/main/AndroidManifest.xml 파일에 접근한다.
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
- 위 부분을 삭제하고, 아래와 같이 queries를 넣고 그 안에 명시적인 패키지 이름을 넣어주면 된다.
- 수정을 완료한 다음 빌드해서 기능이 똑같이 작동하는지 확인하고 앱번들을 올리자.
<queries>
<package android:name="com.package.package1"/>
<package android:name="com.package.package2"/>
<package android:name="com.package.package3"/>
....
</queries>
해결책 2-2. 활성 Appbundle 죽이기
새로 올린 번들이 문제가 없더라도 심사에서 리젝 당하고는 한다.
기존에 QUERY_ALL_PACKAGES를 쓰던 번들이 활성화 된 경우에 그렇다.
- 방금 열었던 "앱 콘텐츠" -> "모든 패키지 쿼리 권한" 에서 상단의 App Bundle및 APK 보기를 클릭합니다.
- 그러면 현재 그 권한을 쓰고있는 번들의 목록이 출력된다. 이 번호를 메모허가너 적어두자.
QUERY_ALL_PACKAGES권한을 쓰는 번들이 공개테스트/비공개테스트/내부테스트 등 어딘가에 올라가서 활성화 되어 있으면 새로 올린 번들이 아무런 문제가 없어도 넘어가지지 않는다.
- 다시 좌측 드롭다운 메뉴 목록의 App Bundle 탐색기로 들어간다.
위에서 메모해둔 번들을 찾아서 제일 오른쪽의 파란색 화살표를 눌러서 상세 정보를 열람한다.
- 빨간 테두리로 표시한 "출시"의 활성 버젼이 보일 것이다.
버전 넘버를 클릭하면 해당 버전의 출시 정보로 넘어가는데, 그 버전이 "대체됨", "게시되지 않음" 상태여도 우선 그 번들이 꽂혀있으면 문제로 본다.
- 버전 정보로 넘어왔으면 오른 쪽의 "트랙보기"를 눌러서 "새 버전 만들기"를 해준다.
새 버전에 적용할 번들은 라이브러리에서 문제 없는 버전을 눌러주면 된다.
- 기타 정보들은 적당히 입력하고 버전을 만들어서 제출한 뒤, "게시 개요"로 다시 가서 변경사항을 업로드 해준다.
- 그 후에 다시 App Bundle 탐색기로 돌아가면 해당 버전이 비활성화 되어있는걸 확인할 수 있다.
이렇게 모든 범인을 다 비활성화 상태로 두고 플레이스토어 판단을 기다리자.
결과
- 기능도 잘 굴러가고 앱 상태도 프로덕션으로 정상적으로 변경되었다.
이전에 올려둔 앱번들 때문에 앱을 업데이트/게시 못하는 사람이 없기를 바라며 글을 마친다.
감사합니다 소스를 아무리 고쳐도 계속해서 리젝되는 이유를 찾았네요