APPCNA 指纹验证登录
今天在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 指纹验证登录的更多相关文章
- ThinkPad指纹验证在win7无法使用的解决方法
原先本本装window7 64bit 专业版(正版),但用着用着觉得 很不爽 ,反应特慢.所以决定对本本来次大换血,换成windows server 2008 R2.最后在装指纹验证的时候,使用超级管 ...
- 微信小程序 使用HMACSHA1和md5为登陆注册报文添加指纹验证签名
对接口请求报文作指纹验证签名相信在开发中经常碰到, 这次在与java后端一起开发小程序时,就碰到需求对登陆注册请求报文添加指纹验证签名来防止信息被修改 先来看下我们与后端定制签名规则 2.4. 签名规 ...
- 景区3D指纹验证系统解决方案
旅游业已成为全球经济中发展势头最强劲和规模最大的产业之一.旅游业在城市经济发展中的产业地位.经济作用逐步增强,旅游业对城市经济的拉动性.社会就业的带动力.以及对文化与环境的促进作用日益显现.指纹门票为 ...
- 公共交通3D指纹验证系统解决方案
为了响应国家关于老年人的优待政策,华本研发了退休老人乘公交车指纹认证系统.指纹认证系统不仅方便老人乘坐公交,还能为公共部门减压,杜绝伪造优待证乘坐公交的不法行为. 目前,优待证都是人工检查,缺乏有效的 ...
- python验证登录
一个web2.0时代的网站,自然少不了用户注册,登录,验证的功能,那么python可以怎样实现登录验证呢 这里我们使用装饰器来做登录验证 网站构成 假设我们有这样一个网站,是一个类似与博客园这种多个用 ...
- Oracle查询银行卡数、修改余额及验证登录
建立Oracle表 create table T_BANKCARD ( card_id VARCHAR2(20) not null, user_id VARCHAR2(20) not null, us ...
- thinkphp通行证服务,验证登录,注销登录
<?php /** * 通行证服务 */ class PassportService extends Service { /** * 验证用户或者管理员是否已登录 * @return boole ...
- 一步一步实现FormsAuthentic验证登录
本文不讲原理,只讲用法,原理性的东西网上特别多,不过还是会对一些要用到的东西进行解释,不深入讲原理.本文中用的是Vs2012 .net mvc 4.0.原理看这篇文章,看完这个文章绝对受益匪浅. ...
- JAVA短信验证登录
短信验证登陆 1.点击触发,以电话号码为参数调用发送验证登录短信方法 2.默认模板为验证模板 生成6位验证码 3.将生成的验证码和手机号码放入缓存,(已经设置好缓存存放时间) 4.调用发送模板短信方法 ...
随机推荐
- Java并发必知必会第三弹:用积木讲解ABA原理
Java并发必知必会第三弹:用积木讲解ABA原理 可落地的 Spring Cloud项目:PassJava 本篇主要内容如下 一.背景 上一节我们讲了程序员深夜惨遭老婆鄙视,原因竟是CAS原理太简单? ...
- go语言之函数及闭包
一:函数 1 概述: 函数是 Go 程序源代码的基本构造单位,一个函数的定义包括如下几个部分,函数声明关键字 也町. 函数名.参数列表.返回列表和函数体.函数名遵循标识符的命名规则, 首字母的大小写决 ...
- IOS 提审
关于上架AppStore最后一步的“出口合规信息”.“内容版权”.“广告标识符”的选择 https://blog.csdn.net/ashimar_a/article/details/51745675
- 【C#】静态构造方法与静态变量
扯下闲篇先,本来今天预计整理下委托.事件.Lamada的笔记,然后再把单例模式的懒汉.饿汉模式看完. 在看到懒汉的双重加锁设计时,向同桌贩卖了下该设计的优点,结果反被同桌的一个问题难倒了~! 一. 有 ...
- jumpserver如何在远程时使用复制粘贴-windwos系统下
jumpserver堡垒机搭建好了,但是在使用的时候,有时候会出现远程下不能复制粘贴,这让体验十分不爽. 于是着手解决这个问题,附上参考链接,感谢大佬:http://itren.xiaolee.net ...
- 利用负margin-bottom去除列表最后一个li元素的border-bottom
负margin-bottom不会影响元素的实际大小,只会使得后面的元素上移 以第二个里为例,由于第一个li的margin-bottom导致第二个li被上拉1px,第二个li最上面的1px高度覆盖在第一 ...
- linux安装dubbo与zookeeper(一)
所需工具: jdk1_7.tar.gz dubbo-admin-2.5.4.war(此文件不需解压) zookeeper.tar.gz tomcat7.0.tar.gz 以上文件下载需根据自己的电脑系 ...
- C003:计算球体体积 自行输入球体半径
程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float sphereRadius; do{ pri ...
- Oracle的timestamp字段更新实验 结论:只有逐条更新才能保证timestamp字段有差别,批量更新只会得到一致的时间,此操作无关时间精度.
有这么一张表: create table hy_testtime( id number(6,0) not null primary key, name nvarchar2(20) not null, ...
- 单应用模式 - Layuiadmin单页版放入TP6.0的部署方案
thinkphp6.0.3单应用模式.layuiadmin1.4.0单页版,不需要tp的视图驱动 1. 复制 src.start 两个文件夹 2. 粘贴到 thinkphp 的 public 目录下 ...