【发布时间】:2019-01-16 19:10:57
【问题描述】:
我正在使用 webview 来显示交易流程(通过信用卡付款)。如果我使用 webView.load(given URL) 它正在工作,它会将我从我的应用程序重定向到浏览器中的银行页面。
但我需要跟踪付款是否成功(它会将我重定向到特定的 URL)并将数据发送回服务器。
我使用了 webViewClient,但是当我使用客户端时,它不会将我重定向到浏览器页面,它将永远停留在应用程序内的“处理数据”屏幕上。即使我只添加 view.loadurl(URL) 并在 shouldOverrideUrlLoading 中返回 true,它也会做同样的事情。有 4-5 次重定向直到最终结果。 StartURL(add creditCardInfo) - 重定向到验证 - 重定向到付款确认 - 重定向到返回数据的特定 URL(如果分支)
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"))
}
【问题讨论】:
标签: android kotlin android-webview