I'm using webview to show transaction process (payment by creditCard). If I use webView.load(given URL) it is working and it will redirect me to bank page in my browser from my app.
But I need to track if the payment is successful (it will redirect me to specific URL) and sent data back to the server.
I used webViewClient, but as I use the client, it will not redirect me to a browser page, it will stay at "processing data" screen inside the app for eternity. Even if I add only view.loadurl(URL) and return true inside shouldOverrideUrlLoading, it will do the same thing. There are 4-5 redirects till the final result. StartURL(add creditCardInfo) - Redirect to validation - redirect to payment confirmation - redirect to specific URL which returns data(if branch)
class PurchaseWebView: AppCompatActivity() {
private lateinit var purchaseWebView: WebView
private val api: API = API.getInstance(this)
private val webViewActivity = this
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.purchase_web_view_layout)
purchaseWebView = findViewById(R.id.webview)
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
purchaseWebView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
createLog("WebView Loading url... ", url)
if (url.startsWith("purchase.complete.url.com", 0)){
api.purchaseCreditCardResult(url, webViewActivity, object: IPurchaseCallback{
override fun onError(errorJSON: JSONObject) {
createLog("WebView Error ", errorJSON.toString())
}
override fun onSuccess(purchaseJSON: JSONObject?) {
createLog("WebView Success ", "Finishing Activity")
}
})
return false
} else {
view.loadUrl(url)
return true
}
}
}
@RequiresApi(Build.VERSION_CODES.N)
purchaseWebView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
if (request.url.toString().startsWith("purchase.complete.url.com", 0)){
api.purchaseCreditCardResult(request.url.toString(), webViewActivity, object: IPurchaseCallback{
override fun onError(errorJSON: JSONObject) {
createLog("WebView Error ", errorJSON.toString())
}
override fun onSuccess(purchaseJSON: JSONObject?) {
createLog("WebView Success ", "Finishing Activity")
}
})
return false
} else {
view.loadUrl(request.url.toString())
return true
}
}
}
purchaseWebView.loadUrl(intent.extras.getString("purchaseURL"))
}