Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
OzLivenessSDK.setApiConnection(OzConnection.fromServiceToken(host, token))OzLivenessSDK.INSTANCE.setApiConnection(
OzConnection.Companion
OzLivenessSDK.setApiConnection(
OzConnection.fromCredentials(host, username, password),
statusListener(
{ token -> /* токен */ },
{ ex -> /* ошибка */ }
)
)OzLivenessSDK.INSTANCE.setApiConnection(
OzConnection.Companion.fromCredentials(host, username, password),
new StatusListener<String>() {
@Override
public void onStatusChanged(@Nullable String s) {}
@Override
public void onSuccess(String token) { /* токен */ }
@Override
public void onError(@NonNull OzException e) { /* ошибка */
}
);OzLivenessSDK.setEventsConnection(
OzConnection.fromCredentials(
"https://echo.cdn.ozforensics.com/",
"<[email protected]>",
"your_telemetry_password"
)
)OzLivenessSDK.setEventsConnection(
OzConnection.fromCredentials(
"https://tm.ozforensics.com/",
"<[email protected]>",
"your_telemetry_password"
)
);OzLivenessSDK.setApiConnection(null)OzLivenessSDK.INSTANCE.setApiConnection(null, null);val isLoggedIn = OzLivenessSDK.isLoggedInboolean isLoggedIn = OzLivenessSDK.INSTANCE.isLoggedIn();OzLivenessSDK.logout()OzLivenessSDK.INSTANCE.logout();allprojects {
repositories {
maven { url "https://ozforensics.jfrog.io/artifactory/main" }
}
}dependencies {
implementation 'com.ozforensics.liveness:sdk:VERSION'
}dependencies {
implementation 'com.ozforensics.liveness:full:VERSION'
}android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}LicenseSource.LicenseAssetId должен содержать путь к файлу forensics.license, расположенному в проекте в папке res/raw.OzLivenessSDK.init(context,
listOf(
LicenseSource.LicenseAssetId(R.raw.your_license_name),
OzLivenessSDK.INSTANCE.getConfig().setBaseURL(BASE_URL);
OzLivenessSDK.config.customization = UICustomization(
// параметры настройки верхней панели
toolbarCustomization =
OzLivenessSDK.INSTANCE.getConfig().setCustomization(new UICustomization(
// параметры настройки верхней панели
new ToolbarCustomization(
R.drawable.ib_close,
new Color.ColorHex("#FFFFFF"),
new Color.ColorHex("#000000"),
100, // непрозрачность фона верхней панели (в %)
),
// параметры настройки текста подсказки
new CenterHintCustomization(
70, // положение по вертикали (в %)
),
// параметры настройки анимации подсказки
new HintAnimation(
hideAnimation = true
),
// параметры настройки рамки вокруг лица
new FaceFrameCustomization(
new Color.ColorHex("#EC574B"),
new Color.ColorHex("#00FF00"),
6, // ширина линии рамки (в dp)
),
// параметры настройки фона за рамкой
new BackgroundCustomization(
100 // непрозрачность фона (в %)
),
)
);Security.insertProviderAt(org.spongycastle.jce.provider.BouncyCastleProvider(), 1)openssl genpkey -algorithm RSA -outform DER -out privateKey.der -pkeyopt rsa_keygen_bits:2048
# for MacOS
base64 -i privateKey.der -o privateKey.txt
# for Linux
base64 -w 0 privateKey.der > privateKey.txtopenssl rsa -pubout -in privateKey.der -out publicKey.pubfun init(
context: Context,
licenseSources: List<LicenseSource>,
masterLicenseSignature: String,
statusListener: StatusListener<LicensePayload>? = null,
)private fun getMasterSignature(): String {
Security.insertProviderAt(org.spongycastle.jce.provider.BouncyCastleProvider(), 1)
val privateKeyBase64String = "содержимое файла privateKey.txt"
val sig = Signature.getInstance("SHA512WithRSA")
val keySpec = PKCS8EncodedKeySpec(Base64.decode(privateKeyBase64String, Base64.DEFAULT))
val keyFactory = KeyFactory.getInstance("RSA")
sig.initSign(keyFactory.generatePrivate(keySpec))
sig.update(packageName.toByteArray(Charsets.UTF_8))
return Base64.encodeToString(sig.sign(), Base64.DEFAULT).replace("\n", "")
}KohJ1rsUgLMzZHpHGAZDK2efHPnMj9tw9VIedBLvyZt0B2JH3SWfJLJ8X6JNz3bR2sce6PR2wdEIFln0r1pUnD+6WBCgexKIHAv7esiRVQZoZOEANDBwDvJVv73H/0qL2LGlhxKzbBg5CxGPClTBQdLo1P+7HsTXHHG/Hf6m3rdu1OUeGXVPoaS2NzE8kiRH6gb8Nhr7PBLTUeMKTeLoiX13hvwjOqhV1ANhgS97T4hC2+ZilZt4RektgRY/+fGmWnOqErNeYuz/WSInfaJS0YEWhJW3gXKPjdCzNGIBIqbxaFSjU46wu/alh2+tBRFnrYFl1dRQVcTlW0VwwZHcug==analysisCancelable = new AnalysisRequest.Builder()
//mediaToAnalyze – массив объектов OzAbstractMedia
analysisCancelable = AnalysisRequest.Builder()
// mediaToAnalyze – массив объектов OzAbstractMedia
.addAnalysis(Analysis(Analysis.Type.QUALITY, Analysis.Mode.SERVER_BASED, mediaToAnalyze))// ON_DEVICE для анализа на устройстве
.build()
//запуск анализов и установка обработчиков
.run(object : AnalysisRequest.AnalysisListener {
override fun onStatusChange(status: AnalysisRequest.AnalysisStatus) { handleStatus(status) //или ваш обработчик шагов сценария
}
override fun onSuccess(result: RequestResult) {
handleResults(result) //или ваш обработчик результата
}
override fun onError(error: OzException) { handleError(error) //или ваш обработчик ошибок
}
})val intent = OzLivenessSDK.createStartIntent(listOf(OzAction.Smile, OzAction.Blank))
startActivityForResult(intent, REQUEST_CODE)List<OzAction> actions = Arrays.asList(
.addFolderMeta(
mapOf(
"key1" to "value1",
"key2" to "value2"
)
).addFolderMeta(Collections.singletonMap("key", "value")) mapOf("extract_best_shot" to true) val file = File(context.filesDir, "media.mp4") // замените context.filesDir на context.getExternalFilesDir(null) для внешнего хранилища смартфона
val media = OzAbsractMedia.OzVideo(OzMediaTag.VideoSelfieSmile, file.absolutePath) .setFolderId(folderId)childFragmentManager.beginTransaction()
.replace(R.id.content, LivenessFragment.create(actions))
.commit()
// подписка на результат Fragment
childFragmentManager.setFragmentResultListener(OzLivenessSDK.Extra.REQUEST_CODE, this) { _, result ->
when (result.getInt(OzLivenessSDK.Extra.EXTRA_RESULT_CODE)) {
OzLivenessResultCode.SUCCESS -> { /* запуск анализа */ }
else -> { /* вывод ошибки */ }
}
}getSupportFragmentManager().beginTransaction()
.replace(R.id.content, LivenessFragment.Companion.create(actions, null, null, false))
.addToBackStack(null)
.commit();
// подписка на результат Fragment
getSupportFragmentManager().setFragmentResultListener(OzLivenessSDK.Extra.REQUEST_CODE, this, (requestKey, result)
switch (result.getInt(OzLivenessSDK.Extra.EXTRA_RESULT_CODE)) {
case OzLivenessResultCode.SUCCESS: {/* запуск анализа */}
default: {/* вывод ошибки */}
}
});override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE) {
sdkMediaResult = OzLivenessSDK.getResultFromIntent(data)
sdkErrorString = OzLivenessSDK.getErrorFromIntent(data)
}
}@Override
protected void onActivityResult(int requestCode, int resultCode, @androidx.annotation.Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
List<OzAbstractMedia> sdkMediaResult = OzLivenessSDK.INSTANCE.getResultFromIntent(data);
String sdkErrorString = OzLivenessSDK.INSTANCE.getErrorFromIntent(data);
}when (resultCode) {
Activity.RESULT_CANCELED -> *USER CLOSED THE SCREEN*
OzLivenessResultCode.SUCCESS -> {
val sdkMediaResult = OzLivenessSDK.getResultFromIntent(data)
*SUCCESS*
}
else -> {
val errorMessage = OzLivenessSDK.getErrorFromIntent(data)
*FAILURE*
}
}OzLivenessSDK.config.customization = UICustomization(
// параметры настройки верхней панели
toolbarCustomization = ToolbarCustomization(
closeIconRes = R.drawable.ib_close,
closeIconTint = Color.ColorRes(R.color.white),
titleTextFont = R.font.roboto,
titleTextSize = 18,
titleTextAlpha = 100,
titleTextColor = Color.ColorRes(R.color.white),
backgroundColor = Color.ColorRes(R.color.black),
backgroundAlpha = 60,
isTitleCentered = true,
title = "Analysis",
),
// параметры настройки текста подсказки
centerHintCustomization = CenterHintCustomization(
textFont = R.font.roboto,
textColor = Color.ColorRes(R.color.text_color),
textSize = 20,
verticalPosition = 50,
textStyle = R.style.Sdk_Text_Primary,
backgroundColor = Color.ColorRes(R.color.color_surface),
backgroundOpacity = 56,
backgroundCornerRadius = 14,
textAlpha = 100,
),
// параметры настройки анимации подсказки
hintAnimation = HintAnimation(
hintGradientColor = Color.ColorRes(R.color.red),
hintGradientOpacity = 80,
animationIconSize = 120,
hideAnimation = false,
),
// параметры настройки рамки вокруг лица
faceFrameCustomization = FaceFrameCustomization(
geometryType = GeometryType.Rectangle(10), // 10 – радиус скругления углов
strokeDefaultColor = Color.ColorRes(R.color.error_red),
strokeFaceInFrameColor = Color.ColorRes(R.color.success_green),
strokeAlpha = 100,
strokeWidth = 5,
strokePadding = 3,
),
// параметры настройки фона за рамкой
backgroundCustomization = BackgroundCustomization(
backgroundColor = Color.ColorRes(R.color.black),
backgroundAlpha = 60,
),
// параметры настройки текста версии SDK
versionTextCustomization = VersionTextCustomization(
textFont = R.font.roboto,
textSize = 12,
textColor = Color.ColorRes(R.color.white),
textAlpha = 100,
),
// параметры настройки дополнительной защиты от мошенничества
antiScamCustomization = AntiScamCustomization(
textMessage = "",
textFont = R.font.roboto,
textSize = 14,
textColor = Color.ColorRes(R.color.text_color),
textAlpha = 100,
backgroundColor = Color.ColorRes(R.color.color_surface),
backgroundOpacity = 100,
cornerRadius = 20,
flashColor = Color.ColorRes(R.color.green),
),
// параметры настройки логотипа,
// если лицензия предусматривает возможность его изменения
logoCustomization = LogoCustomization(
image = Image.Drawable(R.drawable.ic_logo),
size = Size(176, 64),
verticalPosition = 100,
horizontalPosition = 50,
)
)OzLivenessSDK.INSTANCE.getConfig().setCustomization(new UICustomization(
// параметры настройки верхней панели
new ToolbarCustomization(
R.drawable.ib_close,
new Color.ColorRes(R.color.white),
R.style.Sdk_Text_Primary,
new Color.ColorRes(R.color.white),
R.font.roboto,
Typeface.NORMAL,
100, // непрозрачность текста на верхней панели (в %)
18, // размер текста на верхней панели (в sp)
new Color.ColorRes(R.color.black),
60, // непрозрачность фона верхней панели (в %)
"Liveness", // текст на верхней панели
true // центрировать текст на верхней панели
),
// параметры настройки текста подсказки
new CenterHintCustomization(
50, // положение по вертикали (в %)
R.style.Sdk_Text_Primary,
R.drawable.bg_center_hint_badge,
new Color.ColorRes(R.color.color_surface),
100, // непрозрачность фона
14, // угловой радиус подложки
100 // непрозрачность текста
),
// параметры настройки анимации подсказки
new HintAnimation(
new Color.ColorRes(R.color.red), // цвет градиента
80, // непрозрачность цвета градиента (в %)
120, // размер квадрата, в который вписан значок анимации
false // скрывать ли анимацию
),
// параметры настройки рамки вокруг лица
new FaceFrameCustomization( GeometryType.RECTANGLE,
10, // угловой радиус для прямоугольника
new Color.ColorRes(R.color.error_red),
new Color.ColorRes(R.color.success_green),
100, // непрозрачность рамки (в %)
5, // ширина линии рамки (в dp)
3 // отступ от рамки до области для позиционирования лица (в dp)
),
// параметры настройки фона за рамкой
new BackgroundCustomization(
new Color.ColorRes(R.color.black),
60 // непрозрачность фона (в %)
),
// параметры настройки текста версии SDK
new VersionTextCustomization(
R.style.Sdk_Text_Primary,
R.font.roboto,
12, // размер шрифта текста версии (в sp)
new Color.ColorRes(R.color.white),
100 // непрозрачность текста версии (в %)
),
// параметры настройки дополнительной защиты от мошенничества
new AntiScamCustomization(
"Recording .. ",
R.font.roboto,
12,
new Color.ColorRes(R.color.text_color),
100,
R.style.Sdk_Text_Primary,
new Color.ColorRes(R.color.color_surface),
100,
14,
new Color.ColorRes(R.color.green)
),
// параметры настройки логотипа
new LogoCustomization(
new Image.Drawable(R.drawable.ic_logo),
new Size(176, 64),
100,
50
)
)
);OzLivenessSDK.config.localizationCode = OzLivenessSDK.OzLocalizationCode.RUOzLivenessSDK.INSTANCE.getConfig().setLocalizationCode(OzLivenessSDK.OzLocalizationCode.RU);Журнал изменений для Android.
AnalysisRequest.Type.HYBRID в com.ozforensics.liveness.sdk.analysis.entity implementation 'com.ozforensics.liveness:on-device:6.3.4'val mediaList: List<OzAbstractMedia> = ...
val biometryAnalysisResult: OzAnalysisResult = OzLivenessSDK.runOnDeviceBiometryAnalysis(mediaList)
val livenessAnalysisResult: OzAnalysisResult = OzLivenessSDK.runOnDeviceLivenessAnalysis(mediaList)