IT공간/Android

타겟SDK 30 적용기 <1 : 구글 정책 변경에 따른 앱 패키지명 등록>

dkchae 2021. 11. 5. 15:30

타겟SDK 30 늦게 적용하길 참 잘했다.

11월부터 필수적용인데 메일 받은 날짜가 10월 27일이다.

만약 저걸 몰랐고, 테스트 단계에서 놓치고 배포했다면 1급장애로 보고될 뻔 했다.

최근에 업체 테스트가 도입되어서 다행이지... 결제장애는 정말 무섭다.

 

<아래는 유지보수중인 앱의 결제사에서 받은 메일 원문>


 

[재안내] 구글 정책 변경에 따른 앱 패키지명 등록 요청

2021-10-27 (수) 18:06:09

보낸사람: "KG모빌리언스" <mail@nems.mcash.co.kr>

 

안녕하세요, (주)KG모빌리언스입니다. 
 
구글 보안정책 변경으로 당사 모바일 결제창 이용하는 가맹점에서 Android APP 호출 시
추가 되어야 할 '앱 패키지명'을 아래와 같이 공유 드리니, 참고 부탁드립니다.
  
[구글 안드로이드 정책 변경]
■ 적용일자 : 2021년 11월 1일 예정
■ 구글 안드로이드 정책에 따라 11월부터 구글플레이스토어에 업로드시 Android 11(API 레벨 30) 이상으로 타깃한 앱만 업로드 가능. 
■  앱을 사용하지 않는 가맹점은 해당사항이 없음
■ 타켓버전 SDK30 부터는 A앱에서 B앱을 호출하고자 하는 경우 A앱의 매니페스트 파일 내 B앱의 패키지명 쿼리 선언 필요
■ 구글 문서 참고 :  https://developer.android.com/training/basics/intents/package-visibility?hl=ko
 
[변경대상]

 신용카드

카드사 앱 패키지명
삼성카드  kr.co.samsungcard.mpocket
신한카드  com.shcard.smartpay
신한카드 (ARS/일반결제/Smart결제)  com.shinhancard.smartshinhan
국민카드  com.kbcard.cxh.appcard
LiiV(국민카드)  com.kbstar.liivbank
BC카드  kvp.jjy.MispAndroid320
하나카드  com.hanaskcard.paycla
하나카드(멤버스결제)  kr.co.hanamembers.hmscustomer
롯데카드  com.lcacApp
NH카드  nh.smart.nhallonepay
현대카드  com.hyundaicard.appcard
씨티카드  kr.co.citibank.citimobile

 

■ 간편결제

간편결제사 앱 패키지명
삼성페이  com.samsung.android.spay
카카오페이  com.kakao.talk
SSG페이  com.ssg.serviceapp.android.egiftcertificate
토스  viva.republica.toss
페이코  com.nhnent.payapp
네이버페이  com.nhn.android.search
L페이  com.lottemembers.android

 

 계좌이체

계좌이체 VAN 앱 패키지명
금결원  com.kftc.bankpay.android
농협은행(앱캐시)  com.nh.cashcardapp
MG새마을금고  kr.co.kfcc.mobilebank
경남은행  com.knb.psb

   

 기타결제수단

기타결제수단 구별 앱 패키지명
T머니(티모넷) 댐댐  com.kftc.bankpay.android
인앱결제모듈  com.tmoney.inapp
NFC  com.tmoney.nfc_pay
휴대폰 결제 LG U+  uplus.membership
스마일페이 Smilepay  com.mysmilepay.app

   

■ 공인인증(신용카드)

카드사(인증) 앱 패키지명
하나카드  com.hanaskcard.rocomo.potal
현대카드  com.lumensoft.touchenappfree

 

■ 본인인증(PASS)

인증사 앱 패키지명
SKT  com.sktelecom.tauth
KT  com.kt.ktauth
LGT  com.lguplus.smartotp

 

■ 백신(신용카드결제시)

백신 앱 패키지명
신용카드 결제시
필요 백신
 com.TouchEn.mVaccine.webs
 com.ahnlab.v3mobileplus
 kr.co.shiftworks.vguardweb

 

최고의 서비스를 위해 최선을 다하는 고객 중심의 KG 모빌리언스가 되겠습니다.

감사합니다.


내용을 살펴보자면 안드로이드에서 PackageManager를 통해서 패키지명을 넘겨주고, 그 앱이 설치되어있냐를 판단하는 코드가 타겟SDK 30부터는 안먹는다는 얘기다.

 

<삼성페이 설치여부가 false로 반환될 것임. 설치됐어도 실행 불가>

String PACKAGE_NAME = "com.samsung.android.spay";

private boolean isPackageInstalled(String packageName, PackageManager packageManager) {
    try {
        packageManager.getPackageInfo(packageName, 0);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}

// 사용 방법
PackageManager pm = getPackageManager();
if (isPackageInstalled(PACKAGE_NAME, pm)) {
    // 설치
} else {
    // 미설치
}

 

이를 해결하려면 AndroidManifest.xml 내에 호출하고자 하는 앱 패키지명을 추가해줘야 한다. 참고로 queries를 쓰려면 gradle 버전을 4 이상으로 맞춰야한다.

<queries>
      <package android:name="com.samsung.android.spay" />
      <!-- 이 아래로 필요한 앱 만큼 모두 추가하세요 -->
</queries>

 

위 메일에서는 관련되는 서비스의 앱 패키지명을 알려줬는데, 다른앱의 패키지명을 알고싶으면

플레이스토어 PC버전의 URL을 보면 된다. 허용해주고 싶은앱을 모두 찾아서 등록하자.

com.samsung.android.spay

 

다른 해결방법도 하나 소개한다. PackageManager를 쓰지 않는 방법인데, 설치여부를 판단할 때 인텐트 호출을 통해서 확인하면 된다.

Uri uri = Uri.parse(intent.getDataString());
intent = new Intent(Intent.ACTION_VIEW, uri);

try {
	startActivity(intent); // 설치가 되어있다면 인텐츠 호출 성공
} catch (ActivityNotFoundException e) {
	// 설치가 안된것으로 판단하고 마켓으로 보내던지 하면 됨
}