1,新增接入阿里云人脸认证SDK流程

2,接收及设置实名认证频次接口对接及逻辑处理
3,新增检测实名认证是否支持开启接口对接
4,新增检测certifyId是否完成认证接口对接
5,实现需实名认证的钥匙,认证完成后方可开锁的逻辑处理
This commit is contained in:
Daisy 2024-05-07 18:07:57 +08:00
parent 69c6c3e1dd
commit d7db12dba9
272 changed files with 10000 additions and 145 deletions

30
star_lock/aliyun_face_plugin/.gitignore vendored Normal file
View File

@ -0,0 +1,30 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
/pubspec.lock
**/doc/api/
.dart_tool/
.packages
build/

View File

@ -0,0 +1,33 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled.
version:
revision: 6928314d505d2bb4777be05e45d7808a5aa91d2a
channel: stable
project_type: plugin
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: 6928314d505d2bb4777be05e45d7808a5aa91d2a
base_revision: 6928314d505d2bb4777be05e45d7808a5aa91d2a
- platform: android
create_revision: 6928314d505d2bb4777be05e45d7808a5aa91d2a
base_revision: 6928314d505d2bb4777be05e45d7808a5aa91d2a
- platform: ios
create_revision: 6928314d505d2bb4777be05e45d7808a5aa91d2a
base_revision: 6928314d505d2bb4777be05e45d7808a5aa91d2a
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'

View File

@ -0,0 +1,7 @@
## 2.1.2 - 20230401
* 初始版本。
## 2.3.5 - 20231011
* 修复 iOS SDK xcode 15 的兼容问题。

View File

@ -0,0 +1,26 @@
Copyright (c) 2022-present, Aliyun, Inc. All rights reserved.
Most source code in aliyun_face_plugin are MIT licensed.
A copy of the MIT License is included in this file.
Terms of the MIT License
========================
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,7 @@
# 阿里云金融级实人认证 flutter 插件
## Getting Started
该工程是阿里云金融级实人认证的 flutter 插件,在她的帮助下,您的业务 AppAndroid / iOS 可以更方便的使用阿里云的刷脸认证服务。
具体使用方式,请参考[线上接入文档](https://yuque.antfin-inc.com/wlkqsw/cblvmq/gih2d0)。

View File

@ -0,0 +1,4 @@
include: package:flutter_lints/flutter.yaml
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options

View File

@ -0,0 +1,9 @@
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.cxx

View File

@ -0,0 +1,58 @@
group 'com.aliyun.face.aliyun_face_plugin'
version '1.0'
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.0'
}
}
rootProject.allprojects {
repositories {
google()
mavenCentral()
flatDir {
dirs 'libs'
}
}
}
apply plugin: 'com.android.library'
android {
compileSdkVersion 31
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
minSdkVersion 18
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// SDK
implementation(name: 'aliyun-face-v2.1.2-20221027112723', ext: 'aar')
implementation(name: 'aliyun-facelanguage-v2.1.2-20221027112723', ext: 'aar')
implementation(name: 'aliyun-ocr-v2.1.2-20221027112723', ext: 'aar')
implementation(name: 'aliyun-photinus-v2.1.2-20221027112723', ext: 'aar')
implementation(name: 'aliyun-wishverify-v2.1.2-20221027112723', ext: 'aar')
implementation(name: 'Android-AliyunFaceGuard-10033', ext: 'aar')
implementation(name: 'APSecuritySDK-DeepSec-7.0.1.20220813.jiagu', ext: 'aar')
//
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.squareup.okio:okio:1.14.0'
implementation 'com.alibaba:fastjson:1.2.83_noneautotype'
implementation 'com.aliyun.dpa:oss-android-sdk:2.9.11'
}

View File

@ -0,0 +1,2 @@
rootProject.name = 'aliyun_face_plugin'
include ':aliyunface'

View File

@ -0,0 +1,3 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.aliyun.face.aliyun_face_plugin">
</manifest>

View File

@ -0,0 +1,79 @@
package com.aliyun.face.aliyun_face_plugin;
import androidx.annotation.NonNull;
import java.util.Map;
import android.content.Context;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.Log;
import com.alipay.face.api.ZIMCallback;
import com.alipay.face.api.ZIMFacade;
import com.alipay.face.api.ZIMFacadeBuilder;
import com.alipay.face.api.ZIMResponse;
/** AliyunFacePlugin */
public class AliyunFacePlugin implements FlutterPlugin, MethodCallHandler {
/// The MethodChannel that will the communication between Flutter and native Android
///
/// This local reference serves to register the plugin with the Flutter Engine and unregister it
/// when the Flutter Engine is detached from the Activity
private MethodChannel channel;
private Context mContext;
private static String TAG = "AliyunFace";
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "aliyun_face_plugin");
channel.setMethodCallHandler(this);
mContext = flutterPluginBinding.getApplicationContext();
}
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
if (call.method.equals("getPlatformVersion")) {
result.success("android " + android.os.Build.VERSION.RELEASE);
} else if (call.method.equals("init")) {
Log.d(TAG, "enter init.");
ZIMFacade.install(mContext);
} else if (call.method.equals("getMetaInfos")) {
Log.d(TAG, "enter getMetaInfos.");
String metaInfo = ZIMFacade.getMetaInfos(mContext);
result.success(metaInfo);
} else if (call.method.equals("verify")) {
Log.d(TAG, "enter verify.");
Map<String, String> params = call.arguments();
String certifyId = params.get("certifyId");
if (certifyId == null || certifyId.isEmpty()) {
Log.e(TAG, "certifyId is null");
return;
}
ZIMFacade zimFacade = ZIMFacadeBuilder.create(mContext);
zimFacade.verify(certifyId, false, new ZIMCallback() {
@Override
public boolean response(ZIMResponse response) {
if (null != response && 1000 == response.code) {
Log.d(TAG, "face verify success.");
} else {
Log.e(TAG, "face verify error.");
}
result.success(response.code + "," + response.reason);
return true;
}
});
} else {
result.notImplemented();
}
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
channel.setMethodCallHandler(null);
}
}

View File

@ -0,0 +1,38 @@
.idea/
.vagrant/
.sconsign.dblite
.svn/
.DS_Store
*.swp
profile
DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m
.generated/
*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3
xcuserdata
*.moved-aside
*.pyc
*sync/
Icon?
.tags*
/Flutter/Generated.xcconfig
/Flutter/ephemeral/
/Flutter/flutter_export_environment.sh

View File

@ -0,0 +1,4 @@
#import <Flutter/Flutter.h>
@interface AliyunFacePlugin : NSObject<FlutterPlugin>
@end

View File

@ -0,0 +1,112 @@
#import "AliyunFacePlugin.h"
#import <AliyunFaceAuthFacade/AliyunFaceAuthFacade.h>
@implementation AliyunFacePlugin
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
FlutterMethodChannel* channel = [FlutterMethodChannel
methodChannelWithName:@"aliyun_face_plugin"
binaryMessenger:[registrar messenger]];
AliyunFacePlugin* instance = [[AliyunFacePlugin alloc] init];
[registrar addMethodCallDelegate:instance channel:channel];
}
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
static Boolean bInit = false;
if ([@"getPlatformVersion" isEqualToString:call.method]) {
NSLog(@"enter getPlatformVersion");
result([@"" stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
return;
}
if ([@"init" isEqualToString:call.method]) {
NSLog(@"enter init");
if (!bInit) {
bInit = true;
[AliyunFaceAuthFacade initSDK];
}
return;
}
if ([@"getMetaInfos" isEqualToString:call.method]) {
NSLog(@"enter getMetaInfos");
if (!bInit) {
bInit = true;
[AliyunFaceAuthFacade initSDK];
}
NSDictionary *metaInfo = [AliyunFaceAuthFacade getMetaInfo];
NSString *info = [self convertToJsonData: metaInfo];
result([@"" stringByAppendingString:info]);
return;
}
if ([@"verify" isEqualToString:call.method]) {
NSLog(@"enter verify");
if (!bInit) {
bInit = true;
[AliyunFaceAuthFacade initSDK];
}
id arguments = call.arguments;
NSString *certifyId = [arguments objectForKey:@"certifyId"];
if (certifyId == nil || [certifyId length] == 0) {
NSLog(@"certifyId is nil.");
return;
}
NSLog(@"certifyId: %@.", certifyId);
NSMutableDictionary *extParams = [NSMutableDictionary new];
UIViewController *vc = [self viewControllerWithWindow:nil];
[extParams setValue:vc forKey:@"currentCtr"]; //
[AliyunFaceAuthFacade verifyWith:certifyId
extParams:extParams
onCompletion:^(ZIMResponse *response) {
result([NSString stringWithFormat:@"%lu,%@", response.code, response.reason]);
}];
return;
}
result(FlutterMethodNotImplemented);
}
#pragma mark -
- (NSString *)convertToJsonData:(NSDictionary *) dict {
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict
options:NSJSONWritingSortedKeys
error:&error];
NSString *jsonString;
if (!jsonData) {
NSLog(@"Error: %@", error);
} else {
jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
}
return jsonString;
}
- (UIViewController *) viewControllerWithWindow:(UIWindow *)window {
UIWindow *windowToUse = window;
if(windowToUse == nil) {
for (UIWindow *windowF in [UIApplication sharedApplication].windows) {
if (windowF.isKeyWindow) {
windowToUse = windowF;
break;
}
}
}
UIViewController *topViewController = windowToUse.rootViewController;
while (topViewController.presentingViewController) {
topViewController = topViewController.presentingViewController;
}
return topViewController;
}
@end

View File

@ -0,0 +1,69 @@
/*
en.strings
APBToygerFacade
Created by shouyi.www on 2017/6/1.
Copyright © 2017年 DTF. All rights reserved.
*/
"APBToygerFacade:取消"="Cancel";
"APBToygerFacade:再试一次"="Try Again";
"APBToygerFacade:退出"="Quit";
"APBToygerFacade:确定"="OK";
"APBToygerFacade:继续"="Continue";
"APBToygerFacade:我知道了"="Got it";
"APBToygerFacade:其他登录方式"="Another login method";
"APBToygerFacade:刷脸失败"="Face scan failed";
"APBToygerFacade:当前设备不支持刷脸"="Face scan not supported on your device";
"APBToygerFacade:当前系统不支持刷脸"="Face scan not supported on your device system";
"APBToygerFacade:无法启动相机"="No camera permission";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Please allow to access your camera in \"Settings\"-\"Privacy\"-\"Camera\"";
"APBToygerFacade:立即开启"="OK";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Face scan is only available on iOS8 or above";
"APBToygerFacade:系统错误"="System error";
"APBToygerFacade:确定退出吗?"="Are you sure to quit face scan?";
"APBToygerFacade:露个脸就能通过"="You can succeed by simply showing your face";
"APBToygerFacade:操作超时"="Time out";
"APBToygerFacade:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
"APBToygerFacade:提示:正对手机,更容易成功"="Face straight at the phone and ensure you have enough light";
"APBToygerFacade:本次操作失败"="Sorry, face scan failed";
"APBToygerFacade:网络不给力"="Network connection failed";
"APBToygerFacade:登录中断"="Login interrupted";
"APBToygerFacade:验证中断"="Face scan interrupted";
"APBToygerFacade:刷脸验证"="Face Scan";
"APBToygerFacade:请把脸放入框内保持不动"="Put your face into the frame";
"APBToygerFacade:靠近一点"="Move closer";
"APBToygerFacade:没有检测到脸"="No face";
"APBToygerFacade:再清晰一点"="Face not clear";
"APBToygerFacade:脸部亮一点"="More light";
"APBToygerFacade:请正对手机"="No face";
"APBToygerFacade:把脸移入圈内"="No face";
"APBToygerFacade:离远一点"="Move farther";
"APBToygerFacade:请保持不动"="Stay still";
"APBToygerFacade:请注视屏幕"="Open your eyes";
"APBToygerFacade:眨眨眼"="Blink";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="Use a different verification method";
"APBToygerFacade:拿起手机眨眨眼"="Blink";
"APBToygerFacade:拿起手机向左摇头"="Turn Head Left";
"APBToygerFacade:拿起手机向右摇头"="Turn Head Right";
"APBToygerFacade:向左摇头"="Turn Head Left";
"APBToygerFacade:向右摇头"="Turn Head Right";
"APBToygerFacade:正在处理"="Processing";
"APBToygerFacade:首次使用,请开通刷脸"="For the first time use, please enable Face Scan";
"APBToygerFacade:立即开通"="Enable";
"APBToygerFacade:下次再说"="Later";
"APBToygerFacade:请把手机正对面部"="Face straight at the phone";
"APBToygerFacade:即将开始人脸检测"="Get ready for face recognition";
"APBToygerFacade:没有认出你"="Face scan failed";
"APBToygerFacade:未能识别人脸"="Face not detected";
"APBToygerFacade:人脸检测中"="Face Scan";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Too many failed attempts, please try again later";
"APBToygerFacade:请保持单人操作"=" ";

View File

@ -0,0 +1,60 @@
"APBToygerFacade:取消"="Batalkan";
"APBToygerFacade:再试一次"="Harap coba lagi";
"APBToygerFacade:退出"="Keluar";
"APBToygerFacade:确定"="OK";
"APBToygerFacade:继续"="Lanjutkan";
"APBToygerFacade:我知道了"="OK";
"APBToygerFacade:其他登录方式"="Ubah Metode Logon";
"APBToygerFacade:刷脸失败"="Pengenalan wajah gagal";
"APBToygerFacade:当前设备不支持刷脸"="Perangkat Anda tidak mendukung pengenalan wajah";
"APBToygerFacade:当前系统不支持刷脸"="Sistem saat ini tidak mendukung pengenalan wajah";
"APBToygerFacade:无法启动相机"="Tidak Memiliki Izin Akses Kamera";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="Buka Pengaturan > Privasi > Kamera dan izinkan akses";
"APBToygerFacade:立即开启"="OK";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="Hanya iOS 7 dan setelahnya yang mendukung pengenalan wajah";
"APBToygerFacade:系统错误"="Terjadi Kesalahan Sistem";
"APBToygerFacade:确定退出吗?"="Apakah Anda yakin ingin keluar?";
"APBToygerFacade:露个脸就能通过"="Anda hanya perlu memperlihatkan wajah Anda";
"APBToygerFacade:操作超时"="Waktu operasi habis";
"APBToygerFacade:正对手机,更容易成功"="Arahkan wajah lurus menghadap ponsel untuk membuat wajah Anda lebih mudah dipindai";
"APBToygerFacade:本次操作失败"="Operasi gagal";
"APBToygerFacade:网络不给力"="Kondisi jaringan tidak memenuhi persyaratan";
"APBToygerFacade:登录中断"="Logon Terganggu";
"APBToygerFacade:验证中断"="Verifikasi terputus";
"APBToygerFacade:刷脸验证"="Verifikasi dengan Pengenalan Wajah";
"APBToygerFacade:请把脸放入框内保持不动"="Posisikan wajah Anda di dalam bingkai dan jangan bergerak";
"APBToygerFacade:靠近一点"="Harap dekatkan wajah";
"APBToygerFacade:没有检测到脸"="Tidak ada wajah terdeteksi";
"APBToygerFacade:再清晰一点"="Perjelas wajah Anda";
"APBToygerFacade:脸部亮一点"="Terangi wajah Anda";
"APBToygerFacade:请正对手机"="Arahkan wajah lurus menghadap ponsel";
"APBToygerFacade:请露出正脸"="Tunjukkan bagian depan wajah Anda";
"APBToygerFacade:把脸移入圈内"="Posisikan wajah pada lingkaran";
"APBToygerFacade:离远一点"="Harap jauhkan wajah";
"APBToygerFacade:请保持不动"="Tetap tenang";
"APBToygerFacade:请注视屏幕"="Lihat layar";
"APBToygerFacade:眨眨眼"="Harap kedipkan mata";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="Ubah Metode Verifikasi";
"APBToygerFacade:拿起手机眨眨眼"="Harap kedipkan mata";
"APBToygerFacade:拿起手机向左摇头"="Harap menoleh ke kiri";
"APBToygerFacade:拿起手机向右摇头"="Harap menoleh ke kanan";
"APBToygerFacade:向左摇头"="Harap menoleh ke kiri";
"APBToygerFacade:向右摇头"="Harap menoleh ke kanan";
"APBToygerFacade:正在处理"="Memproses";
"APBToygerFacade:首次使用,请开通刷脸"="Aktifkan pengenalan wajah untuk melanjutkan";
"APBToygerFacade:立即开通"="Aktifkan";
"APBToygerFacade:下次再说"="Lain Kali";
"APBToygerFacade:请把手机正对面部"="Arahkan wajah lurus menghadap ponsel";
"APBToygerFacade:即将开始人脸检测"="Memulai pengenalan wajah";
"APBToygerFacade:没有认出你"="Pengenalan wajah gagal";
"APBToygerFacade:未能识别人脸"="Tidak ada wajah terdeteksi";
"APBToygerFacade:人脸检测中"="Pengenalan wajah dalam proses";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="Pengenalan wajah terlalu sering dilakukan. Harap coba lagi nanti";
"APBToygerFacade:请保持单人操作"=" ";

View File

@ -0,0 +1,60 @@
"APBToygerFacade:取消"="キャンセル";
"APBToygerFacade:再试一次"="もう一度お試しください";
"APBToygerFacade:退出"="終了";
"APBToygerFacade:确定"="OK";
"APBToygerFacade:继续"="続行";
"APBToygerFacade:我知道了"="OK";
"APBToygerFacade:其他登录方式"="ログイン方法を切り替え";
"APBToygerFacade:刷脸失败"="顔を認識できませんでした";
"APBToygerFacade:当前设备不支持刷脸"="お使いのデバイスは顔認識をサポートしていません";
"APBToygerFacade:当前系统不支持刷脸"="顔認識をサポートしていないシステムです";
"APBToygerFacade:无法启动相机"="カメラにアクセスできません";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="[設定] > [プライバシー] > [カメラ] に移動し、アクセスを許可してください";
"APBToygerFacade:立即开启"="OK";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="顔認識は iOS 7 以降でサポートされています";
"APBToygerFacade:系统错误"="システムエラー";
"APBToygerFacade:确定退出吗?"="終了してもよろしいですか";
"APBToygerFacade:露个脸就能通过"="顔を見せるだけです";
"APBToygerFacade:操作超时"="操作がタイムアウトしました";
"APBToygerFacade:正对手机,更容易成功"="顔をスキャンしやすいように、電話の方を向いてください";
"APBToygerFacade:本次操作失败"="操作に失敗しました";
"APBToygerFacade:网络不给力"="ネットワークの状態が要件を満たしていません";
"APBToygerFacade:登录中断"="ログインが中断されました";
"APBToygerFacade:验证中断"="検証が中断されました";
"APBToygerFacade:刷脸验证"="顔認識による検証";
"APBToygerFacade:请把脸放入框内保持不动"="フレームの内側に顔が入るようにして、動かないでください";
"APBToygerFacade:靠近一点"="近づいてください";
"APBToygerFacade:没有检测到脸"="顔が検出されません";
"APBToygerFacade:再清晰一点"="顔をはっきりさせてください";
"APBToygerFacade:脸部亮一点"="顔を明るくしてください";
"APBToygerFacade:请正对手机"="電話の方を向いてください";
"APBToygerFacade:请露出正脸"="顔の正面を見せてください";
"APBToygerFacade:把脸移入圈内"="顔を円の中に入れてください";
"APBToygerFacade:离远一点"="離れてください";
"APBToygerFacade:请保持不动"="動かないでください";
"APBToygerFacade:请注视屏幕"="画面を見てください";
"APBToygerFacade:眨眨眼"="まばたきしてください";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="検証方法を変更";
"APBToygerFacade:拿起手机眨眨眼"="まばたきしてください";
"APBToygerFacade:拿起手机向左摇头"="頭を左に";
"APBToygerFacade:拿起手机向右摇头"="頭を右に";
"APBToygerFacade:向左摇头"="頭を左に";
"APBToygerFacade:向右摇头"="頭を右に";
"APBToygerFacade:正在处理"="処理中";
"APBToygerFacade:首次使用,请开通刷脸"="顔認識を有効化して続行します";
"APBToygerFacade:立即开通"="有効化";
"APBToygerFacade:下次再说"="後で";
"APBToygerFacade:请把手机正对面部"="電話の方を向いてください";
"APBToygerFacade:即将开始人脸检测"="顔認識を開始";
"APBToygerFacade:没有认出你"="顔を認識できませんでした";
"APBToygerFacade:未能识别人脸"="顔が検出されません";
"APBToygerFacade:人脸检测中"="顔を認識中です";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="顔認識が頻繁に実行されています。後でもう一度やり直してください";
"APBToygerFacade:请保持单人操作"=" ";

View File

@ -0,0 +1,61 @@
"APBToygerFacade:取消"="취소";
"APBToygerFacade:再试一次"="다시 시도하세요";
"APBToygerFacade:退出"="종료";
"APBToygerFacade:确定"="확인";
"APBToygerFacade:继续"="계속";
"APBToygerFacade:我知道了"="확인";
"APBToygerFacade:其他登录方式"="로그온 방법 전환";
"APBToygerFacade:刷脸失败"="안면 인식에 실패했습니다";
"APBToygerFacade:当前设备不支持刷脸"="귀하의 디바이스는 안면 인식을 지원하지 않습니다";
"APBToygerFacade:当前系统不支持刷脸"="현재 시스템은 안면 인식을 지원하지 않습니다";
"APBToygerFacade:无法启动相机"="카메라 권한이 없습니다";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="설정 > 개인 > 카메라에서 접근 권한을 부여하십시오";
"APBToygerFacade:立即开启"="OK";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="iOS 7 및 그 이상의 버전에서만 안면 인식이 지원됩니다";
"APBToygerFacade:系统错误"="시스템 오류";
"APBToygerFacade:确定退出吗?"="정말로 종료하시겠습니까?";
"APBToygerFacade:露个脸就能通过"="얼굴만 보여주시면 됩니다";
"APBToygerFacade:操作超时"="작업 시간이 초과되었습니다";
"APBToygerFacade:正对手机,更容易成功"="얼굴을 더 쉽게 스캔할 수 있도록 휴대전화를 정면으로 바라보세요";
"APBToygerFacade:本次操作失败"="작동에 실패했습니다";
"APBToygerFacade:网络不给力"="네트워크 상태가 요구 사항을 충족하지 않습니다";
"APBToygerFacade:登录中断"="로그온이 중단되었습니다";
"APBToygerFacade:验证中断"="확인이 중단되었습니다";
"APBToygerFacade:刷脸验证"="안면 인식을 통한 인증";
"APBToygerFacade:请把脸放入框内保持不动"="얼굴이 프레임 안으로 들어오도록 위치한 다음 움직이지 말고 가만히 계십시오";
"APBToygerFacade:靠近一点"="더 가까이 움직이세요";
"APBToygerFacade:没有检测到脸"="감지된 얼굴이 없습니다";
"APBToygerFacade:再清晰一点"="얼굴을 좀더 선명하게 만드세요";
"APBToygerFacade:脸部亮一点"="얼굴을 밝게 만드세요";
"APBToygerFacade:请正对手机"="휴대전화를 정면으로 바라보세요";
"APBToygerFacade:请露出正脸"="얼굴의 정면을 보여주세요";
"APBToygerFacade:把脸移入圈内"="얼굴이 원 안에 들어오도록 움직이세요";
"APBToygerFacade:离远一点"="더 멀리 움직이세요";
"APBToygerFacade:请保持不动"="가만히 계십시오";
"APBToygerFacade:请注视屏幕"="화면을 바라보세요";
"APBToygerFacade:眨眨眼"="눈을 깜빡이세요";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="인증 방법을 변경합니다";
"APBToygerFacade:拿起手机眨眨眼"="눈을 깜빡이세요";
"APBToygerFacade:拿起手机向左摇头"="좌측으로 고개를 돌립니다";
"APBToygerFacade:拿起手机向右摇头"="우측으로 고개를 돌립니다";
"APBToygerFacade:向左摇头"="좌측으로 고개를 돌립니다";
"APBToygerFacade:向右摇头"="우측으로 고개를 돌립니다";
"APBToygerFacade:正在处理"="처리 중";
"APBToygerFacade:首次使用,请开通刷脸"="안면 인식을 활성화하여 계속 진행합니다";
"APBToygerFacade:立即开通"="활성화하기";
"APBToygerFacade:下次再说"="나중에 하기";
"APBToygerFacade:请把手机正对面部"="휴대전화를 정면으로 바라보세요";
"APBToygerFacade:即将开始人脸检测"="안면 인식 시작";
"APBToygerFacade:没有认出你"="안면 인식에 실패했습니다";
"APBToygerFacade:未能识别人脸"="감지된 얼굴이 없습니다";
"APBToygerFacade:人脸检测中"="얼굴 인식 중";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="안면 인식이 연속으로 실행되었습니다. 나중에 다시 시도하세요";
"APBToygerFacade:请保持单人操作"=" ";

View File

@ -0,0 +1,69 @@
/*
zh-HK.strings
APBToygerFacade
Created by shouyi.www on 2017/6/1.
Copyright © 2017年 DTF. All rights reserved.
*/
"APBToygerFacade:取消"="取消";
"APBToygerFacade:再试一次"="再試一次";
"APBToygerFacade:退出"="退出";
"APBToygerFacade:确定"="確定";
"APBToygerFacade:继续"="继续";
"APBToygerFacade:我知道了"="我知道了";
"APBToygerFacade:其他登录方式"="其他登录方式";
"APBToygerFacade:刷脸失败"="刷臉失敗";
"APBToygerFacade:当前设备不支持刷脸"="目前系統不支援刷臉";
"APBToygerFacade:当前系统不支持刷脸"="目前設備不支援刷臉";
"APBToygerFacade:无法启动相机"="無法啟動相機";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
"APBToygerFacade:立即开启"="開通權限";
"APBToygerFacade:刷脸仅在iOS7及以上系统可用"="刷脸仅在iOS7及以上系统可用";
"APBToygerFacade:系统错误"="系統錯誤";
"APBToygerFacade:确定退出吗?"="確定退出嗎?";
"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
"APBToygerFacade:操作超时"="操作超時";
"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
"APBToygerFacade:本次操作失败"="本次操作失敗";
"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
"APBToygerFacade:登录中断"="登入中斷";
"APBToygerFacade:验证中断"="驗證中斷";
"APBToygerFacade:刷脸验证"="刷臉驗證";
"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
"APBToygerFacade:靠近一点"="靠近一點";
"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
"APBToygerFacade:再清晰一点"="再清晰一點";
"APBToygerFacade:脸部亮一点"="光線再亮點";
"APBToygerFacade:请正对手机"="請正視手機";
"APBToygerFacade:请露出正脸"="請露出正臉";
"APBToygerFacade:把脸移入圈内"="把臉移入框內";
"APBToygerFacade:离远一点"="離遠一點";
"APBToygerFacade:请保持不动"="請保持不動";
"APBToygerFacade:请注视屏幕"="請注視屏幕";
"APBToygerFacade:眨眨眼"="眨眨眼";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
"APBToygerFacade:拿起手机向左摇头"="拿著手機,向左搖頭";
"APBToygerFacade:拿起手机向右摇头"="拿著手機,向右搖頭";
"APBToygerFacade:向左摇头"="向左搖頭";
"APBToygerFacade:向右摇头"="向右搖頭";
"APBToygerFacade:正在处理"="正在處理";
"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
"APBToygerFacade:立即开通"="立即開通";
"APBToygerFacade:下次再说"="下次再說";
"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
"APBToygerFacade:没有认出你"="沒有認出你";
"APBToygerFacade:未能识别人脸"="未能識別人臉";
"APBToygerFacade:人脸检测中"="人臉檢測中";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";
"APBToygerFacade:请保持单人操作"="請保持單人操作";

View File

@ -0,0 +1,69 @@
/*
zh-Hans.strings
APBToygerFacade
Created by shouyi.www on 2017/6/1.
Copyright © 2017年 DTF. All rights reserved.
*/
"APBToygerFacade:取消"="取消";
"APBToygerFacade:再试一次"="再试一次";
"APBToygerFacade:退出"="退出";
"APBToygerFacade:确定"="确定";
"APBToygerFacade:继续"="继续";
"APBToygerFacade:我知道了"="我知道了";
"APBToygerFacade:其他登录方式"="其他登录方式";
"APBToygerFacade:刷脸失败"="刷脸失败";
"APBToygerFacade:当前设备不支持刷脸"="当前设备不支持刷脸";
"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
"APBToygerFacade:无法启动相机"="无法启动相机";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="请到“设置-隐私-相机”开启权限";
"APBToygerFacade:立即开启"="立即开启";
"APBToygerFacade:刷脸仅在iOS8及以上版本可用"="刷脸仅在iOS8及以上版本可用";
"APBToygerFacade:系统错误"="系统错误";
"APBToygerFacade:确定退出吗?"="确定退出吗?";
"APBToygerFacade:露个脸就能通过"="露个脸就能通过";
"APBToygerFacade:操作超时"="操作超时";
"APBToygerFacade:正对手机,更容易成功"="正对手机,更容易成功";
"APBToygerFacade:本次操作失败"="本次操作失败";
"APBToygerFacade:网络不给力"="网络不给力";
"APBToygerFacade:登录中断"="登录中断";
"APBToygerFacade:验证中断"="验证中断";
"APBToygerFacade:刷脸验证"="刷脸验证";
"APBToygerFacade:请把脸放入框内保持不动"="请把脸移入圈内保持不动";
"APBToygerFacade:靠近一点"="靠近一点";
"APBToygerFacade:没有检测到脸"="没有检测到脸";
"APBToygerFacade:再清晰一点"="再清晰一点";
"APBToygerFacade:脸部亮一点"="脸部亮一点";
"APBToygerFacade:请正对手机"="请正对手机";
"APBToygerFacade:请露出正脸"="请露出正脸";
"APBToygerFacade:把脸移入圈内"="把脸移入圈内";
"APBToygerFacade:离远一点"="离远一点";
"APBToygerFacade:请保持不动"="请保持不动";
"APBToygerFacade:请注视屏幕"="请注视屏幕";
"APBToygerFacade:眨眨眼"="眨眨眼";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="选择其他验证方式";
"APBToygerFacade:拿起手机眨眨眼"="拿起手机,眨眨眼";
"APBToygerFacade:拿起手机向左摇头"="拿起手机,向左摇头";
"APBToygerFacade:拿起手机向右摇头"="拿起手机,向右摇头";
"APBToygerFacade:向左摇头"="向左摇头";
"APBToygerFacade:向右摇头"="向右摇头";
"APBToygerFacade:正在处理"="正在处理";
"APBToygerFacade:首次使用,请开通刷脸"="首次使用,请开通刷脸";
"APBToygerFacade:立即开通"="立即开通";
"APBToygerFacade:下次再说"="下次再说";
"APBToygerFacade:请把手机正对面部"="请把手机正对面部";
"APBToygerFacade:即将开始人脸检测"="即将开始人脸检测";
"APBToygerFacade:没有认出你"="没有认出你";
"APBToygerFacade:未能识别人脸"="未能识别人脸";
"APBToygerFacade:人脸检测中"="人脸检测中";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷脸失败次数过多,请稍后再试";
"APBToygerFacade:请保持单人操作"="请保持单人操作";

View File

@ -0,0 +1,69 @@
/*
zh-Hant.strings
APBToygerFacade
Created by shouyi.www on 2017/6/1.
Copyright © 2017年 DTF. All rights reserved.
*/
"APBToygerFacade:取消"="取消";
"APBToygerFacade:再试一次"="再試一次";
"APBToygerFacade:退出"="退出";
"APBToygerFacade:确定"="確定";
"APBToygerFacade:继续"="繼續";
"APBToygerFacade:我知道了"="我知道了";
"APBToygerFacade:其他登录方式"="其他登入方式";
"APBToygerFacade:刷脸失败"="刷臉失敗";
"APBToygerFacade:当前设备不支持刷脸"="目前設備不支援刷臉服務";
"APBToygerFacade:当前系统不支持刷脸"="当前系统不支持刷脸";
"APBToygerFacade:无法启动相机"="無法啟動相機";
"APBToygerFacade:请到\“设置-隐私-相机\”开启权限"="請到“設置-隱私-相機”開啓權限";
"APBToygerFacade:立即开启"="開通權限";
"APBToygerFacade:刷脸仅在iOS8及以上系统可用"="刷脸仅在iOS8及以上系统可用";
"APBToygerFacade:系统错误"="系統錯誤";
"APBToygerFacade:确定退出吗?"="確定退出嗎?";
"APBToygerFacade:露个脸就能通过"="露個臉就能通過";
"APBToygerFacade:操作超时"="操作超時";
"APBToygerFacade:正对手机,更容易成功"="對準手機,更容易成功";
"APBToygerFacade:本次操作失败"="本次操作失敗";
"APBToygerFacade:网络不给力"="網絡異常,請稍後再試";
"APBToygerFacade:登录中断"="登入中斷";
"APBToygerFacade:验证中断"="驗證中斷";
"APBToygerFacade:刷脸验证"="刷臉驗證";
"APBToygerFacade:请把脸放入框内保持不动"="請把臉移入圈內保持不動";
"APBToygerFacade:靠近一点"="靠近一點";
"APBToygerFacade:没有检测到脸"="沒有檢測到臉";
"APBToygerFacade:再清晰一点"="再清晰一點";
"APBToygerFacade:脸部亮一点"="光線再亮點";
"APBToygerFacade:请正对手机"="請正視手機";
"APBToygerFacade:请露出正脸"="請露出正臉";
"APBToygerFacade:把脸移入圈内"="把臉移入框內";
"APBToygerFacade:离远一点"="離遠一點";
"APBToygerFacade:请保持不动"="請保持不動";
"APBToygerFacade:请注视屏幕"="請注視屏幕";
"APBToygerFacade:眨眨眼"="眨眨眼";
"APBToygerFacade:蚂蚁佐罗提供技术支持"="";
"APBToygerFacade:选择其他验证方式"="選擇其他驗證方式";
"APBToygerFacade:拿起手机眨眨眼"="拿起手機,眨眨眼";
"APBToygerFacade:拿起手机向左摇头"="拿起手機,向左搖頭";
"APBToygerFacade:拿起手机向右摇头"="拿起手機,向右搖頭";
"APBToygerFacade:向左摇头"="向左搖頭";
"APBToygerFacade:向右摇头"="向右搖頭";
"APBToygerFacade:正在处理"="正在處理";
"APBToygerFacade:首次使用,请开通刷脸"="首次使用,請開通刷臉";
"APBToygerFacade:立即开通"="立即開通";
"APBToygerFacade:下次再说"="下次再說";
"APBToygerFacade:请把手机正对面部"="請把手機正對面部";
"APBToygerFacade:即将开始人脸检测"="即將開始人臉檢測";
"APBToygerFacade:没有认出你"="沒有認出你";
"APBToygerFacade:未能识别人脸"="未能識別人臉";
"APBToygerFacade:人脸检测中"="人臉檢測中";
"APBToygerFacade:刷脸失败次数过多,请稍后再试"="刷臉失敗次數過多,請稍後再試";
"APBToygerFacade:请保持单人操作"="請保持單人操作";

View File

@ -0,0 +1,76 @@
//
// APFBaseTask.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/25/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <BioAuthEngine/IBioAuthTask.h>
#import <BioAuthEngine/APBTaskContext.h>
#import <BioAuthEngine/APBLogger.h>
#import <BioAuthEngine/AFEAlertView.h>
#import <APBToygerFacade/APBToygerUtils.h>
#import <BioAuthEngine/APBToygerRemoteConfig.h>
#import <BioAuthEngine/APBToygerBehavlogManager.h>
//#import "APBToygerDataCenter.h"
#import <BioAuthEngine/BioAuthCommonSetting.h>
#import <APBToygerFacade/APBToygerViewController.h>
@class DTFLogMonitor,APBToygerDataCenter;
typedef void (^APFAlertExtraAction)();
@interface APBToygerBaseTask : NSObject <IBioAuthTask>
//协议定义的属性
@property(nonatomic, copy)NSString *taskName; //任务名
@property(nonatomic, strong)APBTaskContext *context; //任务数据
@property(nonatomic, weak)NSMutableDictionary *pipeInfo; //共享数据
//公用属性
@property(nonatomic, weak)UIViewController *parentViewController; //父viewController
@property(nonatomic, weak)APBToygerViewController *currentViewController; //当前viewController
@property(nonatomic, weak)UIView *currentView; //当前显示的界面
@property(nonatomic, copy)commandBlock bioCommandBlock; //对框架进行操作的block
@property(nonatomic, strong)APBToygerRemoteConfig * bisConfig; //bis下放的配置参数
@property(nonatomic, strong)APBToygerDataCenter * dataCenter; //行为日志
@property(nonatomic, copy)NSString *bisToken; //bisToken
@property(nonatomic, assign)NSInteger currentRetryCnt; //当前重试次数
@property(nonatomic, assign)BOOL soundStatus; //当前声音状态
//@property(nonatomic, assign)BOOL isLoginMode; //当前场景是否为登录场景
@property(nonatomic, assign)BOOL isMYBank; //是否是网商银行
@property(nonatomic, strong)DTFLogMonitor *monitor; //埋点
- (void)exitWithResult:(APBResultType)result failReason:(NSString *)failReason retCodeSub:(NSString *)retCodeSub retMessageSub:(NSString *)retMessageSub;
- (void)eventQuitWithCompletionCallback:(BioAuthExecCallback)callback;
/**
*
*/
- (void)handleRetryActionWithScene:(NSString *)scene
buttonTitle:(NSString *)title
extAction:(APFAlertExtraAction)action;
/**
* 退
*/
- (void)handleExitActionWithScene:(NSString *)scene
buttonTitle:(NSString *)title
exitReason:(APBResultType)reason
extAction:(APFAlertExtraAction)action;
/**
*
*/
- (void)handleContinueActionWithScene:(NSString *)scene
buttonTitle:(NSString *)title
extaction:(APFAlertExtraAction)action;
/**
* VC的方式
*/
- (void)dismissViewControllerAnimated: (BOOL)flag completion:(void (^ __nullable)(void))completion;
@end

View File

@ -0,0 +1,23 @@
//
// APFCherryDetectTask.h
// APBToygerFacade
//
// Created by richard on 01/02/2018.
// Copyright © 2018 DTF. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <BioAuthEngine/AFEStatusBar.h>
#import <APBToygerFacade/APBToygerBaseTask.h>
#import <BioAuthEngine/BioAuthEngine.h>
#import <DTFUtility/CameraService.h>
@interface APBToygerCherryDetectTask : APBToygerBaseTask <DTFCameraServiceDelegate, DTFFaceViewDelegate, ToygerServiceInstanceDelegate>
@property (nonatomic, assign) BOOL photinusFlags;
@property (nonatomic, strong) DTFCameraService *cameraService;
@property (nonatomic, strong) id instance; //Toyger对象
- (void)onButtonCancel;
@end

View File

@ -0,0 +1,26 @@
//
// APFCherryUploadTask.h
// APFaceDetectBiz
//
// Created by yukun.tyk on 28/11/2016.
// Copyright © 2016 DTF. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <APBToygerFacade/APBToygerUploadTask.h>
#import <BioAuthEngine/APBToygerDataCenter.h>
typedef NS_ENUM(NSInteger, APBToygerRemoteCommand)
{
APBToyger_REMOTE_COMMAND_PASS = 1001, //比对通过
APBToyger_REMOTE_COMMAND_CONTINUE = 1002, //需要继续采集
APBToyger_REMOTE_COMMAND_FAIL = 2001, //比对失败
APBToyger_REMOTE_COMMAND_RETRY = 2002, //需要重试
};
@interface APBToygerCherryUploadTask : APBToygerUploadTask <APBToygerDataCenterDelegate>
- (APBToygerRemoteCommand)remoteCommandFromString:(NSString *)code;
@end

View File

@ -0,0 +1,36 @@
//
// APFaceFacade.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/25/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <BioAuthEngine/IBioAuthFactor.h>
@interface APBToygerFacade : NSObject <IBioAuthFactor>
+(void)setTokenid:(NSString*)info;
+(NSString*)getTokenid;
@end
#import <APBToygerFacade/APBToygerCherryDetectTask.h>
#import <APBToygerFacade/APBToygerBaseTask.h>
#import <APBToygerFacade/APBToygerPresentTask.h>
#import <APBToygerFacade/APBToygerCherryUploadTask.h>
#import <APBToygerFacade/APBToygerUtils.h>
#import <APBToygerFacade/APBToygerUploadTask.h>
#import <APBToygerFacade/APBToygerFacadeDefine.h>
#import <BioAuthEngine/APBToygerRemoteConfig.h>
#import <BioAuthEngine/APBToygerBehavlogManager.h>
#import <BioAuthEngine/APBToygerDataCenter.h>
#import <APBToygerFacade/APBToygerViewController.h>
#import <UIKit/UIKit.h>
//! Project version number for APBToygerFacade.
FOUNDATION_EXPORT double APBToygerFacadeVersionNumber;
//! Project version string for APBToygerFacade.
FOUNDATION_EXPORT const unsigned char APBToygerFacadeVersionString[];

View File

@ -0,0 +1,130 @@
//
// APFCherryDefine.h
// APBToygerFacade
//
// Created by shouyi.www on 27/02/2017.
// Copyright © 2017 DTF. All rights reserved.
//
#ifndef APBToygerFacadeDefine_h
#define APBToygerFacadeDefine_h
static float normalized_distance(float current_value, float best_value, float range) {
return fabsf((current_value - best_value) / range);
}
//typedef struct toyger_status_evaluator_t {
// float pitch;
// float yaw;
// float width;
//
// float best_pitch;
// float best_yaw;
// float best_width;
// float pitch_range;
// float yaw_range;
// float width_range;
// float pitch_weight;
// float yaw_weight;
// float width_weight;
//
// toyger_status_evaluator_t(float pitch_ = -0.3, float pitch_range_ = 0.7, float best_pitch_ = 0, float pitch_weight_ = 1,
// float yaw_ = -0.6, float yaw_range_ = 0.6, float best_yaw_ = 0, float yaw_weight_ = 1,
// float width_ = 0.2, float width_range_ = 1.2, float best_width_ = 0.7, float width_weight_ = 1){
// pitch = pitch_;
// yaw = yaw_;
// width = width_;
// pitch_range = pitch_range_;
// yaw_range = yaw_range_;
// width_range = width_range_;
// best_pitch = best_pitch_;
// best_yaw = best_yaw_;
// best_width = best_width_;
// pitch_weight = pitch_weight_;
// yaw_weight = yaw_weight_;
// width_weight = width_weight_;
// }
//
// void reset(){
// pitch = -0.3;
// yaw = -0.6;
// width = 0.2;
// }
//
// void update(float pitch_, float yaw_, float width_) {
// pitch = pitch_;
// yaw = yaw_;
// width = width_;
// }
//
// float evaluateProgress(float pitch_, float yaw_, float width_){
// return
// (normalized_distance(pitch_, best_pitch, pitch_range) * pitch_weight +
// normalized_distance(yaw_, best_yaw, yaw_range) * yaw_weight +
// normalized_distance(width_, best_width, width_range) * width_weight) /
// (pitch_weight + yaw_weight + width_weight);
// }
//
// float evaluate(){
// return 1 -
// (normalized_distance(pitch, best_pitch, pitch_range) * pitch_weight +
// normalized_distance(yaw, best_yaw, yaw_range) * yaw_weight +
// normalized_distance(width, best_width, width_range) * width_weight) /
// (pitch_weight + yaw_weight + width_weight);
// }
//
//}ToygerStatusEvaluator;
typedef struct apbtoyger_tip_evaluator_t {
bool pose_end;
bool has_face;
bool did_blink;
bool pos_okay;
bool quality_okay;
bool under_exposure;
bool face_width_too_small;
bool face_width_too_big;
bool integrity_fail;
bool yaw_fail;
bool pitch_fail;
bool tremble_fail;
bool did_checkSeven;
int tip_timer_wait_cnt;
bool tip_show_switch;
int tip_message;
apbtoyger_tip_evaluator_t(){
reset();
}
void reset(){
has_face = false;
did_blink = false;
pos_okay = false;
under_exposure = false;
face_width_too_small = false;
integrity_fail = false;
pitch_fail = false;
face_width_too_big = false;
yaw_fail = false;
tremble_fail = false;
tip_timer_wait_cnt = 0;
tip_show_switch = true;
did_checkSeven = false;
quality_okay = false;
pose_end = false;
tip_message =0;
}
}APBToygerTipEvaluator;
//UI样式
typedef enum : NSUInteger {
APBToygerUIStyleFPPCherry = 991, //991 FPP樱桃废弃
APBToygerUIStyleCherry, //992 zFace樱桃
APBToygerUIStyleGarfield, //993 加菲
} APBToygerUIStyle;
#endif

View File

@ -0,0 +1,25 @@
//
// APFPresentTask.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/26/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <APBToygerFacade/APBToygerBaseTask.h>
#import <DTFUtility/CameraService.h>
#import <BioAuthEngine/DTFFaceViewProtocol.h>
/**
* @author Skye Ying, 16-08-26 13:08:04
*
* VCview
*/
@interface APBToygerPresentTask : APBToygerBaseTask
@property(nonatomic, strong) id<DTFFaceViewProtocol> faceView;
-(void) postCameraPresentwithCamera:(DTFCameraService *) cameraService;
-(void) presentAnimated: (BOOL)flag completion:(void (^ __nullable)(void))completion;
@end

View File

@ -0,0 +1,27 @@
//
// APBToygerUploadTask.h
// APBToygerFacade
//
// Created by Dan Cong on 29/1/2018.
// Copyright © 2018 DTF. All rights reserved.
//
#import <APBToygerFacade/APBToygerBaseTask.h>
/**
UI()
*/
@interface APBToygerUploadTask : APBToygerBaseTask
- (void)uploadImage;
- (void)didFinishUploadWithSuccess:(BOOL)success
retCode:(NSString *)retCode
retMessage:(NSString *)msg
extInfo:(NSString *)ext;
- (void)handleFailWithRetCodeSub:(NSString *)retCodeSub retMessageSub:(NSString *)retMessageSub;
- (void)requestAgain;
@end

View File

@ -0,0 +1,59 @@
//
// APFUtils.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/25/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <APBToygerFacade/APBToygerFacadeDefine.h>
//#import "APFaceDetectBizFacade.h"
//主线程同步操作
#define SYNC_MAINTHREAD_BEGIN_APBT [APBToygerUtils APBToygerMainThread:^{
#define SYNC_MAINTHREAD_END_APBT }];
#define LOCK(locker, ...) dispatch_semaphore_wait(locker, DISPATCH_TIME_FOREVER); \
__VA_ARGS__; \
dispatch_semaphore_signal(locker);
@class MGLivenessDetectionFrameEncodedData;
@interface APBToygerUtils : NSObject
+ (void)APBToygerMainThread:(dispatch_block_t)block;
+ (NSString *)getTextContentforKey:(NSString*)keyName;
+ (NSString *)localizedTextForKey:(NSString *)key;
+ (NSBundle *)getBundle;
+ (int)getCodefrom:(NSString *)bisToken withLength:(int)codeLen;
//+ (NSString *)getActionNoticeByActionType:(APFLiveActionType) actionType;
//检查文件是否存在
+ (BOOL) checkFileunderPath:(NSString *) filePath;
//写入文件
//如果文件存在,不重写,返回失败。
//如果文件不再在,写入,返回写入结果
+ (BOOL) writeFileunderPath:(NSString *) filePath;
//删除文件
+ (BOOL) removeFileunderPath:(NSString *) filePath;
//随机文件名
+ (NSString *)randomString:(NSInteger)len;
+ (NSString *)localizedStringForKey:(NSString *)key;
+ (UIImage *)loadImageFromBundleNamed:(NSString *)imageName;
+ (UIWindow *)lastWindow;
@end

View File

@ -0,0 +1,28 @@
//
// APFViewController.h
// APFaceDetectBiz
//
// Created by 晗羽 on 8/25/16.
// Copyright © 2016 DTF. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <ToygerService/ToygerService.h>
#import <BioAuthEngine/DTFFaceViewProtocol.h>
#import <BioAuthEngine/DTFBaseViewController.h>
@interface APBToygerViewController : DTFBaseViewController
@property(nonatomic, strong) id<DTFFaceViewProtocol> faceView;
- (void)startFaceRecognition:(AVCaptureVideoPreviewLayer *)layer;
- (void)handleFaceStateChange:(ToygerMessage)state
stateTips:(NSString *)tips
actionGuide:(NSString *)guide
progress:(CGFloat)progress;
- (void)faceDectectComplete;
- (void)setPhotinusColor:(UIColor *)color;
- (void)showBlur:(UIImage *)image;
@end

View File

@ -0,0 +1,6 @@
framework module APBToygerFacade {
umbrella header "APBToygerFacade.h"
export *
module * { export * }
}

View File

@ -0,0 +1,122 @@
//
// APDID.h
// APPSecuritySDK
//
// Created by eric on 2021/2/7.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "ASSTokenResult.h"
NS_ASSUME_NONNULL_BEGIN
typedef void(^ASSSecureSdkCallback)(ASSTokenResult* result, NSString* error);
typedef void(^ASSSecureSdkOpenCallback)(NSString* token, int errorCode);
@interface APDID : NSObject
/*
vkeyidapp启动时和收银台页面加载时调用SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求线
@param params tiduseridenvironment
tid与userid选传vkeyid与其正确关联
app设置中的环境相关联value包括线上
@param callback
Asynchronously initialize vkeyid(apdid), recommend to invoke this API when app launches, and cashier view presents.
Inside SDK we will decide whether to launch network request or not based on timestamp and device info.
No thread requirement.
@param params Initialized parameters, includes 3 key-value pairs: tid, userid,environment
Tid and userid are optional, they can be associated with vkeyid(apdid) if passed in.
If the values for tid and userid are not available, pass in empty NSString(@"").
@param callback Callback block when token is available
*/
+ (void) initToken:(NSDictionary*)params callback:(ASSSecureSdkCallback)callback;
/*
vkeyid完整信息vkeyidtokenclientkey
appvkeyid会返回客户端随机串clientkeytoken将会返回空
Synchronously get full info of vkeyid(apdid), token and clientkey, no network requests.
If the app is installed for the first time and first network request failed, it would return degradation result: vkeyid would be clientkey which is a client-side generated random string, token would be empty NSString @""
*/
+ (ASSTokenResult*)getToken DEPRECATED_MSG_ATTRIBUTE("use getTokenResult instead");
/*
vkeyid完整信息vkeyidtokenclientkey
appvkeyid会返回客户端随机串clientkeytoken将会返回空
Synchronously get full info of vkeyid(apdid), token and clientkey, no network requests.
If the app is installed for the first time and first network request failed, it would return degradation result: vkeyid would be clientkey which is a client-side generated random string, token would be empty NSString @""
*/
+ (ASSTokenResult*)getTokenResult;
+ (ASSTokenResult *)getTokenResult:(NSString*)appName appKeyClient:(NSString*)appKeyClient;
//===================lazada api====================//
/*
vkeyidapp启动时和收银台页面加载时调用SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求线
@param appName
@param appKeyClient
@param callback Token作为参数
*/
+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient callback:(ASSSecureSdkOpenCallback)callback;
/*
token
@param appName
@param appKeyClient
*/
+ (NSString *)getResultToken;
/*
token
@param appName
@param appKeyClient
*/
+ (NSString *)getResultToken:(NSString*)appName appKeyClient:(NSString*)appKeyClient;
//===================TMN api====================//
/*
vkeyidapp启动时和收银台页面加载时调用SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求线
@param appName
@param appKeyClient
@param sessionId id
@param callback Token作为参数
*/
+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient sessionId:(NSString *)sessionId callback:(ASSSecureSdkOpenCallback)callback;
//===================ae api====================//
/*
@param params umidtiduseridenvironment
umid必传tid与userid选传vkeyid与其正确关联
app设置中的环境相关联value包括线上
@param callback
*/
+ (void) updateToken:(NSDictionary*)params callback:(ASSSecureSdkCallback)callback;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,41 @@
//
// APDeviceColor.h
// APPSecuritySDK
//
// Created by eric on 2021/2/25.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APDeviceColor : NSObject
/*
* getColorLabel
*
* @param bizToken
* @param extParams
* @param errInfo
*
* @return
*/
+ (NSString*) getColorLabel: (NSString*) bizToken
ext: (NSDictionary *) extParams
error: (NSError **) errInfo;
/*
* getColorLabel
*
* @param extParams
* @param errInfo
*
* @return
*/
+ (NSString*) getColorLabel: (NSDictionary *) extParams
error: (NSError **) errInfo;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,32 @@
//
// APDynamic.h
// APPSecuritySDK-Sign
//
// Created by eric on 2021/2/25.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APDynamic : NSObject
/*
* dynamicCheckDispatch
*
* @param dict
*/
+ (void)dynamicCheckDispatch:(NSDictionary *)dict;
/*
* dynamicCheckDispatch
*
* @param dict
* @param callback
*/
+ (void)dynamicCheckDispatch:(NSDictionary *)dict withCallBack: (void(^)(Boolean, NSString *))callback;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,21 @@
//
// APRiskConfigReportRequest.h
// APPSecuritySDK-Common
//
// Created by eric on 2021/8/16.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APRiskConfigReportRequest : NSObject
@property(nonatomic, strong) NSString* os;
@property(nonatomic, strong) NSString* apdid;
@property(nonatomic, strong) NSDictionary* deviceDataMap;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,19 @@
//
// APRiskConfigReportResponse.h
// APPSecuritySDK-Common
//
// Created by eric on 2021/8/16.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APRiskConfigReportResponse : NSObject
@property(nonatomic, strong) NSDictionary* resultData;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,20 @@
//
// APRiskConfigServiceProtocol.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
#import "APRiskSyncHandlerProtocol.h"
@protocol APRiskConfigServiceProtocol <NSObject>
@required
- (NSString *)stringValueForKey:(NSString *)key;
- (void)addConfigChangeListener:(id<APRiskSyncHandlerProtocol>)handler forKey:(NSString *)key;
- (void)refreshConfig:(NSDictionary *)tConfigMap from:(NSString *)sourceType;
@end

View File

@ -0,0 +1,14 @@
//
// APRiskFileUploadProtocol.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
@protocol APRiskFileUploadProtocol <NSObject>
@required
- (NSString *)uploadCustomFile:(NSString *)path;
@end

View File

@ -0,0 +1,21 @@
//
// APRiskLoggerProtocol.h
// APPSecuritySDK-Common
//
// Created by eric on 2021/6/25.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol APRiskLoggerProtocol <NSObject>
@required
-(void)print:(NSString *)format, ...NS_REQUIRES_NIL_TERMINATION;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,30 @@
//
// APRiskRPCProtocol.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
#import "APRiskReportRequest.h"
#import "APRiskReportResponse.h"
#import "APRiskRpcConfiguration.h"
#import "APRiskConfigReportRequest.h"
#import "APRiskConfigReportResponse.h"
@protocol APRiskRPCProtocol <NSObject>
//gateway
@required
- (APRiskReportResponse *)sendStaticRequest:(APRiskReportRequest *)data
config:(APRiskRpcConfiguration*)cfg;
@required
- (APRiskConfigReportResponse *)sendConfigReportRequest:(APRiskConfigReportRequest *)data
config:(APRiskRpcConfiguration*)cfg;
@required
- (BOOL)updateLog:(NSString*)log
config:(APRiskRpcConfiguration*)cfg;
@end

View File

@ -0,0 +1,29 @@
//
// APRiskRemoteLoggerProtocol.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
@protocol APRiskRemoteLoggerProtocol <NSObject>
@required
- (void)writeLogWithActionId:(NSString *)event
extParams:(NSArray *)args
appId:(NSString *)appId
seed:(NSString *)seed
ucId:(NSString *)ucId;
@required
- (void)writeLogWithActionId:(NSString *)event
extParams:(NSArray *)args
appId:(NSString *)appId
seed:(NSString *)seed
ucId:(NSString *)ucId
bizType:(NSString *)bizType;
@required
- (void)writeEventLog:(NSDictionary *)dict;
@end

View File

@ -0,0 +1,68 @@
//
// APRiskReportRequest.h
// APPSecuritySDK
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface APRiskReportRequest : NSObject
/**
* os type: android|ios"
*/
@property(nonatomic, strong) NSString *os;
/**
* device id for ios for static report, or device id for dynamic report both for ios and android
*/
@property(nonatomic, strong) NSString *apdid;
/**
* public region device id for android for static report
*/
@property(nonatomic, strong) NSString *pubApdid;
/**
* private region device id for android for static report
*/
@property(nonatomic, strong) NSString *priApdid;
/**
* apdid token
*/
@property(nonatomic, strong) NSString *token;
/**
* umid token
*/
@property(nonatomic, strong) NSString *umidToken;
/**
* rpc version
*/
@property(nonatomic, strong) NSString *version;
/**
* last apdid time (create time)
*/
@property(nonatomic, strong) NSString *lastTime;
/**
* dynamicKey
*/
@property(nonatomic,strong) NSString* dynamicKey;
/**
* device info map
*/
@property(nonatomic, strong) NSDictionary *dataMap;
+ (Class)dataMapElementClass;
@property(nonatomic,strong) NSDictionary *bizData;
+ (Class)bizDataElementClass;
@end

View File

@ -0,0 +1,65 @@
//
// APRiskReportResponse.h
// APPSecuritySDK
//
// Created by hongren on 2020/9/7.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface APRiskReportResponse : NSObject
/**
* success or not
*/
@property(nonatomic, assign) BOOL success;
/**
* result code
*/
@property(nonatomic, strong) NSString *resultCode;
/**
* device id
*/
@property(nonatomic, strong) NSString *apdid;
/**
* apdid token
*/
@property(nonatomic, strong) NSString *token;
/**
* current apdid time (create time)
*/
@property(nonatomic, strong) NSString *currentTime;
/**
* rpc version
*/
@property(nonatomic, strong) NSString *version;
/**
* switch for vkey
*/
@property(nonatomic, strong) NSString *vkeySwitch;
/**
* switch for BugTrack
*/
@property(nonatomic, strong) NSString *bugTrackSwitch;
/**
* version for applist cmd
*/
@property(nonatomic, strong) NSString *appListVer;
@property(nonatomic, strong) NSString *dynamicKey;
@property(nonatomic, strong) NSDictionary *resultData;
+ (Class)resultDataElementClass;
@end

View File

@ -0,0 +1,20 @@
//
// APRiskRpcConfiguration.h
// APPSecuritySDKAdapter
//
// Created by hongren on 2020/9/8.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface APRiskRpcConfiguration : NSObject
// 超时时间
@property(nonatomic, assign) int timeout;
// 网关地址
@property(nonatomic, strong) NSString* gatewayURL;
// workspaceid和appid
@property(nonatomic, strong) NSDictionary *headers;
@end

View File

@ -0,0 +1,21 @@
//
// APRiskSyncHandlerProtocol.h
// APPSecuritySDK
//
// Created by eric on 2020/10/15.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@protocol APRiskSyncHandlerProtocol <NSObject>
@required
-(void) handleWithBizType: (NSString *) bizType andData: (NSString *) data;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,28 @@
//
// APRiskSyncServiceProtocol.h
// APPSecuritySDK
//
// Created by eric on 2020/10/15.
// Copyright © 2020 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "APRiskSyncHandlerProtocol.h"
NS_ASSUME_NONNULL_BEGIN
static NSString* const kEdgeBizTypeGlobal = @"EDGE-GLOBAL";
static NSString* const kEdgeBizTypeSingle = @"EDGE-SINGLE";
static NSString* const kEdgeBizTypeUid = @"EDGE-SINGLE-USER";
static NSString* const kEdgeBizTypeSyncDegradeToConfig = @"EDGE-SYNC-DEGRADE-TO-CONFIG";
@protocol APRiskSyncServiceProtocol <NSObject>
@required
-(void) registerHandler:(id<APRiskSyncHandlerProtocol>)handler;
-(void) registerSyncBiz;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,41 @@
//
// APSecRDS.h
// APSecRDS
//
// Created by xingchen on 15/4/8.
// Copyright (c) 2015年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface APSecRDS : NSObject
/*
appname app的名称
appver app的版本
sdkname sdk的名称
sdkver sdk的版本
user /
pagesrc /
page
*/
-(void) onPageWithView:(NSString*)pageName args:(NSDictionary*) inArgs;
-(NSString*) onPageEndWithView:(NSString*) pageName user:(NSString*) userName;
-(NSString*) onPageEndZipDataWithView:(NSString*)pageName user:(NSString*)userName;
-(void) onControlClickWithView:(NSString*) pageName ctrl: (NSString*)ctrlName;
//按键信息
-(void) onKeyDownWithView:(NSString*) pageName ctrl:(NSString*) ctrlName keyCode:(NSString*)keyValue;
//焦点信息
-(void) onGetFocusWithView:(NSString*)pageName ctrl:(NSString*) ctrlName;
-(void) onLostFocusWithView:(NSString*) pageName ctrl:(NSString*) ctrlName;
//触屏信息
-(void) onTouchScreenWithView:(NSString*)pageName ctrl:(NSString*) ctrlName point:(CGPoint) pt;
@end

View File

@ -0,0 +1,48 @@
//
// APSecStore.h
// APPSecuritySDK
//
// Created by eric on 2021/3/10.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface APSecStore : NSObject
/*
*: keychain中载入字符串
*线:
*:
*@return: key对应字符串,nil
*@param key:nil
*@param error:
*/
+(NSString*) loadKey:(NSString*) key error:(NSError **)error;
/*
*: ()keychain
*线:
*:
*@return: yes,no
*@param key:nil
*@param value:nil
*@param error:
*/
+(BOOL) saveKey:(NSString*) key Value:(NSString*)value error:(NSError **)error;
/*
*: keychain中删除字符串
*线:
*:
*@return: yes,no
*@param key:nil
*@param error:
*/
+(BOOL) deleteKey:(NSString*) key error:(NSError **)error;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,113 @@
//
// ASSSecureSdk.h
// APSecSecuritySDK
//
// Created by xingchen on 15/2/26.
// Copyright (c) 2015年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
//初始化API的字典参数中,TID的key
//key for TID in the NSDictionary parameter for initToken:callback: API
extern NSString * const ASS_TID;
//初始化API的字典参数中userid的key
//key for USERID in the NSDictionary parameter for initToken:callback: API
extern NSString * const ASS_USERID;
//初始化API的字典参数中,环境变量的key
//key for server environment configuration in the NSDictionary parameter for initToken:callback: API
extern NSString * const ASS_ENVIRONMENT;
//初始化API的字典参数中环境变量的value代表线上环境
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for online environment
extern NSString * const ASS_ENVIRONMENT_ONLINE;
//初始化API的字典参数中环境变量的value代表测试环境
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for test environment
extern NSString * const ASS_ENVIRONMENT_SIT;
//初始化API的字典参数中环境变量的value代表开发环境
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for daily environment
extern NSString * const ASS_ENVIRONMENT_DAILY;
//初始化API的字典参数中环境变量的value代表预发环境
//value for server configuration in the NSDictionary parameter for initToken:callback: API, stands for pre online environment
extern NSString * const ASS_ENVIRONMENT_PRE;
//初始化API的字典参数中,设置RPC网关地址的key。
//key for RPC server gateway address in the NSDictionary parameter for initToken:callback: API.
//If value for this key is specified, the value for ASS_ENVIRONMENT will be ignored.
extern NSString* const ASS_RPC_GATEWAY_ADDR;
//rpc header workspaceid key
extern NSString* const ASS_RPC_WORKSPACEID;
//rpc header appid key
extern NSString* const ASS_RPC_APPID;
//初始化API的字典参数中,设置UMID网关host地址的key。
//host 要设置的线上地址如ynuf.alipay.com不要带协议头不要带后面的参数只能传纯host地址
//key for UMID server host in the NSDictionary parameter for initToken:callback: API.
//host should only contain online address such as ynuf.alipay.com, without protocol or parameters.
extern NSString* const ASS_UMID_HOST;
//初始化API的字典参数中,设置加密的umid。
extern NSString * const ASS_ENCODE_UMID;
/*!
@typedef ASSStatusCode
Possible return codes
@constant ASSStatusCodeOk Completed, No errors
@constant ASSStatusCodeInvalidParam input param invalid
@constant ASSStatusCodeAppNameNil appName is nil
@constant ASSStatusCodeAppKeyNil appKeyClient is nil
@constant ASSStatusCodeConnectionError network connection failure
*/
typedef NS_ENUM(NSInteger, ASSStatusCode)
{
ASSStatusCodeOk = 0,
ASSStatusCodeInvalidParam,
ASSStatusCodeAppNameNil,
ASSStatusCodeAppKeyNil,
ASSStatusCodeConnectionError,
};
typedef NS_ENUM(NSInteger, ASSAddressFlag)
{
ASSAddressFlagIndonesia = 1,
ASSAddressFlagMalaysia = 2,
ASSAddressFlagPilipinas = 3,
ASSAddressFlagSingapore = 4,
ASSAddressFlagIpayVn = 11,
ASSAddressFlagIpayId = 12,
ASSAddressFlagIpayMy = 13,
ASSAddressFlagIpaySg = 14,
ASSAddressFlagIpayTh = 15,
ASSAddressFlagIpayPh = 16,
ASSAddressFlagIpayDefault = 17,
};
@interface APSecureSdk : NSObject
/**
*/
+ (id)sharedInstance;
/*
*
*/
- (void)setSecuritySDKConfig:(ASSAddressFlag)address;
/**
*/
- (void)initWithRpcConfiguration:(NSDictionary *) config;
//===================测试联调 api====================//
- (void)setRpcConfiguration:(NSDictionary *) config;
@end

View File

@ -0,0 +1,61 @@
//
// APSign.h
// APPSecuritySDK-Sign
//
// Created by eric on 2021/2/25.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
extern NSString * const APSE_SIGN_MODE_NORMAL;
extern NSString * const APSE_SIGN_MODE_ENHANCE;
extern NSString * const APSE_SIGN_MODE_NORMAL_ASYNC;
extern NSString * const APSE_SIGN_MODE_ENHANCE_ASYNC;
@interface APSign : NSObject
/*
* getColorInfo
*
* @param bizToken
* @param bizParam
* @param extParams
* @param errInfo
*
* @return
*/
+ (NSString*) getColorInfo: (NSString*) bizToken
param: (NSString*) bizParam
ext: (NSDictionary*) extParams
error: (NSError **) errInfo;
/*
* preColorInfo
*
* @param userAction ,
* @param extParams
*
* @return
*/
+ (NSString*) preColorInfo: (int) userAction
ext: (NSDictionary*) extParams
error: (NSError **) errInfo;
/*
* preColorInfo
*
* @param userAction ,
* @param extParams
*
* @return
*/
+ (NSString*) preColorInfoForString: (int) userAction
ext: (NSString*) extParams
error: (NSError **) errInfo;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,234 @@
//
// ASSCommon.h
// ae-security-sdk
//
// Created by xingchen on 14/12/30.
// Copyright (c) 2014年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "ASSLogger.h"
//#define IN_DEBUG
#define USED_BY_ALIPAY
static NSErrorDomain APSECURITYSDK_ERROR_DOMAIN = @"APSecuritySDKErrorDomain";
static NSString* const PRIVATE_KEY_XXXX = @"qqAIhzy)H)ip53<>ugx,sI{#}CE$37L|z5G=IScgO^=aQHaN[b|NM.RWdZpcy.r$";
static NSString* const PRIVATE_KEY_CLIENTKEY = @"EQopzyui)H)ipQW983<ll>uitx,sgI{#}##20110kl==^^woQG,msq.xinjun.$$";
static NSString* const LOG_SWITCH_SETTING_INITIALIZED = @"开关设置从keychain初始化成功";
static NSString* const LOG_LOAD_SETTING_EXCEPTION = @"开关设置在keychain中无存储读取失败";
static NSString* const LOG_DECRYPT_SETTING_EXCEPTION = @"开关设置从keychain中读取成功解密失败";
static NSString* const LOG_SWITCH_APPLIST_INITIALIZED = @"applist从keychain初始化成功";
static NSString* const LOG_LOAD_APPLIST_EXCEPTION = @"applist相关信息在keychain中无存储读取失败";
static NSString* const LOG_DECRYPT_APPLIST_EXCEPTION = @"applist信息从keychain中读取成功解密失败";
static NSString* const LOG_UMID_TOKEN_REQUEST_BACK = @"UMID TOKEN返回结果为";
static NSString* const LOG_VKEYINFO_GENERATED = @"本地VKEY开关打开将生成VKEY信息";
static NSString* const LOG_VKEYINFO_ABORT = @"本地VKEY开关关闭将放弃生成VKEY信息";
static NSString* const LOG_VKEY_NO_KEYCHAIN_CACHE = @"VKEY缓存信息在keychain中无存储读取失败";
static NSString* const LOG_VKEY_FOUND_KEYCHAIN_CACHE = @"VKEY缓存信息在keychain中获取缓存值";
static NSString* const LOG_VKEY_INFO_DETAIL = @"KEY信息为";
static NSString* const LOG_VKEY_GENERATION_EXCEPTION = @"VEr";
static NSString* const LOG_GID_GENERATED = @"本地GID开关打开将生成GID信息";
static NSString* const LOG_GID_ABORT = @"本地GID开关关闭将放弃生成GID信息";
static NSString* const LOG_GID_NO_KEYCHAIN_CACHE = @"GID缓存信息在keychain中无存储读取失败";
static NSString* const LOG_GID_FOUND_KEYCHAIN_CACHE = @"GID缓存信息在keychain中获取缓存值";
static NSString* const LOG_GID_INFO_DETAIL = @"GID信息为";
static NSString* const LOG_VOS_RUNNING = @"VKEY任务启动";
static NSString* const LOG_VOS_ASYNC_ABORT = @"放弃异步VOS任务";
static NSString* const LOG_VOS_VKEY_GENERATION = @"VOS VKEY采集中";
static NSString* const LOG_VOS_GID_GENERATION = @"VOS GID采集中";
static NSString* const LOG_GID_GENERATION_EXCEPTION = @"GEr:";
static NSString* const LOG_JB_ERROR_DETECTED = @"JEr";
static NSString* const LOG_STATIC_INFO_DETAIL = @"采集静态信息列表如下:";
static NSString* const LOG_APP_LIST_INFO_COLLECTED = @"APPLIST信息扫描获取中";
static NSString* const LOG_APP_LIST_INFO_ABORT = @"APPLIST信息放弃扫描获取";
static NSString* const LOG_LOAD_MODEL_KEYCHAIN_EXCEPTION = @"VKEYID在keychain无存储读取失败";
static NSString* const LOG_LOAD_MODEL_FROM_KEYCHAIN = @"VKEYID从keychain中成功读取";
static NSString *const LOG_LOCALMODEL_ABSENT = @"本地未找到VKEYID存储";
static NSString *const LOG_LOCALMODEL_LOADSUCCESS = @"本地成功找到VKEYID存储";
static NSString *const LOG_LOAD_PREAPDID_SUCCESS = @"本地成功在keychain中读取旧版apdid的值:";
static NSString *const LOG_LOAD_PREAPDID_FAILED = @"旧版apdid在keychain中无存储读取失败";
static NSString* const LOG_STATIC_INFO_CHANGED = @"所采集的静态信息发生改变或者存储中没有记录";
static NSString* const LOG_STATIC_INFO_SAME = @"所采集的静态信息与存储中相同";
static NSString* const LOG_TODAY_FIRST = @"检测为24小时内首次请求";
static NSString* const LOG_NOT_TODAY_FIRST = @"检测24小时内已经发起过请求";
static NSString *const LOG_GETAPDIDTOKEN_RET_LOCAL = @"不发起网络请求,直接返回本地存储";
static NSString* const LOG_CONNECT_TO_SERVER = @"需要访问服务器请求TOKEN";
static NSString* const LOG_REQUEST_INFO_INCLUDED = @"静态请求上传需要携带静态信息";
static NSString* const LOG_REQUEST_INFO_EXCLUDED = @"静态请求上传不需要携带静态信息";
static NSString* const LOG_STATIC_REQUEST_EXCEPTION = @"静态数据请求发送出现异常";
static NSString* const LOG_STATIC_REQUEST_FAILED = @"静态数据请求返回出现错误";
static NSString* const LOG_STATIC_REQUEST_SUCCESS = @"静态数据请求请求返回";
static NSString* const LOG_SERVER_RESPONSE_SUCCESS = @"服务端返回结果通过验证,证明有效:";
static NSString* const LOG_SERVER_RESPONSE_FAILED = @"服务端获取TOKEN失败";
static NSString* const LOG_LOG_REQUEST_RESPONSE = @"日志上传成功返回";
static NSString *const LOG_LOCALMODEL_SAVED_KEYCHAIN = @"成功将VKEY ID保存至keychain";
static NSString *const LOG_UPDATE_SETTING = @"已更新keychain中开关的设置值";
static NSString* const LOG_APP_LIST_NEED_UPDATE = @"经过检测app list列表需要从服务器更新";
static NSString *const LOG_UPDATE_APPLIST = @"app list列表成功从服务器更新";
static NSString* const LOG_APPLIST_SETTING_SAVED_KEYCHAIN = @"app list列表信息成功更新至keychain保存";
static NSString* const LOG_APP_LIST_REQUEST_EXCEPTION = @"app list请求出现异常";
static NSString* const LOG_APP_LIST_RESPONSE_FAILED = @"app list请求结果失败";
static NSString* const LOG_LOG_UPDATE_EXCEPTION = @"日志信息请求发送出现异常";
static NSString* const LOG_LOG_UPLOAD_ERROR = @"日志信息发送出现错误";
static NSString* const LOG_LOG_UPLOAD_SUCCESS = @"日志信息发送返回成功";
static NSString *const LOG_SETTINGMODEL_SAVEFAILED = @"开关信息保存错误";
static NSString *const LOG_SETTINGMODEL_SUCCESS = @"开关信息成功保存到keychain";
static NSString* const LOG_LOG_UPLOAD_PROCESS = @"上报日志开关打开,开始上报错误日志流程";
static NSString* const LOG_LOG_UPLOAD_ABORT = @"上报日志开关关闭,放弃上报错误日志";
static NSString* const LOG_LOG_FILE_DETAIL = @"检测到错误日志文件:";
static NSString* const LOG_LOG_FILE_REMOVAL = @"已经删除错误日志文件:";
static NSString* const LOG_LOG_UPLOAD_START = @"开始日志上报网络请求";
static NSString* const LOG_LOG_UPLOAD_DETAIL = @"日志上报网络请求具体内容:";
static NSString* const LOG_JSON_PARSE_EXCEPTION = @"JSON解析失败";
static NSString* const ASS_STORAGE_KEY_SUCCESS = @"success";
static NSString* const ASS_STORAGE_KEY_APDID = @"apdid";
static NSString* const ASS_STORAGE_KEY_TOKEN = @"token";
static NSString* const ASS_STORAGE_KEY_TIME = @"time";
static NSString* const ASS_STORAGE_KEY_VKEYSWITCH = @"vkeyon";
static NSString* const ASS_STORAGE_KEY_LOGSWITCH = @"logon";
static NSString* const ASS_STORAGE_KEY_APPLISTVERSION = @"appver";
static NSString* const ASS_STORAGE_KEY_STATICHASH = @"statichash";
static NSString* const ASS_STORAGE_KEY_ERROR = @"error";
static NSString* const ASS_APPKEY_INVALID = @"APPKEY_ERROR";
static NSString* const ASS_STORAGE_KEY_WEBRTCURL = @"webrtcurl";
static NSString* const ASS_STORAGE_KEY_DYNAMICKEY = @"dynamickey";
static NSString* const ASS_STORAGE_KEY_AGENTURL = @"agentcurl";
static NSString* const ASS_STORAGE_KEY_APSE_DEGRADE = @"apse_degrade";
static NSString* const ASS_STORAGE_KEY_TIMEINTERVAL = @"timeInterval";
static NSString* const SECURE_SDK_KEYCHAIN_KEY = @"com.alipay.securesdk.storage";
static NSString* const LAST_LOGIN_TIME_KEY = @"com.alipay.asssecuritySDK.lastlogintime";
static NSString* const SECURE_SDK_RANDOM_STRING = @"com.alipay.securesdk.ranstr";
static NSString* const SECURE_SDK_RANDOM_TOKEN = @"com.alipay.securesdk.tokenid";
static NSString* const ASS_KEYCHAIN_KEY_SETTING = @"com.alipay.asssecuresdk.config";
static NSString* const SECURE_SDK_RANDOM_CLIENTKEY_STRING = @"com.alipay.securesdk.clientkey";
static NSString* const SECURE_SDK_KEYCHAIN_TOKEN = @"maintoken";
static NSString* const ASS_KEYCHAIN_KEY_APPLIST = @"com.alipay.asssecuresdk.list";
static NSString* const ASS_KEYCHAIN_KEY_DFP = @"com.alipay.asssecuresdk.dfp";
static NSString* const ASS_KEYCHAIN_KEY_GID = @"com.alipay.asssecuresdk.gid";
static NSString* const ASS_KEYCHAIN_KEY_JBER = @"com.alipay.asssecuresdk.jber";
static NSString* const ASS_KEYCHAIN_KEY_APDIDC = @"com.alipay.asssecuresdk.apdidc";
static NSString* const ASS_KEYCHAIN_KEY_TMXTIME = @"com.alipay.asssecuresdk.tmxtime";
static NSString* const ASS_KEYCHAIN_KEY_TMXSESSOINID = @"com.alipay.asssecuresdk.tmxsessionid";
static NSString* const ASS_KEYCHAIN_KEY_ARPMAC = @"com.alipay.asssecuresdk.arpmac";
static NSString* const ASS_KEYCHAIN_KEY_DYNAMICKEY = @"com.alipay.asssecuresdk.dynamickey";
static NSString* const ASS_USER_DEFAULT_KEY_DEGRADE_TIME = @"asssecuritysdkdegrade";
static const int overtime = 9;
//CRASHGUARD
static NSString* const CRASH_GUARD_GET_COLOR_INFO = @"05f445";
static NSString* const CRASH_GUARD_PRE_COLOR_INFO = @"f379d2";
static NSString* const CRASH_GUARD_INIT_COLOR_INFO = @"25f523";
static NSString* const CRASH_GUARD_UPDATE_COLOR_CODE = @"8e81ac";
static NSString* const CRASH_GUARD_GET_COLOR_LABEL = @"d785d8";
static NSString* const CRASH_GUARD_UPDATE_COLOR_LABEL = @"dccf1d";
static NSString* const CRASH_GUARD_INIT_TOKEN = @"0780aa";
static NSString* const CRASH_GUARD_INIT = @"e37f013";
@interface ASSCommon : NSObject
+ (int)getCurrentMode;
+ (NSString*)getRPCURL;
+ (NSString*)getServerHost;
+ (void) setRPCHeader:(NSDictionary*)header;
+ (NSDictionary*)getRPCHeader;
+ (void)setupEnvironmentMode:(int)mode;
+ (void)setupRPCAddress:(NSString*)address;
+ (BOOL)useURLWhitelist;
+ (BOOL)checkDeviceSystemVersion;
+ (void)setSecuritySDKConfig:(int)address;
+ (void)setRpcHeaderAppid:(NSString*)apid;
+ (NSString*)getRpcHeaderAppid;
+ (void)setRpcHeaderWorkspaceid:(NSString*)spaceid;
+ (NSString*)getRpcHeaderWorkspaceid;
@end

View File

@ -0,0 +1,37 @@
//
// ASSDynamicManager.h
// APSecSecuritySDK
//
// Created by msq on 2019/1/5.
// Copyright © 2019 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "APDynamicProtocol.h"
@interface ASSDynamicManager : NSObject<APDynamicProtocol>
+ (instancetype)sharedInstance;
- (void)dynamicCheckDispatch:(NSDictionary *)dict;
- (void)dynamicCheckDispatch:(NSDictionary *)dict withCallBack: (void(^)(Boolean, NSString *))callback;
- (void)dynamicCheckCustomLocal:(int)delay;
+ (NSData *)sendDynamicSynchronousRequest:(NSString *)url;
+ (void)uploadTimerCheckResult:(NSString *)data
dynamicTrace:(NSString*)trace
dynamicCmd:(int)cmd
dynamicNum:(int)num;
+ (NSString *)uploadCustomFile:(NSString *)path;
+ (void)recordError:(const char *)pos
withAction:(const char *)action
errCode:(int)code;
//+ (NSString *)processFeature;
@end

View File

@ -0,0 +1,39 @@
//
// ASSLogger.h
// ae-security-sdk
//
// Created by xingchen on 14/12/22.
// Copyright (c) 2014年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "ASSProtocolCenter.h"
#define ASSLog(...) do { \
if ([ASSProtocolCenter sharedCenter].logDelegate) { \
[[ASSProtocolCenter sharedCenter].logDelegate print:__VA_ARGS__, nil]; \
}} while(0)
#define ASSDtl(params, detail) [[ASSProtocolCenter sharedCenter].logDelegate print:[NSString stringWithFormat:@"%@%@",params,detail], nil]
#define ASSLogError(erroInfo) do { [[ASSLogger sharedInstance] addLogWithMessage: erroInfo]; } while(0)
@interface ASSLogger : NSObject
@property (nonatomic, strong) NSString* loggerInfo;
+(id)sharedInstance;
-(void)initializeWithArgs:(NSDictionary*)inArgs;
-(void)addLogWithMessage:(NSString*)message;
-(void)uploadLog;
//---------for test
-(NSData*)generateMessage:(NSString*)msg;
-(void)addLogWithMessage:(NSString *)message withFileName:(NSString*)fileName;
-(NSString*)getCurrentFileName:(NSDate*)date;
-(void)internal_addLog:(NSString*)message;
-(void)uploadLogCertified;
@end

View File

@ -0,0 +1,28 @@
//
// ASSSecureInfo.h
// APPSecuritySDK
//
// Created by msq on 2018/7/9.
// Copyright © 2018年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#define ASSSecureInfo ASSSecureInfoCore
@interface ASSSecureInfo : NSObject
/**
*
* YES表示个人签名NO表示企业签名
*
*/
+ (BOOL)hasPersonSign;
/**
*
* 00
*
*/
+ (uint32_t)checkJB;
@end

View File

@ -0,0 +1,77 @@
//
// ASSSecureOpenSdk.h
// APPSecuritySDK
//
// Created by msq on 16/6/1.
// Copyright © 2016年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "APSecureSdk.h"
#import "ASSTokenResult.h"
typedef void(^ASSSecureSdkCallbackOpen)(NSString* token, int errorCode);
@interface ASSSecureOpenSdk : NSObject
/*
vkeyidapp启动时和收银台页面加载时调用SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求线
@param appName
@param appKeyClient
@param callback Token作为参数
*/
+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient callback:(ASSSecureSdkCallbackOpen)callback;
/*
vkeyidapp启动时和收银台页面加载时调用SDK内部会根据时间戳和设备信息进行判断是否需要进行网络请求线
@param appName
@param appKeyClient
@param parameters
@param callback Token作为参数
*/
+ (void)initToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient parameters:(NSDictionary*)inArgs callback:(ASSSecureSdkCallbackOpen)callback;
/*
vkeyidapp启动时和收银台页面加载时调用线
@param appName
@param appKeyClient
@param parameters
@param callback Token作为参数
*/
+ (void)updateToken:(NSString *)appName appKeyClient:(NSString *)appKeyClient parameters:(NSDictionary*)inArgs callback:(ASSSecureSdkCallbackOpen)callback;
/*
VKEYID和VKEYID token的接口
1VKEYID将在旧版apdid存在的情况下返回旧版apdid
2VKEYID token将返回空字符串:@""
*/
+ (ASSTokenResultOpen*)getTokenResult;
/*
*exactID
*/
+ (NSString*)getExactID;
/*
*
*/
+ (void)setGatewayAddress:(NSString*)addr;
+ (void)setRpcConfiguration:(NSDictionary *) config;
/**
*
* appName - zorro
* appKeyClient - key elBwppCSr9nB1LIQ
* action -
* extParams - map方式传参
*/
//+(APRiskResult*)APPerceptRisk:(NSString*)appName appKeyClient:(NSString*)appKeyClient userAction:(NSInteger)action extParams:(NSDictionary *)args;
@end

View File

@ -0,0 +1,29 @@
//
// ASSSgomInfoOpen.h
// APPSecuritySDK
//
// Created by hongren on 2021/8/16.
// Copyright © 2021 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
/**
*
*/
@interface ASSSgomResult: NSObject
@property (nonatomic) NSInteger resCode;
@property (nonatomic, strong) NSString* resInfo;
@end
@interface ASSSgomInfoOpen : NSObject
+ (instancetype)sharedInstance;
- (ASSSgomResult*)updateSgomInfo:(int) userAction
ext:(NSDictionary*) extParams;
@end

View File

@ -0,0 +1,40 @@
//
// ASSTokenResult.h
// APPSecuritySDK
//
// Created by xingchen on 15/7/31.
// Copyright (c) 2015年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
#define ASSTokenResult ASSTokenResultCore
@interface ASSTokenResult : NSObject
@property (nonatomic, strong) NSString* vkeyidToken;
@property (nonatomic, strong) NSString* clientKey;
@property (nonatomic, strong) NSString* umidToken;
@property (nonatomic, strong) NSString* vkeyid;
@end
@interface ASSTokenResultOpen: NSObject
@property (nonatomic, strong) NSString* vkeyidToken;
@property (nonatomic, strong) NSString* clientKey;
@property (nonatomic, strong) NSString* vkeyid;
@end
/**
*
*/
@interface APRiskResult: NSObject
@property (nonatomic) int resCode;
@property (nonatomic, strong) NSString* resInfo;
@end

View File

@ -0,0 +1,101 @@
//
// AntSecurityManager.h
// APPSecuritySDK
//
// Created by msq on 2018/8/20.
// Copyright © 2018年 Alipay. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef enum: NSInteger {
//正常
SEC_STORE_OK = 0,
//未找到
SEC_STORE_NOT_FOUND = 10001,
//拷贝
SEC_STORE_CP = 10002,
//内部错误
SEC_STORE_ERR = 10003,
SEC_STORE_PARAM_ERR = 10004,
SEC_STORE_DEGRADE_ERR = 10005,
} SEC_STORE_ERR_CODE;
@interface APSecStoreResult : NSObject
@property (nonatomic, strong) NSString* value;
@property (nonatomic, assign) SEC_STORE_ERR_CODE errCode;
@property (nonatomic, assign) int errCodeDetail;
@end
@interface AntSecurityManager : NSObject
/**
* brief aes_encrypt
* ase
* param data
*
* return
*
* nil
*/
+ (NSString*)securityEncrypt:(NSString*)data;
/**
* brief aes_decrypt
* ase
* param data
*
* return
*
* nil
*/
+ (NSString*)securityDecrypt:(NSString*)data;
/**
* brief wbSign
*
* param data
*
* return
* 44B base64文本
*/
+ (NSString*)wbSign:(NSString*)data;
/**
*
*@param key
*@param value
*@param bizType
*@return 00
*/
+ (int) setSafeStore:(NSString*)key value:(NSString*)value bizType:(NSString*)bizType;
/**
*
*@param key
*@param bizType
*@return APSecStoreResult对象
* SEC_STORE_OK 0
* SEC_STORE_NOT_FOUND 10001
* SEC_STORE_CP 10002
* SEC_STORE_ERR 10003
*/
+ (APSecStoreResult*)getSafeStore:(NSString*)key bizType:(NSString*)bizType;
/**
*
*@param key
*@param bizType
*@return 00
*/
+ (int) deleteSafeStore:(NSString*)key bizType:(NSString*)bizType;
@end

View File

@ -0,0 +1,559 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>APPSecuritySDK-Info.plist</key>
<data>
Po//BA5tM1BE58borc33LNpqXyw=
</data>
<key>Headers/APDID.h</key>
<data>
YaNffM20hdQMiNpnIoEPIHF8o+A=
</data>
<key>Headers/APDeviceColor.h</key>
<data>
sqZwHJLZ8j2L+9pkCmTqWHaRPoo=
</data>
<key>Headers/APDynamic.h</key>
<data>
TBp9H7ZpcLh5hWGFJbObSnR3sSQ=
</data>
<key>Headers/APRiskConfigReportRequest.h</key>
<data>
5vPyFFL4v0DrNrSc35DrU0204M4=
</data>
<key>Headers/APRiskConfigReportResponse.h</key>
<data>
WODwFqptygg++OMfRxg5nJhV1tM=
</data>
<key>Headers/APRiskConfigServiceProtocol.h</key>
<data>
SJJczKTD81Beaeutnk5eh5yYk6s=
</data>
<key>Headers/APRiskFileUploadProtocol.h</key>
<data>
LLqKfgEm/gVHeBO+chBoA32ce6w=
</data>
<key>Headers/APRiskLoggerProtocol.h</key>
<data>
KaoFaIX0tcWToF7p3GQSPdm1fNI=
</data>
<key>Headers/APRiskRPCProtocol.h</key>
<data>
/OdHTVHBuEGxpO5dJbde5mXoV3Q=
</data>
<key>Headers/APRiskRemoteLoggerProtocol.h</key>
<data>
L9Ca3T+cAEzjRZxJTwHTaKytgQs=
</data>
<key>Headers/APRiskReportRequest.h</key>
<data>
p0bXoJMwS+46ZRrgLqdvbEFjAmI=
</data>
<key>Headers/APRiskReportResponse.h</key>
<data>
3pzJU3RgAQBnPg/R2tEjuGJLfvc=
</data>
<key>Headers/APRiskRpcConfiguration.h</key>
<data>
ypma2woz2iRq5pghoIkfFTGVm+8=
</data>
<key>Headers/APRiskSyncHandlerProtocol.h</key>
<data>
Vum7s9ObS3JRBHwQBG4BUdk6SN8=
</data>
<key>Headers/APRiskSyncServiceProtocol.h</key>
<data>
V0kCGcKZFd1gG+a2uuDzVkzj218=
</data>
<key>Headers/APSecRDS.h</key>
<data>
ZKM/B2Jcl/et+wyK8FepeewKCi8=
</data>
<key>Headers/APSecStore.h</key>
<data>
rEuJJetfP9Aj7GLQd5R3IgSZw/c=
</data>
<key>Headers/APSecureSdk.h</key>
<data>
ywtAfrae7i2g9jT6cXJt775tdng=
</data>
<key>Headers/APSign.h</key>
<data>
UxWq8miIIfr3zl7GiKnKdG8PS5s=
</data>
<key>Headers/ASSCommon.h</key>
<data>
lrrlG7ZqNaz4ciXX/i5kj/NnG3A=
</data>
<key>Headers/ASSDynamicManager.h</key>
<data>
4Vk+CxCMPtR9isbOl7FqtE5jZuo=
</data>
<key>Headers/ASSLogger.h</key>
<data>
WvM9Fp3B5ZaI8D+rnHiUcBTxsdk=
</data>
<key>Headers/ASSSecureInfo.h</key>
<data>
C7uQ4VE5uwtF5ws1blMIKLKpfmI=
</data>
<key>Headers/ASSSecureOpenSdk.h</key>
<data>
KmdnMxfQN0cqG23Vuu092URfYCs=
</data>
<key>Headers/ASSSgomInfoOpen.h</key>
<data>
/AhECuNKFdWPVi1Q6oH8rMN66XM=
</data>
<key>Headers/ASSTokenResult.h</key>
<data>
X5xdpK/2lE52tWoVFEg/ZivE9UQ=
</data>
<key>Headers/AntSecurityManager.h</key>
<data>
w5tB5gEPNoVoucc6rkAlUnUhzV4=
</data>
<key>Info.plist</key>
<data>
iJIQ3hx3R9PDehqmni7k6WFuCCI=
</data>
<key>en.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
zmV6UqBSo6r1NOz798vd5O4zTBA=
</data>
<key>optional</key>
<true/>
</dict>
<key>module.map</key>
<data>
nJxa72k41Z2wyhSJqqJgUyYvSgA=
</data>
</dict>
<key>files2</key>
<dict>
<key>APPSecuritySDK-Info.plist</key>
<dict>
<key>hash</key>
<data>
Po//BA5tM1BE58borc33LNpqXyw=
</data>
<key>hash2</key>
<data>
B2XyqSNoreUIQ8uDojzpys2o9qi8XuLbypPrkCR+l8w=
</data>
</dict>
<key>Headers/APDID.h</key>
<dict>
<key>hash</key>
<data>
YaNffM20hdQMiNpnIoEPIHF8o+A=
</data>
<key>hash2</key>
<data>
0nNHe4UB7qz6XFIk/QzRt79MyXYVEOukTfqa3YBJYbY=
</data>
</dict>
<key>Headers/APDeviceColor.h</key>
<dict>
<key>hash</key>
<data>
sqZwHJLZ8j2L+9pkCmTqWHaRPoo=
</data>
<key>hash2</key>
<data>
c/mo/+N/KECjwx+fLMepqE+OqRtyfnn2hHshYhmO9IU=
</data>
</dict>
<key>Headers/APDynamic.h</key>
<dict>
<key>hash</key>
<data>
TBp9H7ZpcLh5hWGFJbObSnR3sSQ=
</data>
<key>hash2</key>
<data>
tUrg2Z43qGA67I0mIGCqRWU6Gc2I9Yx9mn5e2mu9XQU=
</data>
</dict>
<key>Headers/APRiskConfigReportRequest.h</key>
<dict>
<key>hash</key>
<data>
5vPyFFL4v0DrNrSc35DrU0204M4=
</data>
<key>hash2</key>
<data>
OMGRtuphIpujn+dr+tCsCMIUw+KV8WQ2zE+bsdDUVCw=
</data>
</dict>
<key>Headers/APRiskConfigReportResponse.h</key>
<dict>
<key>hash</key>
<data>
WODwFqptygg++OMfRxg5nJhV1tM=
</data>
<key>hash2</key>
<data>
NvTd6RhL7dbwHKHDPiqBqkIc9aWUQLV5SwFFsEorcqg=
</data>
</dict>
<key>Headers/APRiskConfigServiceProtocol.h</key>
<dict>
<key>hash</key>
<data>
SJJczKTD81Beaeutnk5eh5yYk6s=
</data>
<key>hash2</key>
<data>
RyMjAfHvdfRW5n+MDPHVlPZ6VM0Kr/T2A133j9ytwDQ=
</data>
</dict>
<key>Headers/APRiskFileUploadProtocol.h</key>
<dict>
<key>hash</key>
<data>
LLqKfgEm/gVHeBO+chBoA32ce6w=
</data>
<key>hash2</key>
<data>
b2wnReDRJkaR7JxbLjLQXdNsfQbd29tkXtSh/5sjuGo=
</data>
</dict>
<key>Headers/APRiskLoggerProtocol.h</key>
<dict>
<key>hash</key>
<data>
KaoFaIX0tcWToF7p3GQSPdm1fNI=
</data>
<key>hash2</key>
<data>
k2gnCevVtGYZ1cgzxh9FrAlnVnnDzD/3l8lIuDPVuDc=
</data>
</dict>
<key>Headers/APRiskRPCProtocol.h</key>
<dict>
<key>hash</key>
<data>
/OdHTVHBuEGxpO5dJbde5mXoV3Q=
</data>
<key>hash2</key>
<data>
1v7HTHTTRf+k61+lf5L1URwSh/MFv72gdnHxTodGrJA=
</data>
</dict>
<key>Headers/APRiskRemoteLoggerProtocol.h</key>
<dict>
<key>hash</key>
<data>
L9Ca3T+cAEzjRZxJTwHTaKytgQs=
</data>
<key>hash2</key>
<data>
BmYD66C5squNiQNaLya1JrWDDCJ9V8w6C+AVGpr8QF4=
</data>
</dict>
<key>Headers/APRiskReportRequest.h</key>
<dict>
<key>hash</key>
<data>
p0bXoJMwS+46ZRrgLqdvbEFjAmI=
</data>
<key>hash2</key>
<data>
XH1Y2gtlfBaBoOANsxALY7w6fBn81SMhxHKHNVbEFcQ=
</data>
</dict>
<key>Headers/APRiskReportResponse.h</key>
<dict>
<key>hash</key>
<data>
3pzJU3RgAQBnPg/R2tEjuGJLfvc=
</data>
<key>hash2</key>
<data>
PAxPqKwwsKVZNGSWI01WquBx9DZcg0tTsnYe8/UwlAM=
</data>
</dict>
<key>Headers/APRiskRpcConfiguration.h</key>
<dict>
<key>hash</key>
<data>
ypma2woz2iRq5pghoIkfFTGVm+8=
</data>
<key>hash2</key>
<data>
xucoo82E5P13oVpu65VVAqbLK11kcVmtbwRCVlEQI5E=
</data>
</dict>
<key>Headers/APRiskSyncHandlerProtocol.h</key>
<dict>
<key>hash</key>
<data>
Vum7s9ObS3JRBHwQBG4BUdk6SN8=
</data>
<key>hash2</key>
<data>
4wA6oLvZ4U8u4Ff5SSuprJISDBd1X+Zx5MqlV0aGoik=
</data>
</dict>
<key>Headers/APRiskSyncServiceProtocol.h</key>
<dict>
<key>hash</key>
<data>
V0kCGcKZFd1gG+a2uuDzVkzj218=
</data>
<key>hash2</key>
<data>
oSMsgkxXfg8rdX0ZWmUqRmlTF1fgLfINWgGqYcBeMfI=
</data>
</dict>
<key>Headers/APSecRDS.h</key>
<dict>
<key>hash</key>
<data>
ZKM/B2Jcl/et+wyK8FepeewKCi8=
</data>
<key>hash2</key>
<data>
N3/Ych+ScRXiaFWFlsCWXqyGbWdqHhBCHpyp0sQFYPc=
</data>
</dict>
<key>Headers/APSecStore.h</key>
<dict>
<key>hash</key>
<data>
rEuJJetfP9Aj7GLQd5R3IgSZw/c=
</data>
<key>hash2</key>
<data>
R7UHcZTpvTV6HWYJm1bEji6L2ry1wSoCprSTRHEqP0M=
</data>
</dict>
<key>Headers/APSecureSdk.h</key>
<dict>
<key>hash</key>
<data>
ywtAfrae7i2g9jT6cXJt775tdng=
</data>
<key>hash2</key>
<data>
S8aripi9OWRTxz5CBuWeYoSqMhcgLX2GUUT5Ihnwd8o=
</data>
</dict>
<key>Headers/APSign.h</key>
<dict>
<key>hash</key>
<data>
UxWq8miIIfr3zl7GiKnKdG8PS5s=
</data>
<key>hash2</key>
<data>
Te3d2WjOmORK+v6JoH87htyWMIRPvOVgrOi25YxMBWY=
</data>
</dict>
<key>Headers/ASSCommon.h</key>
<dict>
<key>hash</key>
<data>
lrrlG7ZqNaz4ciXX/i5kj/NnG3A=
</data>
<key>hash2</key>
<data>
adc/BhjRDcEbnGdNnfGBsTu2jTNZbT2Csi+oHGqx2oY=
</data>
</dict>
<key>Headers/ASSDynamicManager.h</key>
<dict>
<key>hash</key>
<data>
4Vk+CxCMPtR9isbOl7FqtE5jZuo=
</data>
<key>hash2</key>
<data>
lMtcIcfdivy04/miLJ4swfqpcY6/+5XYbnQMhMiToRw=
</data>
</dict>
<key>Headers/ASSLogger.h</key>
<dict>
<key>hash</key>
<data>
WvM9Fp3B5ZaI8D+rnHiUcBTxsdk=
</data>
<key>hash2</key>
<data>
JNJIdG9385MDYXjB+F1Mj1NXHTx8faIKEft1KjkceeI=
</data>
</dict>
<key>Headers/ASSSecureInfo.h</key>
<dict>
<key>hash</key>
<data>
C7uQ4VE5uwtF5ws1blMIKLKpfmI=
</data>
<key>hash2</key>
<data>
VS1+TQV7GpG7Z2dfhSkfmGi3KjE6cGBUxof1/s+bLPo=
</data>
</dict>
<key>Headers/ASSSecureOpenSdk.h</key>
<dict>
<key>hash</key>
<data>
KmdnMxfQN0cqG23Vuu092URfYCs=
</data>
<key>hash2</key>
<data>
Xq/bbsjzFy4rMCr4osH17Nif1NZQqxmWKvgRHq4THr0=
</data>
</dict>
<key>Headers/ASSSgomInfoOpen.h</key>
<dict>
<key>hash</key>
<data>
/AhECuNKFdWPVi1Q6oH8rMN66XM=
</data>
<key>hash2</key>
<data>
j8Lnl+QqgD+rwdHhl7yEh7Op76XuicUYflL4/LNrFXE=
</data>
</dict>
<key>Headers/ASSTokenResult.h</key>
<dict>
<key>hash</key>
<data>
X5xdpK/2lE52tWoVFEg/ZivE9UQ=
</data>
<key>hash2</key>
<data>
7O9oGJk95fMdxJyn2mOlI1Iqe1vPcmPRvP5Rgj8J9zk=
</data>
</dict>
<key>Headers/AntSecurityManager.h</key>
<dict>
<key>hash</key>
<data>
w5tB5gEPNoVoucc6rkAlUnUhzV4=
</data>
<key>hash2</key>
<data>
5QS2NUN5NsRJ5dYsLrHlgLY/GLXNwZDSsR5gN4lin6k=
</data>
</dict>
<key>en.lproj/InfoPlist.strings</key>
<dict>
<key>hash</key>
<data>
zmV6UqBSo6r1NOz798vd5O4zTBA=
</data>
<key>hash2</key>
<data>
kmHsztpgjvF0JW5f3HdMHm49z1M0CcG8OT1JDQHHE/E=
</data>
<key>optional</key>
<true/>
</dict>
<key>module.map</key>
<dict>
<key>hash</key>
<data>
nJxa72k41Z2wyhSJqqJgUyYvSgA=
</data>
<key>hash2</key>
<data>
XRW9liRaYf8O2c1bSPVShfimQ3Yfcd1SbIKvIE+sv7c=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,9 @@
module APPSecuritySDK {
header "Headers/APSecureSdk.h"
header "Headers/APDID.h"
header "Headers/APDeviceColor.h"
header "Headers/APSign.h"
header "Headers/APDynamic.h"
header "Headers/ASSTokenResult.h"
export *
}

View File

@ -0,0 +1,45 @@
//
// AliyunFaaceAuthFacade.h
// AliyunFaceAuthFacade
//
// Created by 汪澌哲 on 2022/11/21.
// Copyright © 2022 DTF. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <DTFUtility/ZIMResponse.h>
#import <DTFUtility/DTFConstant.h>
NS_ASSUME_NONNULL_BEGIN
@interface AliyunFaceAuthFacade : NSObject
+ (void)init;
+ (void)initSDK;
/* IPV6的初始化接口 只有你的网络环境强制要求是IPV6的时候才调用initIPv6。
*/
+ (void)initIPv6;
+ (NSString *)getVersion;
+ (NSString *)getNFCVersion;
+ (void)preload:(NSDictionary *)param completion:(void (^)(BOOL success))completion;
+ (NSDictionary *)getMetaInfo;
+ (NSDictionary *)getNFCMetaInfo;
+ (void)verifyWith:(NSString *)zimId
extParams:(NSDictionary *)params
onCompletion:(void (^)(ZIMResponse *response))callback;
+ (void)nfcVerifyWith:(NSString *)zimId
extParams:(NSDictionary *)params
onCompletion:(void (^)(ZIMResponse *response))callback;
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,32 @@
//
// PoPGatewayNetwork.h
// ZimDemo
//
// Created by sanyuan.he on 2020/1/20.
// Copyright © 2020 com.. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface PoPGatewayNetwork : NSObject
@property(nonatomic, assign) NSTimeInterval timeoutForInit;
@property(nonatomic, assign) NSTimeInterval timeoutForVerify;
-(void)bizSendContent:(NSDictionary*)serviceParameters completionBlock:(void (^) (NSError *error, NSURLResponse *response, NSData *data))completionBlock;
-(void)verifySendContent:(NSDictionary*)serviceParameters completionBlock:(void (^) (NSError *error, NSURLResponse *response, NSData *data))completionBlock;
-(void)sendInitFaceVerifyContent:(NSDictionary*)serviceParameters keyName:(NSString*)name initKey:(NSString *)initKey initSimpleValue:(NSString *)initSimpleValue completionBlock:(void (^) (NSError *error, NSURLResponse *response, NSData *data))completionBlock;
-(void)sendOCRContent:(NSDictionary*)serviceParameters completionBlock:(void (^) (NSError *error, NSURLResponse *response, NSData *data))completionBlock;
-(void)sendLogContent:(NSDictionary*)serviceParameters extraHeader:(NSDictionary *)header completionBlock:(void (^) (NSError *error, NSURLResponse *response, NSData *data))completionBlock;
@end
NS_ASSUME_NONNULL_END

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Some files were not shown because too many files have changed in this diff Show More