타겟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을 보면 된다. 허용해주고 싶은앱을 모두 찾아서 등록하자.
다른 해결방법도 하나 소개한다. PackageManager를 쓰지 않는 방법인데, 설치여부를 판단할 때 인텐트 호출을 통해서 확인하면 된다.
Uri uri = Uri.parse(intent.getDataString());
intent = new Intent(Intent.ACTION_VIEW, uri);
try {
startActivity(intent); // 설치가 되어있다면 인텐츠 호출 성공
} catch (ActivityNotFoundException e) {
// 설치가 안된것으로 판단하고 마켓으로 보내던지 하면 됨
}
'IT공간 > Android' 카테고리의 다른 글
타겟SDK 30 적용기 <2 : 토스트 메시지 UI를 함부로 바꾸지 말 것> (0) | 2021.11.05 |
---|---|
5월 5일부터는 앱에 광범위한 저장공간 액세스 권한이 필요한 이유를 알려야 합니다(?) (0) | 2021.05.17 |
타겟SDK 버전을 올리지 않으면 앱을 없애버리겠읍니다 (0) | 2021.05.17 |