美文网首页Android问题汇总(遥远的回忆过去)
Android-Webview加载页面调起支付宝支付+下载处理完

Android-Webview加载页面调起支付宝支付+下载处理完

作者: MonkeyLei | 来源:发表于2019-08-07 09:15 被阅读3次

    上一篇Android-Webview加载页面调起支付宝支付(跳转支付页面或者转Native支付) 我们参考网上资料确实是在某些第三方页面调起了支付,不过有些第三方支付确实有问题,而且加载页面还会报错:

         类似加载失败的: alipays://platformapi/startApp.....相关的错误页面。
    

    再仔细看我们之前的判断,发现不太对劲,url.contains("platformapi/startapp")是小写,貌似有问题的样子。。

    但小白不知道为什么有些第三方页面确实这样的判断,有些确实大写开头的那种。哎!不知道都在干啥妮。。。IOS内置的就直接支持跳转,Android国内的厂商却默默的不支持。哈哈。。。。

    然后我们管它,直接把情况都怼上,详细的后面可以考虑去分析研究下,得看看支付文档啥的吧。目前小白发现只有“支护宝”可以,微信没测试过,也没有想过的测试页面,就不管了。

       /**
         * 自定义MyWebClient
         */
        private class MyWebClient extends WebViewClient {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                ///< 在开始加载网页时会回调
                super.onPageStarted(view, url, favicon);
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(final WebView view, String url) {
                //            ///< 交给Webview自己处理 - 也能解决加载百度后无法返回退出(不停的刷新百度)
                //            //view.loadUrl(url);
                //            //return true;
                //            return false;
    
                ///< 拦截支付宝/微信支付
                if (url.startsWith("alipays://platformapi/startApp?") ||
                    url.startsWith("weixin://wap/pay?")) {
                    Intent intent;
                    try {
                        intent = new Intent();
                        intent.setAction(Intent.ACTION_VIEW);
                        intent.setData(Uri.parse(url));
                        startActivity(intent);
                    } catch (Exception e) {
                        //e.printStackTrace();
                    }
                }else if (url.contains("platformapi/startapp")) {
                    Intent intent;
                    try {
                        intent = Intent.parseUri(url,
                                Intent.URI_INTENT_SCHEME);
                        intent.addCategory(Intent.CATEGORY_BROWSABLE);
                        intent.setComponent(null);
                        startActivity(intent);
                    } catch (Exception e) {
                        //e.printStackTrace();
                    }
                }
                ///< android  6.0 两种方式获取intent都可以跳转支付宝成功,7.1测试不成功
                else if ((Build.VERSION.SDK_INT > Build.VERSION_CODES.M)
                        && (url.contains("platformapi") && url.contains("startapp"))) {
                    Intent intent;
                    try {
                        intent = Intent.parseUri(url,
                                Intent.URI_INTENT_SCHEME);
                        intent.addCategory(Intent.CATEGORY_BROWSABLE);
                        intent.setComponent(null);
                        startActivity(intent);
                    } catch (Exception e) {
                        //e.printStackTrace();
                    }
                }
                ///< 如果是下载的情况,则跳转到浏览器
                else if (url.contains("download")) { ///<  && url.contains(".apk")
                    Uri uri = Uri.parse(url);
                    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                    startActivity(intent);
                } else {
                    view.loadUrl(url);
                }
                return true;
    
                ///< 调用Native支付 - 接alipaySdk-20180601.jar - https://docs.open.alipay.com/203/106493/
                //            if (!(url.startsWith("http") || url.startsWith("https"))) {
                //                return true;
                //            }
                //
                //            /**
                //             * 推荐采用的新的二合一接口(payInterceptorWithUrl),只需调用一次
                //             */
                //            final PayTask task = new PayTask(ExternalLinkerDetailActivity.this);
                //            boolean isIntercepted = task.payInterceptorWithUrl(url, true, new H5PayCallback() {
                //                @Override
                //                public void onPayResult(final H5PayResultModel result) {
                //                    ///< 支付结果返回
                //                    final String url = result.getReturnUrl();
                //                    if (!TextUtils.isEmpty(url)) {
                //                        ExternalLinkerDetailActivity.this.runOnUiThread(new Runnable() {
                //                            @Override
                //                            public void run() {
                //                                view.loadUrl(url);
                //                            }
                //                        });
                //                    }
                //                }
                //            });
                //
                //            /**
                //             * 判断是否成功拦截
                //             * 若成功拦截,则无需继续加载该URL;否则继续加载
                //             */
                //            if (!isIntercepted) {
                //                view.loadUrl(url);
                //            }
                //            return true;
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
    
            @Override
            public void onReceivedError(WebView view, int errorCode,
                                        String description, String failingUrl) {
                ///< 加载错误的时候会回调,在其中可做错误处理,比如再请求加载一次,或者提示404的错误页面
                super.onReceivedError(view, errorCode, description, failingUrl);
            }
    
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view,
                                                              WebResourceRequest request) {
                ///< 在每一次请求资源时,都会通过这个函数来回调
                return super.shouldInterceptRequest(view, request);
            }
        }
    

    相关文章

      网友评论

        本文标题:Android-Webview加载页面调起支付宝支付+下载处理完

        本文链接:https://www.haomeiwen.com/subject/dayndctx.html