3DTouch 重磅出击
效果图:
只需要简单的几部就可以完成。
在 Info.plist 中添加
UIApplicationShortcutItems 为Array类型
在其内部添加一个 Item 为 Dictionar类型
在Item 下添加如下几个键:
1. UIApplicationShortcutItemType string类型:-11.UITouchText.share
2. UIApplicationShortcutItemTitle string类型:Share
3. UIApplicationShortcutItemIconType string类型:UIApplicationShortcutIconTypeShare
在AppDelegate中添加如下方法:
- (void)application:(UIApplication *)application
performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem
completionHandler:(void(^)(BOOL succeeded))completionHandler{
//判断先前我们设置的唯一标识
if([shortcutItem.type isEqualToString:@"-11.UITouchText.share"]){
//点击后执行的内容
}
}
Object-C Touch ID 验证
导入库
#import <LocalAuthentication/LocalAuthentication.h>
- (IBAction)btnClick:(UIButton *)sender {
//初始化上下文对象
LAContext* context = [[LAContextalloc] init];
//错误对象
NSError* error = nil;
NSString* result =@"Authentication is needed to access your notes.";
//首先使用canEvaluatePolicy判断设备支持状态
if ([contextcanEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error]) {
//支持指纹验证
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricslocalizedReason:result reply:^(BOOL success,NSError *error) {
if (success) {
//验证成功,主线程处理UI
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView * alert = [[UIAlertViewalloc]initWithTitle:@"Touch ID"message:@"验证成功"delegate:nilcancelButtonTitle:@"好的"otherButtonTitles: nil];
[alert show];
});
}
else
{
NSLog(@"%@",error.localizedDescription);
switch (error.code) {
case LAErrorSystemCancel:
{
NSLog(@"Authentication was cancelled by the system");
//切换到其他APP,系统取消验证Touch ID
break;
}
case LAErrorUserCancel:
{
NSLog(@"Authentication was cancelled by the user");
//用户取消验证Touch ID
break;
}
case LAErrorUserFallback:
{
NSLog(@"User selected to enter custom password");
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//用户选择输入密码,切换主线程处理
}];
break;
}
default:
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//其他情况,切换主线程处理
}];
break;
}
}
}
}];
}
else
{
//不支持指纹识别,LOG出错误详情
switch (error.code) {
caseLAErrorTouchIDNotEnrolled:
{
NSLog(@"TouchID is not enrolled");
break;
}
caseLAErrorPasscodeNotSet:
{
NSLog(@"A passcode has not been set");
break;
}
default:
{
NSLog(@"TouchID not available");
break;
}
}
NSLog(@"%@",error.localizedDescription);
}
}
Swift Touch ID 验证
导入库 跟 Object-C 一样framework 就可以了
func MyBtnClick(sender: MyButton) {
print("-------",sender)
let laContext = LAContext()
var authError : NSError?
let errorReason = "需要验证Touch ID"
if laContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &authError){
laContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: errorReason, reply: {
(success, error) in
if success {
print ( "Touch ID 验证成功")
}
else{
print ( "Touch ID 验证失败")
}
})
}
else{
let alert = UIAlertView(title: "Can not do authenticatation", message:String(authError), delegate: nil, cancelButtonTitle: "Cancel")
alert.show()
}
}
附:
/*
typedef NS_ENUM(NSInteger, LAError)
{
//授权失败
LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
//用户取消Touch ID授权
LAErrorUserCancel = kLAErrorUserCancel,
//用户选择输入密码
LAErrorUserFallback = kLAErrorUserFallback,
//系统取消授权(例如其他APP切入)
LAErrorSystemCancel = kLAErrorSystemCancel,
//系统未设置密码
LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
//设备Touch ID不可用,例如未打开
LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,
//设备Touch ID不可用,用户未录入
LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,
} NS_ENUM_AVAILABLE(10_10, 8_0);
*/