안드로이드 SDK 31 로 변경..

카카오 SDK V2로 변경...

다른 SDK 추가 및 변경 작업...

 

내부 테스트 완료...

 

끝났다고 씐났는데... 프로덕션 배포요청을 했는데...

거부를 당했다...

 

아래와 같은 메일을 수신을 받음...

 

결론적으로는 "QUERY_ALL_PACKAGES 권한 사용을 승인할 수 없습니다." 이게 문제였다  

 

 

 Android 11 이상의 보안정책이 변경되었다고 한다.. 2022년 11월 부로..

https://support.google.com/googleplay/android-developer/answer/10158779?hl=ko 

 

폭넓은 패키지(앱) 가시성(QUERY_ALL_PACKAGES) 권한 사용 - Play Console 고객센터

도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요

support.google.com

 

기존에는 Manifest.xml 에서 아래와 같이 사용을 하여 앱검토중 반려를 받았다.

<!-- SDK 30 이상부터.. 보안관련으로 심사통과 못함..-->
<!-- 아래 영역을 사용하면 안됨.. -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
   tools:ignore="QueryAllPackagesPermission" />

 

현재 운영중인 앱에서는 카드사나 PG사 어플로 결제가 필요하여 따로 설정이 필요했다.

두가지 방법이 있었다.

 

1. 특정 패키지 이름을 추가 ( <queries>요소에 패키지 정의)

    - APP to APP 으로 바로 앱을 실행 시키려면 해당 앱 특정 패키지 이름을 추가해 주면 된다.

<manifest package="com.example.game">
    <queries>
        <package android:name="com.example.store" />
        <package android:name="com.example.services" />
    </queries>
    ...
</manifest>

 

2. shouldOverrideUrlLoading() 메소드에서 startActivity() 호출  App 미설치로 발생하는 

   ActivityNotFoundException (No Activity found to handle Intent)에 예외처리 로직 추가

 

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (!URLUtil.isNetworkUrl(url) && !URLUtil.isJavaScriptUrl(url)) {
        final Uri uri;

        try {
            uri = Uri.parse(url);
        } catch (Exception e) {
            return false;
        }

        if ("intent".equals(uri.getScheme())) {
            return startSchemeIntent(url);
        } else {
            try {
                startActivity(new Intent(Intent.ACTION_VIEW, uri));
                return true;
            } catch (Exception e) {
                return false;
            }
        }
    }

    return false;
}

private boolean startSchemeIntent(String url) {
    final Intent schemeIntent;

    try {
        schemeIntent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
    } catch (URISyntaxException e) {
        return false;
    }

    try {
        startActivity(schemeIntent);
        return true;
    } catch (ActivityNotFoundException e) {
        final String packageName = schemeIntent.getPackage();

        if (!TextUtils.isEmpty(packageName)) {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)));
            return true;
        }
    }

    return false;
}

 

위와 같이 작업을 하여 배포 완료~

올래~

 

= 참고 사이트 = 

 - https://developer.android.com/training/package-visibility/declaring?hl=ko 

 

패키지 공개 상태 요구사항 선언  |  Android 개발자  |  Android Developers

패키지 공개 상태 요구사항 선언 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱을 만들 때는 앱이 상호작용해야 하는 기기의 다른 앱을 고려하는 것이

developer.android.com

- https://codedaeng.tistory.com/6

 

안드로이드11 패키지 가시성제한 대응

올해 초 새로 출시한 안드로이드 앱에 결제 모듈을 연동한 결제기능이 있다. 그런데 메일이 한통 왔는데 1. 배경 1) 안드로이드 11의 보안 정책 변경 (11월 1일 부) 2) 안드로이드 11 이전 버전 OS에서

codedaeng.tistory.com

- https://docs.tosspayments.com/guides/webview#2-%EC%95%B1-%EC%8A%A4%ED%82%B4-%EC%8B%A4%ED%96%89%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%BD%94%EB%93%9C-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0

 

웹뷰(WebView)에서 외부 앱 열기 | 토스페이먼츠 개발자센터

브라우저가 아닌 모바일 웹뷰로 결제창을 띄울 때 카드사별 결제 수단을 인증하려면 외부 앱(3rd-party 앱)을 연동해야 합니다. 연동에 필요한 외부 앱 스킴(App URL Scheme)목록과 추가 로직을 살펴보

docs.tosspayments.com

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기