inappbrowser 앱실행 안되고 마켓 열릴때

임종필·2022년 7월 29일
0

inappbrowser 앱실행 안되고 마켓 열릴때

검색어 : android getlaunchintentforpackage returns null

앱을 플레이스토어에 등록하려하는데
build.gradle 에서 targetSDkversion = 30 이상으로 올리라는 요청을 받았다.
하기 싫어도 스토어에 등록이 안되니 강제로하라는 권고다.
이렇게 했더니 인앱프라우저에서 설치되어 있는 타 결제 앱이 열리지 않고 플레이스토어 마켓이 열리는 현상이 발생하게 되었다.

android 11(targetSDkversion = 30 와 같은 의미) 이상을 타깃하면 보안 강화 조치로 타앱 설치여부를 확인하는 검색이 막혀 버린다.
그래서 앱이 설치되어 있지 않다고 판단하여 마켓으로 직진하게 된다.

getlaunchintentforpackage() 기능이 안되게 되는 것인데
해결하는 방법은

AndroidManifest.xml 파일에

<queries></queries>

를 추가해주는 것이다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.abc.a">
  
  
<queries>
        <package android:name="com.kbstar.kbbank" />
        <package android:name="com.kakao.talk" />
        <package android:name="com.shcard.smartpay" />
        <package android:name="com.hyundaicard.appcard" />
        <package android:name="kr.co.samsungcard.mpocket" />
        <package android:name="com.samsung.android.spay" />


</queries>
  
  
</manifest>
  

PG사 결제를 추가해줘야하는데, PG앱에서 결제를 지원하는 카드사나 간별결제 등등의 앱들의 모든 목록을 다 추가해줘야한다.

PG사에 앱ID 를 정리해 놓았으면 이것을 참고해서 넣어주면 될것 같은데,
안되면 일일이 수동으로 찾아서 검색하면서 해야할 수도 있다.

수동으로 검색하는 방법은

inAppBrowser.java 파일 "intent:" 로검색하면 1205 번째줄 쯤
아래에 아래와 같이 넣어주고, 안으로이드스튜디오에서 결제 진행하면서
Logcat 에서 "Error with PackgeName" 로 검색해 놓고 보면
packgeName 확인할 수 있다.

} else if (url.startsWith("geo:") || url.startsWith(WebView.SCHEME_MAILTO) || url.startsWith("market:") || url.startsWith("intent:")) {
                try {
   //url 주소로 intent 생성
   Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
   // 패키지명
   String packgeName = String.valueOf(intent.getPackage());
   LOG.e(LOG_TAG, "Error with PackgeName : " +packgeName);
  

이 packgeName 을 query 요소로 등록하면 된다.

profile
프롭테크 프로그래머

0개의 댓글