
Аутентификация через биометрию в Kotlin Multiplatform или Koncierge
Scogun 5 минут назад Аутентификация через биометрию в Kotlin Multiplatform или Koncierge Средний 8 мин 2 Kotlin * Android * Windows * macOS * Java * Кейс ВступлениеНаконец-то неплохо продвинувшись в написании своего...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: Scogun 5 минут назад Аутентификация через биометрию в Kotlin Multiplatform или Koncierge Средний 8 мин 2 Kotlin * Android * Windows * macOS * Java * Кейс ВступлениеНаконец-то неплохо продвинувшись в написании своего мультиплатформенного приложения Modern Money мне понадобилась аутентификация для Kotlin Multiplatform. Хотелось иметь один API для PIN-кода и биометрии, а под капотом использовать Android Biometric Prompt, Windows Hello, Touch ID. Так появился Koncierge — набор KMP-модулей biometric, auth и auth-composeКазалось бы, задача довольно стандартная: объявить expect-класс и написать несколько actual-реализаций.
На Android это примерно так и получилось. А вот Windows Hello, JVM-модуль и публикация всех артефактов заставили немного разобраться в том, как Kotlin Multiplatform работает с нативным кодом. Что хотелось получитьНа уровне общего кода API должен был выглядеть максимально просто:expect class Дальше каждая платформа сама решает, каким способом показать запрос на аутентификацию.
Технические детали
when (val result = Koncierge(). authenticate("Подтвердите личность { BiometricResults. AuthenticationSuccessful -> { // Можно открывать защищенный экран.
AuthenticationCancelled -> { // Пользователь отменил запрос. } else -> { // Нет оборудования, не настроена биометрия или произошла ошибка. } }Самым интересным местом оказался Windows.
Windows HelloСначала я пытался найти простой способ вызвать Windows Hello прямо из Kotlin/Native. Но API Windows построен вокруг WinRT, COM-интерфейсов, фабрик активации и асинхронных операций. Даже простой вызов проверки доступности быстро перестает быть простым.
Отраслевые последствия
CMake, потом GradleПервую рабочую версию C-моста я собирал через CMake. Это было логично: отдельный CMakeLists. txt, add_library, список системных библиотек — и через несколько команд получался libwindows_hello.
add_library(windows_hello STATIC src/windows_hello. c ) target_include_directories(windows_hello PUBLIC include) target_link_libraries(windows_hello PRIVATE runtimeobject user32 )На этом этапе все работало, но в проекте появились две системы сборки. Kotlin/Native ожидал статическую библиотеку в определенной директории, а CMake отдельно должен был сконфигурировать проект, выбрать генератор и собрать нужную конфигурацию.
Для локального эксперимента это терпимо. Для Gradle-задач, CI и публикации библиотека уже начинала жить своей жизнью. Поэтому я решил отказаться от отдельного CMake-шага и перенести сборку C-кода в Gradle.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





