From b50e090ac1edc5436828d4b2855518e2ec532ca1 Mon Sep 17 00:00:00 2001 From: bingbong Date: Wed, 5 Jan 2022 09:24:09 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EC=95=88=EB=93=9C=EB=A1=9C=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=2011=20=EB=B3=B4=EC=95=88=20=EC=A0=95=EC=B1=85=20?= =?UTF-8?q?=EA=B0=80=EC=9D=B4=EB=93=9C=20=EB=A7=81=ED=81=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat : 코틀린 앱 이동 예시 추가 Update README.md --- .../README.md" | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git "a/\354\235\270\354\246\235\352\262\260\354\240\234/README.md" "b/\354\235\270\354\246\235\352\262\260\354\240\234/README.md" index 8d46a85..244c9e5 100644 --- "a/\354\235\270\354\246\235\352\262\260\354\240\234/README.md" +++ "b/\354\235\270\354\246\235\352\262\260\354\240\234/README.md" @@ -212,12 +212,17 @@ IMP.request_pay({ ### 2.1.a 안드로이드 -가맹점 앱의 WebView에서 PG사별 앱 호출 및 미설치 체크 로직을 구현합니다.
+ℹ️ 가맹점 앱의 WebView에서 PG사별 앱 호출 및 미설치 체크 로직을 구현합니다.
-[WebViewClient](https://developer.android.com/reference/android/webkit/WebViewClient.html) 클래스의 `shouldOverrideUrlLoading` 메소드를 다음과 같이 재정의하여 구현합니다. +ℹ️ [Android 11 보안정책에 따른 앱 패키지 등록](https://guide.iamport.kr/df95fe31-c0d0-4215-8c4f-1d0b539fad88) 이 필요할 수 있으니 먼저 링크의 가이드를 참조하시기 바랍니다. + + +[WebViewClient](https://developer.android.com/reference/android/webkit/WebViewClient.html) 클래스의 `shouldOverrideUrlLoading` 메소드를 다음과 같이 재정의하여 구현합니다. +- java ```java +// java 예시 public class MyViewClient extends WebViewClient { @Override @@ -254,6 +259,41 @@ public class MyViewClient extends WebViewClient { } ``` + +- kotlin +```kotlin +// kotlin 예시 +// 예시코드이며 가맹점 구현에 따라 다를 수 있습니다. +override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { + request?.url?.let { + if (it.scheme == "about") { + return true // 이동하지 않음 + } + val urlStr = it.toString() + if (!URLUtil.isNetworkUrl(urlStr) && !URLUtil.isJavaScriptUrl(urlStr)) { + openPaymentApp(urlStr) // 앱이동 + return true + } + } + return super.shouldOverrideUrlLoading(view, request) +} + +fun openPaymentApp(url: String) { + Intent.parseUri(url, Intent.URI_INTENT_SCHEME)?.let { intent: Intent -> + runCatching { + startActivity(intent) // 앱 이동 + }.recoverCatching { + // 앱이동에 실패(미설치)시 앱스토어로 이동 + val packageName = intent.getPackage() + if (!packageName.isNullOrBlank()) { + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$packageName"))) + } + } + } +} +``` + + ### 2.1.b iOS iOS 보안 정책상 외부 호출될 URL scheme을 `info.plist` 파일의 `LSApplicationQueriesSchemes`에 추가해야 외부 앱으로 이동할 수 있습니다.