봄날은 갔다. 이제 그 정신으로 공부하자

잘되던 카톡 공유하기가 안된다면? 본문

android Tip

잘되던 카톡 공유하기가 안된다면?

길재의 그 정신으로 공부하자 2021. 12. 27. 11:11

잘되던 카톡 공유하기가 안된다면?

 

Android 보안 정책의 강화에 따라 Android 11 이상의 단말에서는 앱이 다른앱에 접근하기 위해서는 manifest.xml 파일에 <query> 요소를 추가하여 접근하고자하는 앱의 패키지명 또는 intent Filter 서명을 포함해야하는데 해당 부분을 추가하지 않아 발생하는 문제입니다.

 

영향받는 API는 아래와 같습니다.

  - PackageManager.getPackageInfo(…)

  - PackageManager.getInstalledPackage(…)

  - PackageManager.queryIntentActivities(…)

 

조금 자세히 설명하면

Android 11 미만의 단말에서는 카톡이 설치되어 있는 경우 true를 반환하는 동작이 문제 없지만,

Android 11 이상의 단말에서는 위 언급한 query 요소를 명시적으로 추가하지 않으면 앱 설치 여부와 무관하게 무조건 false를 반환합니다.

try{
	getPackageManager().getPackageInfo(“com.kakao.talk”, PackageManager.GET_ACTIVITIES)
	return true
}catch(e: PackageManager.NameNotFountException){
	return false
}

 

이 문제를 해결하기 위해서는 manifest.xml 파일에 <query> 요소를 아래와 같이 추가해주어야 합니다.

<queries>
	<package android:name=“com.kakao.talk”/>
</queries>

 

이 방법 외에도 더 강력한 아래 방법이 있지만…

<user-permission android:name=“android.permission.QUERY_ALL_PACKAGES”/>

 

아래 방식은 자신의 앱이 단말의 여러앱들에 접근하거나 확인하는 용도의 앱이 아니면 그리 권장하지 않는 방법입니다.

앱이 너무 과한 권한을 요구한다고 판단하는 경우 구글이 언제 앱에 제약을 가할지 모르기 때문 입니다.

 

가급적이면 QUERY_ALL_PACKAGES 아닌 명시적으로 요청하는 방식을 추천 드립니다.

Comments