应产品需求,需要在webview中通过H5页面唤起native的微信支付![怒掀桌子表情]
其实很多坑前辈们都踩过了,我这里将代码粘出来,记录一下自己的坑,看看有没有相同经历的小伙伴
...
@Override
public boolean shouldOverrideUrlLoading(final WebView view, String url) {
if (url.startsWith("weixin://wap/pay?") || url.startsWith("http://weixin/wap/pay") ) {
try {
startActivity(new Intent("android.intent.action.VIEW", Uri.parse(url)));
return true;
} catch (Exception e) {
new CancelOrOkDialog(H5PayActivity.this, getString(R.string.h5_pay_no_pay_app)) {
@Override
public void ok() {
Intent intent = new Intent(H5PayActivity.this, MainActivity.class);
intent.putExtra(Constants.SELECTTAB, 0);
startActivity(intent);
}
};
}
} else {
Map<String, String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("Referer", H5Accessor.BASE_H5URL);
if (url.startsWith("alipays:") || url.startsWith("alipay")) {
view.loadUrl(url);
} else {
view.loadUrl(url, extraHeaders);
}
}
// ------- 处理结束 -------
if (!(url.startsWith("http") || url.startsWith("https"))) {
return true;
}
return true;
}
...
主要想说的是
extraHeaders.put("Referer", H5Accessor.BASE_H5URL);
这里放的是域名,一定要和自己的域名相对应,否则极易出现问题
[掀桌表情]ios不需要这样做......