美文网首页终端研发部androidAndroid开发
Android集成支付宝,H5支付页面点击无反应

Android集成支付宝,H5支付页面点击无反应

作者: junjunxx | 来源:发表于2018-04-21 22:35 被阅读246次

    前段时间项目需求,集成了支付宝手机支付功能,集成过程中一切顺利,禁不住感叹大厂提供的东西就是给力。然而今天测试拿手机过来,跟我说手机未安装支付宝的时候,使用H5支付某些按钮点击无效。然后我去看了一下,还真是,但是奇怪的是部分手机没有问题,小部分手机出现了这个情况,同样一套代码,怎么会有两种区别这么大的结果。第一反应是想是不是支付宝的包出问题了,然后就去支付宝论坛查阅,并没用招到解决的方案。

    配图.png

    操作如上图所示,

    情况1:当点击返回按钮时,会有个确认退出的提示框,测试点击"否"是有效的,但是点击"是",则没用一点相应。

    情况2:当输入手机号结束后,点击下一步,也是任何相应都没有。

    最后,我联系上了支付宝的技术支持工程师,加了钉钉来一起解决问题,当时,他给我抛了这样一个链接https://tech.open.alipay.com/support/knowledge/index.htm?knowledgeId=201602156692&categoryId=24120#/?_k=p616ot,链接中给出了两个方案,如下

    方案.png

    问题描述与我当前碰到的情况相当吻合,我立即尝试了第一种方案,但是并没有效果。比较失望的否定了方案一,然后看了下方案二,要调用一个webview的方法,当时第一反应是比较懵逼的,明明调用的是支付宝的H5Activity,WebView对象再那页面里,我如何去拿到这个WebView的实例呢?难道要集成支付宝提供的H5Activity去做相关的操作嘛?但是这样操作的话,AndroidManifest.xml文件中的Activity配置就会对应不上啊。就在万分纠结的时候,我重新阅读了方案二,一句话敲醒了我,

    pauseTimers是一个全局方法

    全局方法说明是任何WebView实例去调用都能生效的,那等于说我随便创建一个WebView对象调用一下resumeTimers方法即可?没错,就是这么简单,

    WebView mWebview = new WebView(getApplicationContext());
    mWebview.resumeTimers();    // 重点代码
    mWebview.onResume();
    
    // 启动支付宝支付
    Runnable payRunnable = new Runnable() {
        @Override
        public void run() {
        PayTask alipay = new PayTask(PayActivity.this);
        Map<String, String> result = alipay.payV2(orderInfo,true);
    
        Message msg = new Message();
        msg.what = SDK_PAY_FLAG;
        msg.obj = result;
        mHandler.sendMessage(msg);
        }
    };
    // 必须异步调用
    Thread payThread = new Thread(payRunnable);
    payThread.start();
    

    出现这个问题的原因是因为我的项目中用到了Activity中使用WebView 的情况,然后我对这样的用法进行了封装,当Activity中有WebView的时候,我会在Activity生命周期的onResume/onPause中对webview对象做相应的启动/暂停操作,提高app执行性能。代码如下

    @Override
    protected void onResume() {
        super.onResume();
        if(mWebView != null){
            mWebView.resumeTimers();
            mWebView.onResume();
        }
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        if(mWebView != null){
            mWebView.onPause();
            mWebView.pauseTimers();
        }
    }
    

    离开这样的Activity的时候会调用WebView的pauseTimers方法,导致全局生效,因此使得支付宝H5支付页面的js无法正常加载运行。

    相关文章

      网友评论

      • cuicharles:这个怎么解释有些手机有问题,有些手机没问题的现象

      本文标题:Android集成支付宝,H5支付页面点击无反应

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