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."
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)
}