今天在APP中集成了指纹与手势登录功能,本文章分两部分进行记录。一是手势功能的逻辑。二是代码实现。该APP是采用APPCAN开发,直接用其已写好的插件,调用相当接口就要可以了。

1、在APP的个人中心加入手势设置的方法,用户只要登录后进入个人中心就可以设置手势登录功能。

页面代码如下:

 <a href="#" class="my_info" onclick="createGesture()">
<div class="fl tuoch_setting">手势设置(仅本机有效)</div>
<div class="fr fa fa-angle-right ulev2 sc-text"></div>
</a>

onclick方法如下,单击后会打开手势设置界面。

isNeedVerifyBeforeCreate参数是在你重设手势时会不会较验之前的手势。我这选的是不校验。只要你登录了,你的手势就可以重新设置。不论你之前用的什么手势。
function createGesture(){
var data={
isNeedVerifyBeforeCreate:false
}
uexGestureUnlock.create(JSON.stringify(data));
}

2、手势设置成功后我们如果退出,在登录界面会多一个手势登录功能

点击后会对之前设置好了的手势进行验证,页面代码如下:

<div id='gestureunlockdiv' class="resxinlang ub-img umhw2" onclick="uexGestureUnlockverify();">手势登录</div>

onclick方法也是非常简单,只要调用插件uexGestureUnlock的接口就ok。

 function uexGestureUnlockverify()
{
uexGestureUnlock.verify();
}

3、上面插件的方法在执行行我们都要对插件uexGestureUnlock进行初始化,包括手势验证的回调方法cbVerify。还有设置手势和验证手势时的监听方法onEventOccur

function initGestureUnlock()
{
uexGestureUnlock.onEventOccur=function(info){
if(JSON.parse(info).eventCode==11){
appcan.window.openToast("手势密码设置完成!",2000,5,0); }
if(JSON.parse(info).eventCode==5){
appcan.window.openToast("手势密码验证成功!",2000,5,0); //登录操作
//GestureLogin(); }
if(JSON.parse(info).eventCode==4 || JSON.parse(info).eventCode==10)
{
uexGestureUnlock.cancel();
} //1 插件初始化
//2 开始手势密码验证
//3 手势密码验证失败
//4 验证过程被用户取消
//5 手势密码验证成功
//6 开始手势密码设置
//7 用户输入的密码不符合长度要求
//8 开始第二次输入手势密码
//9 两次输入的密码不一致
//10 手势密码设置被用户取消
//11 手势密码设置完成
}
uexGestureUnlock.cbIsGestureCodeSet=function(info){
if(JSON.parse(info).result){ }
}
uexGestureUnlock.cbVerify=function(info){
if(JSON.parse(info).errorString=="在未设置密码的情况下进行验证密码操作"){
appcan.alert("请先进行手势设置!");
return false;
}
if(JSON.parse(info).isFinished=="false")
{
appcan.alert("手势密码登陆失败!请使用账号密码重新登录!");
$("#gestureunlockdiv").hide();
}
if(JSON.parse(info).isFinished)
{
GestureLogin();
}
}
uexGestureUnlock.cbCreate=function(info){
} var data={
backgroundImage:"../images/uexGestureUnlockbg.jpg",
iconImage:"../images/uexGestureUnlockTouxiang.png",
normalThemeColor:"#008cff", //普通主题色
selectedThemeColor:"#124dc3",//选中主题色
errorThemeColor:"#ff0000", //错误主题色
cancelVerificationButtonTitle:"取消",
minimumCodeLength:5,
verificationErrorPrompt:"验证错误!您还可以尝试%d次",
verificationBeginPrompt:GestureLoginUserName
}
uexGestureUnlock.config(JSON.stringify(data));
uexGestureUnlock.isGestureCodeSet();
}

4、在验证手势成功后会调用自定义的方法 GestureLogin(),该方法中有一个变量GestureLoginUserName,就是登录的用户名,这个用户名来自于我们登录成功时写入文件的用户名。

function GestureLogin(){
if(GestureLoginUserName=='')
{
appcan.window.openToast("请先使用用户名和密码登录!",2000,5,0);
return;
}
showMsg();
appcan.request.ajax({
url:GetServiceHostIp()+"LoginByUserId?userName="+escape(GestureLoginUserName),
type:'get',
dataType:'json',
success:function(data, status, requestCode, response, xhr)
{
hidenMsg();
if(data.Status=="1")
{
appcan.window.publish('login',data.Data);
appcan.locStorage.setVal('islog','1');
appcan.locStorage.setVal('userId',data.Data.userId);
appcan.locStorage.setVal('userName',data.Data.userName);
appcan.locStorage.setVal('IdCard',data.Data.idCard);
appcan.locStorage.setVal('xmbm',data.Data.xmbm);
appcan.window.publish('close_login','0');
uexWindow.evaluateScript("desktop", "0", "location.reload('../approval/desktop.html')");
uexWindow.open("desktop", 0, "../approval/desktop.html", 1, 0, 0, 0);
uexWindow.close(); }
else if(data.Status=="2"){
appcan.window.openToast(data.Message,2000,5,0);
}
else{
appcan.window.openToast("用户名或密码错误,错误代码:"+data.Status,2000,5,0);
}
}
,
error:function(xhr,status,errMessage){
hidenMsg();
appcan.window.openToast('登陆失败,原因:errMessage:'+errMessage+',xhr:'+xhr+',status:'+status,2000,5,0);
} });
}

5、接下来的问题就来了,我们如何将信息写入到文件中及读取呢,请看我下面提供的一组有用的插件接口

//创建文件
var file = uexFileMgr.create({
path:"wgt://data/1.txt"
});
if(!file){
alert("创建失败!");
} //打开文件
var file = uexFileMgr.open({
path: "wgt://data/1.txt",
mode: 3
});
if(!file){
alert("打开失败!");
} //判断文件是否存在
var ret = uexFileMgr.isFileExistByPath("wgt://data/test.txt");
alert(ret); //写文件
var file = uexFileMgr.open({
path: "wgt://data/1.txt",
mode: 3
});
uexFileMgr.writeFile(file, 0, "test",function(err){
alert(err);
}); //读文件
var file = uexFileMgr.open({
path: "wgt://data/1.txt",
mode: 3
});
uexFileMgr.readFile(file, -1,0,function(error,data){
if(!error){
alert(data);
}else{
alert("读取失败!");
} }); //关闭文件
var file = uexFileMgr.open({
path: "wgt://data/1.txt",
mode: 3
});
var ret = uexFileMgr.closeFile(file);
alert(ret);

温馨提示:如需要微信投票、点赞、注册的朋友可以联系我,百万水军为您服务

APPCNA 指纹验证登录的更多相关文章

  1. ThinkPad指纹验证在win7无法使用的解决方法

    原先本本装window7 64bit 专业版(正版),但用着用着觉得 很不爽 ,反应特慢.所以决定对本本来次大换血,换成windows server 2008 R2.最后在装指纹验证的时候,使用超级管 ...

  2. 微信小程序 使用HMACSHA1和md5为登陆注册报文添加指纹验证签名

    对接口请求报文作指纹验证签名相信在开发中经常碰到, 这次在与java后端一起开发小程序时,就碰到需求对登陆注册请求报文添加指纹验证签名来防止信息被修改 先来看下我们与后端定制签名规则 2.4. 签名规 ...

  3. 景区3D指纹验证系统解决方案

    旅游业已成为全球经济中发展势头最强劲和规模最大的产业之一.旅游业在城市经济发展中的产业地位.经济作用逐步增强,旅游业对城市经济的拉动性.社会就业的带动力.以及对文化与环境的促进作用日益显现.指纹门票为 ...

  4. 公共交通3D指纹验证系统解决方案

    为了响应国家关于老年人的优待政策,华本研发了退休老人乘公交车指纹认证系统.指纹认证系统不仅方便老人乘坐公交,还能为公共部门减压,杜绝伪造优待证乘坐公交的不法行为. 目前,优待证都是人工检查,缺乏有效的 ...

  5. python验证登录

    一个web2.0时代的网站,自然少不了用户注册,登录,验证的功能,那么python可以怎样实现登录验证呢 这里我们使用装饰器来做登录验证 网站构成 假设我们有这样一个网站,是一个类似与博客园这种多个用 ...

  6. Oracle查询银行卡数、修改余额及验证登录

    建立Oracle表 create table T_BANKCARD ( card_id VARCHAR2(20) not null, user_id VARCHAR2(20) not null, us ...

  7. thinkphp通行证服务,验证登录,注销登录

    <?php /** * 通行证服务 */ class PassportService extends Service { /** * 验证用户或者管理员是否已登录 * @return boole ...

  8. 一步一步实现FormsAuthentic验证登录

    本文不讲原理,只讲用法,原理性的东西网上特别多,不过还是会对一些要用到的东西进行解释,不深入讲原理.本文中用的是Vs2012   .net mvc 4.0.原理看这篇文章,看完这个文章绝对受益匪浅. ...

  9. JAVA短信验证登录

    短信验证登陆 1.点击触发,以电话号码为参数调用发送验证登录短信方法 2.默认模板为验证模板 生成6位验证码 3.将生成的验证码和手机号码放入缓存,(已经设置好缓存存放时间) 4.调用发送模板短信方法 ...

随机推荐

  1. Git-commit-中添加表情

    git commit 中使用表情 我们经常可以在github上看到国外大佬的commit信息中有很多可爱的表情,这是怎么做到的呢? ok,可以这样使用哦:git commit -m '提交信息 :em ...

  2. CloudBase Framework丨第一个 Deno 部署工具是如何打造的?

    云端一体化部署工具 CloudBase Framework (简称 CBF)自开源发布以来迭代迅速,不仅支持 Vue.React 等前端框架,也支持 Nuxt 等 SSR 框架,基于 Node 开发的 ...

  3. Lombok插件有望被Intellij IDEA收编以改善兼容性问题

    1. 前言 最近两个版本的Intellij IDEA没有办法使用lombok插件了,这种问题已经出现了多次,导致胖哥依然使用2020.1的旧版本.其实很多人和我一样也回滚到了旧版本.我一直认为是lom ...

  4. 都2020年了,还再问GET和POST的区别?【深度好文】

    最近看了一些同学的面经,发现无论什么技术岗位,还是会问到 get 和 post 的区别,而搜索出来的答案并不能让我们装得一手好逼,那就让我们从 HTTP 报文的角度来撸一波,从而搞明白他们的区别. 一 ...

  5. 【Android】AndroidStudio(Eclipse)如何使用天天模拟器进行调试apk应用。

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家都知道,我们这些Android开 ...

  6. android开发之当设置textview多少字后以省略号显示。限制TextView的字数

    设置多少字后以省略号显示 <TextView    android:id="@+id/tv"   android:layout_width="wrap_conten ...

  7. Oracle两个数据库互相访问-九五小庞

    Oracle两个数据库互相访问

  8. 1.spring boot初始化项目

    初始化spring boot项目的方式非常多,如使用Spring Tool Suite.使用IntelliJ IDEA.使用NetBeans.在start.spring.io网站中.curl命令.sp ...

  9. Zabbix如何监控Linux防火墙服务

    今天在巡检的时候,突然想到Zabbix能否监控Linux的防火墙服务呢? 显然是可以的,但是Zabbix 5下默认的模板"Template OS Linux by Zabbix agent& ...

  10. 图像通道、RGB与色彩体系

    通道(Channels) 图像的通道指的是什么?是不是灰度图的通道数为1,彩色图的通道为3 ? 图像通道,在RGB色彩模式下就是指那单独的红色.绿色.蓝色部分.也就是说,一幅完整的图像,是由红色绿色蓝 ...