当前位置: 首页>移动开发>正文

【Android】腾讯云滑动模块验证码 webView提供验证结果接口;实现针对滑动验证码成功与否操作【附上代码】

UML示意图

【Android】腾讯云滑动模块验证码 webView提供验证结果接口;实现针对滑动验证码成功与否操作【附上代码】,【Android】腾讯云滑动模块验证码 webView提供验证结果接口;实现针对滑动验证码成功与否操作【附上代码】_android,第1张

代码示例

  1. 主要对外接口api
    提供一个接口,参数为webView和一个Callback;主要的接口采用单例模式进行编写代码
package im.zego.login.slide;

import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.google.gson.Gson;

public class SlidingVerificationCode {
    private static SlidingVerificationCode instance;
    private WebView webView;
    private WebSettings webSettings;

    public SlidingVerificationCode() {
    }

    public static SlidingVerificationCode getInstance() {
        if (instance == null) {
            instance = new SlidingVerificationCode();
        }
        return instance;
    }

    public void createVerificationCode(WebView webview, final VerificationCallback verificationCallback) {
        this.webView = webview;
        //设置透明度
        webview.setBackgroundColor(0); // 设置背景色
        webSettings = webview.getSettings();
        webSettings.setUseWideViewPort(true);
        webSettings.setLoadWithOverviewMode(true);
        // 禁用缓存
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        // 开启js支持
        //webSettings.setAllowFileAccess(true);//本地读取文件
        webSettings.setJavaScriptEnabled(true);
        // 也可以加载本地html(webView.loadUrl("file:///android_asset/xxx.html"))
        webview.loadUrl("file:///android_asset/verificationCode.html");
        //方法内部类,充当Android和JS的桥梁
        class JsBridgeSlidingVerificationCode {
            @JavascriptInterface
            public void getData(String data) {
                Gson gson = new Gson();
                VerificationResult result = gson.fromJson(data, VerificationResult.class);
                verificationCallback.verify(result);
                Log.d("JsBridge", data);
            }
        }
        JsBridgeSlidingVerificationCode jsBridge = new JsBridgeSlidingVerificationCode();
        webview.addJavascriptInterface(jsBridge, "jsBridge");
    }

}
  1. callback
package im.zego.login.slide;

public interface VerificationCallback {
    void verify(VerificationResult result);
}
  1. 回调model
package im.zego.login.slide;

public class VerificationResult {

    private String bizState;
    private String randstr;
    private String ticket;
    private int ret;// resultCode 0:Success , 2:Quit

    public void setBizState(String bizState) {
        this.bizState = bizState;
    }

    public String getBizState() {
        return bizState;
    }

    public void setRandstr(String randstr) {
        this.randstr = randstr;
    }

    public String getRandstr() {
        return randstr;
    }

    public void setTicket(String ticket) {
        this.ticket = ticket;
    }

    public String getTicket() {
        return ticket;
    }

    public void setRet(int ret) {
        this.ret = ret;
    }

    public int getRet() {
        return ret;
    }

    @Override
    public String toString() {
        return "VerificationResult{" +
                "bizState='" + bizState + '\'' +
                ", randstr='" + randstr + '\'' +
                ", ticket='" + ticket + '\'' +
                ", ret=" + ret +
                '}';
    }
}
  1. 验证码视图
    最后需要使用腾讯云的html,这个滑动模块是基于web进行的。
    所以还得要一个html文件
<!DOCTYPE html>
<html lang="en" type="text/javascript">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Web 前端接入示例</title>
    <!-- 验证码程序依赖(必须)。请勿修改以下程序依赖,如使用本地缓存,或通过其他手段规避加载,会影响程序的正常使用。 -->
    <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
</head>

<body onload="document.querySelector('button').click();">
<!--点击此元素会自动激活验证码, 此例使用的button元素, 也可以使用div、span等-->
<!--id :            (不可变) 元素的 ID, 值必须是 'TencentCaptcha'-->
<!--data-appid :    (必须) 验证码CaptchaAppId, 从腾讯云的验证码控制台中获取, 验证码控制台页面内【图形验证】>【验证列表】进行查看 。如果未新建验证,请根据业务需求选择适合的验证渠道、验证场景进行新建-->
<!--data-cbfn :     (必须) 回调函数名, 函数名要与 data-cbfn 相同-->
<!--data-biz-state :(可选) 业务自定义透传参数, 会在回调函数内获取到 (res.bizState)-->
<button id="TencentCaptcha" data-appid="自己去腾讯云进行申请就会有了,这里就不提供" data-cbfn="callbackName"
        data-biz-state="data-biz-state"
        style="display:none"
        type="button">验证
</button>
</body>

<script>

    // 回调函数需要放在全局对象window下
    window.callbackName = function (res) {
        // 返回结果
        // ret         Int       验证结果,0:验证成功。2:用户主动关闭验证码。
        // ticket      String    验证成功的票据,当且仅当 ret = 0 时 ticket 有值。
        // CaptchaAppId       String    验证码应用ID。
        // bizState    Any       自定义透传参数。
        // randstr     String    本次验证的随机串,请求后台接口时需带上。
        console.log('callback:', res);


        // res(用户主动关闭验证码)= {ret: 2, ticket: null}
        // res(验证成功) = {ret: 0, ticket: "String", randstr: "String"}
        //if (res.ret === 0) {
                // 获取票据、随机数并调用App端注入的方法传入票据、随机数,进行后台票据校验
                var result = {bizState: res.bizState,randstr:res.randstr, ticket:res.ticket ,ret:res.ret};
                window.jsBridge.getData(JSON.stringify(result));
        //}
    }

</script>
</html>



https://www.xamrdz.com/mobile/4k51921901.html

相关文章: