Mobilní zařízení

Mobilní zařízení

Pokud provozujete e-shop jako mobilní aplikaci na zařízení zákazníka, lze očekávat, že také platební aplikace MúzaPay zákazníka běží tamtéž. V takovém případě musí vaše aplikace, používající WebView, po přesměrování prohlížeče (které proběhne po kroku #40 v https://benefitplus.atlassian.net/wiki/spaces/BP2/pages/753665/Platebn+br+na#Sekven%C4%8Dn%C3%AD-diagram-platby) umožnit systému spustit a otevřít aplikaci MúzaPay (“deeplink” URL). Pokud to váš e-shop neumožní, může to zákazníkovi znesnadnit, v krajním případě až zablokovat možnost placení MúzouPay.

Zkontrolujte proto prosím, že vaše implementace je v souladu s níže uvedenými doporučeními.

Android

Výtah z dokumentace Android SDK

"Give the host application a chance to take control when a URL is about to be loaded in the current WebView. If a WebViewClient is not provided, by default WebView will ask Activity Manager to choose the proper handler for the URL. If a WebViewClient is provided, returning true causes the current WebView to abort loading the URL, while returning false causes the WebView to continue loading the URL as usual."

Zdroj: https://developer.android.com/reference/android/webkit/WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView,%20android.webkit.WebResourceRequest)

Doporučené řešení

Implementujte shouldOverrideUrlLoading a pro MúzaPay URL vraťte true:

webView.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { val host = request.url.host ?: "" val path = request.url.path ?: "" val isMuzaPay = host in listOf("pay.muza.cz") && (path.startsWith("/q/") || path.startsWith("/m/")) val isNonHttp = request.url.scheme !in listOf("http", "https") if (isMuzaPay || isNonHttp) { startActivity(Intent(Intent.ACTION_VIEW, request.url)) return true } return false } }

iOS

Dokumentace

https://developer.apple.com/documentation/webkit/wknavigationdelegate/1455643-webview

Doporučené řešení

Implementujte WKNavigationDelegate.decidePolicyFor:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { guard let url = navigationAction.request.url, let host = url.host, let path = url.path as String? else { decisionHandler(.allow) return } let isMuzaPay = ["pay.muza.cz"].contains(host) && (path.hasPrefix("/q/") || path.hasPrefix("/m/")) let isNonHttp = url.scheme?.lowercased() != "http" && url.scheme?.lowercased() != "https" if isMuzaPay || isNonHttp { UIApplication.shared.open(url) decisionHandler(.cancel) return } decisionHandler(.allow) }