Flutter 앱에 본인 인증 추가하기 (Didit SDK) (KO)
Didit SDK를 이용해 Flutter 앱에 본인 인증을 추가하는 개발자 가이드: 네이티브 설정, 백엔드 세션 생성, Dart 결과 처리, 유형화된 오류, 웹훅, 테스트, 보안 및 릴리스 운영.

본인 인증을 위한 Flutter SDK 통합은 모바일 앱이 단기 세션 토큰으로 네이티브 캡처 흐름을 시작하는 동안 영구 자격 증명과 최종 승인을 백엔드에 유지해야 합니다. Didit Flutter SDK는 네이티브 iOS 및 Android 인증 SDK 위에 하나의 Dart API를 노출하여, 작업 완료, 취소 또는 실패 결과를 앱으로 반환합니다. 최종 결정은 여전히 백엔드 웹훅 또는 검색 흐름에 속합니다.
이 가이드는 현재 로컬 SDK 소스 및 테스트에 대해 검증된 Dart 메서드와 결과 유형만 사용합니다. 네이티브 종속성 세부 정보는 릴리스마다 변경될 수 있으므로, 플랫폼 구성은 버전에 민감한 Podfile 또는 Gradle 블록을 복사하는 대신 책임별로 설명하고 표준 SDK 가이드에 연결됩니다.
주요 내용
- 백엔드에서 프로덕션 세션을 생성합니다. API 키를 장치에서 제거하고 SDK에 필요한 세션 토큰만 전송하십시오.
- 권한 부여가 아닌 사용자 경험을 위해 유형화된 Dart 결과를 사용하십시오.
VerificationCompleted는 SDK 흐름이 종료되었음을 의미합니다. 표시를 위해 상태를 검사하고 권한 있는 백엔드 결정을 기다리십시오. - 취소, 유형화된 실패 및 예상치 못한 플랫폼 오류를 별도로 처리하십시오. 이들은 다른 복구 및 분석이 필요합니다.
- 네이티브 설정을 릴리스 인프라로 취급하십시오. iOS 개인 정보 보호 키, 근거리 무선 통신(NFC) 권한, 배포 대상, Android 종속성, 패키징 및 권한은 실제 장치에서 테스트해야 합니다.
- 전체 수명 주기를 설계하십시오. 세션 생성, 앱 핸드오프, 캡처, 웹훅 검증, 멱등 상태 변경, 검토, 재시도 및 관찰 가능성은 하나의 통합을 형성합니다.
Didit Flutter SDK의 기능
didit_sdk 패키지는 공유 Dart 인터페이스 뒤에 네이티브 iOS 및 Android SDK를 래핑합니다. 사용자 인터페이스를 네이티브 전체 화면 흐름으로 시작하고 사용자가 완료, 취소하거나 오류가 발생하면 반환합니다.
SDK는 신분증 확인, 라이브니스 감지 및 기타 구성된 확인으로 워크플로를 시작할 수 있습니다. 워크플로는 어떤 단계가 나타날지 결정하며, Flutter 호출은 이를 하드코딩하지 않습니다.
수명 주기와 관련된 공개 Dart 인터페이스는 다음과 같습니다.
DiditSdk.startVerification(token, config: ...)
DiditSdk.startVerificationWithWorkflow(workflowId, vendorData: ..., config: ...)
프로덕션 환경에서는 백엔드에서 생성된 토큰으로 startVerification을 선호합니다. 워크플로 ID 메서드는 더 간단하지만 고급 매개변수에 대한 백엔드 제어가 적습니다.
아키텍처: 백엔드, Flutter 앱, SDK 및 웹훅
프로덕션 흐름에는 네 가지 신뢰 경계가 있습니다.
| 구성 요소 | 소유 | 소유 금지 |
|---|---|---|
| 귀하의 백엔드 | API 키, 워크플로 선택, 고객 참조, 세션 생성, 최종 고객 상태 | 카메라 인터페이스 |
| Flutter 앱 | 핸드오프 요청, 로딩 및 복구 UI, SDK 실행, 로컬 분석 | 영구 API 키 또는 최종 승인 |
| Didit Flutter SDK | 네이티브 캡처 및 구성된 인증 흐름 | 귀하의 제품 권한 결정 |
| 웹훅/검색 작업자 | 인증된 결과 수집, 중복 제거, 조정 | 검증되지 않은 클라이언트 가정 |
순서는 다음과 같습니다.
- 로그인된 Flutter 앱이 귀하의 백엔드에 인증 시작을 요청합니다.
- 귀하의 백엔드는 의도된 워크플로와 안정적인 내부 고객 참조를 사용하여 인증 세션을 생성합니다.
- 백엔드는 범위가 지정된
session_token을 앱에 반환합니다. - 앱은 해당 토큰을
DiditSdk.startVerification에 전달합니다. - SDK는 네이티브 흐름을 제시하고 즉각적인 사용자 경험을 위한 유형화된 결과를 반환합니다.
- 귀하의 백엔드는 결과 이벤트를 수신 및 확인하고, 표준 상태를 조정하며, 귀하의 정책에 따라 고객을 업데이트합니다.
- 앱은 액세스를 허용하거나 최종 승인을 주장하기 전에 귀하의 백엔드 고객 상태를 읽습니다.
이 아키텍처는 장치 내 성공 화면을 신뢰하지 않습니다.
서버 측 계약 및 이벤트 경계에 대해서는 ID 인증 API 통합 가이드를 참조하십시오.
패키지 설치
오래될 수 있는 버전을 복사하는 대신 패키지 명령을 사용하십시오.
flutter pub add didit_sdk
그런 다음 공개 라이브러리를 가져옵니다.
import 'package:didit_sdk/sdk_flutter.dart';
업그레이드하기 전에 변경 로그와 공식 Flutter SDK 문서를 읽으십시오. 선언된 플랫폼 요구 사항을 앱 및 CI 이미지와 비교하여 확인하십시오.
네이티브 종속성에 대한 Flutter 릴리스 지침을 따르십시오. 임의의 버전을 혼합하면 비호환성이 발생할 수 있습니다.
iOS 및 Android 구성
iOS 책임
ID 캡처는 보호된 하드웨어 및 데이터를 사용할 수 있습니다. 구성된 워크플로 및 SDK 변형에 따라 iOS 설정에는 다음이 필요할 수 있습니다.
- 적절한 배포 대상;
- 카메라 및 마이크 사용 설명;
- 업로드가 허용되는 경우 사진 라이브러리 사용 설명;
- 칩 읽기가 활성화된 경우 NFC 사용 설명 및 권한;
- 호환되는 CocoaPods 구성;
- NFC 사용과 일치하는 서명 기능 및 프로비저닝;
- 앱별 글꼴이 구성된 경우 등록된 사용자 정의 글꼴.
개인 정보 보호 목적 문자열이 누락되면 iOS 앱이 종료될 수 있습니다. 실제 장치에서 정확한 워크플로를 테스트하십시오.
NFC 지원은 최소 배포 대상을 높이거나 네이티브 종속성을 추가할 수 있습니다. 워크플로와 일치하는 SDK 변형을 선택하고 Podfile 구성에 대한 현재 문서를 따르십시오.
Android 책임
Android에서는 다음을 확인하십시오.
- 최소 SDK 및 Java 요구 사항;
- 플러그인에 의해 추가된 저장소 및 종속성;
- 카메라, 네트워크 및 NFC 매니페스트 항목;
- 런타임 카메라 권한 동작;
- Gradle 및 Kotlin 호환성;
- 네이티브 또는 암호화 종속성에 대한 패키징 규칙;
all,core,autodetection또는nfcSDK 변형;- 릴리스 빌드 축소 및 리소스 동작.
귀하의 제품은 여전히 권한 컨텍스트, 거부 복구, 접근성 및 지원 지침이 필요합니다. 거부, 중단, 백그라운드 전환, 회전 및 프로세스 재구성을 테스트하십시오.
백엔드에서 세션 생성
귀하의 백엔드는 서버 측 API 키를 사용하여 세션 API를 호출해야 합니다. 각 세션을 다음 사항과 연결하십시오.
- 귀하의 안정적인 고객 식별자;
- 선택한 워크플로;
- 환경;
- 해당하는 경우 콜백 또는 반환 동작;
- 정책에서 사용하는 경우 필요한 로케일 또는 연락처 정보;
- 내부 상관 관계 및 정책 메타데이터.
Didit API 키를 Dart, 앱 자산, 읽기 가능한 원격 구성 또는 모바일 요청에 절대로 포함하지 마십시오.
세션 토큰과 최소 시작 상태만 반환합니다. 이를 분석, 충돌 보고서, 로그, 클립보드 사용 및 장기 저장소에서 제외하십시오.
시작 요청을 멱등하게 만드세요.
고객은 두 번 탭할 수 있고, 백엔드가 세션을 생성한 후 연결이 끊어질 수 있으며, 시도가 활성화된 동안 화면을 다시 열 수 있습니다. 안정적인 요청 식별자와 백엔드 로직을 사용하여 연결되지 않은 중복을 생성하는 대신 기존의 적절한 시도를 반환하십시오.
앱의 로딩 버튼은 명백한 반복 탭을 차단해야 하지만, 클라이언트가 재시도하고 프로세스가 다시 시작되므로 서버 측 멱등성은 여전히 필요합니다.
Dart에서 인증 시작
이 완전한 Dart 예제는 SDK 가져오기, 메서드, 결과 클래스, 세션 필드, 상태 열거형 및 패키지 소스에서 확인된 오류 필드만 사용합니다.
import 'package:didit_sdk/sdk_flutter.dart';
Future<void> runIdentityVerification(String sessionToken) async {
try {
final result = await DiditSdk.startVerification(
sessionToken,
config: const DiditConfig(
loggingEnabled: false,
),
);
switch (result) {
case VerificationCompleted(:final session):
switch (session.status) {
case VerificationStatus.approved:
print('Flow completed with approved client status.');
case VerificationStatus.pending:
print('Flow completed and still needs a backend decision.');
case VerificationStatus.declined:
print('Flow completed with declined client status.');
}
print('Session ID: ${session.sessionId}');
return;
case VerificationCancelled():
print('The user cancelled the verification flow.');
return;
case VerificationFailed(:final error):
print('SDK error: ${error.type.name}: ${error.message}');
return;
}
} catch (error, stackTrace) {
print('Unexpected platform error: $error');
print(stackTrace);
}
}
이 예제는 유형 구조를 보여줍니다. 실제 앱은 화면 상태를 업데이트하고 백엔드 상태를 새로 고쳐야 하며, 이 기능만으로 계정을 잠금 해제해서는 안 됩니다.
VerificationCompleted가 항상 승인이 아닌 이유
VerificationCompleted에는 SessionData가 포함되어 있으며, 그 status는 다음 중 하나입니다.
VerificationStatus.approved;VerificationStatus.pending;VerificationStatus.declined.
SDK 흐름이 완료되었지만 인증은 여전히 보류 중이거나 거부될 수 있습니다. 사람의 검토 또는 비동기 확인을 통해 앱 호출이 반환된 후 백엔드 상태가 변경될 수도 있습니다. 백엔드가 정책 결과를 확인할 때까지 로컬 UI 상태를 "신분 승인"이 아닌 "흐름 완료"로 명명하십시오.
Flutter 초기화 호출이 없습니다.
검증된 공개 Flutter 인터페이스는 별도의 초기화 메서드를 노출하지 않습니다. Android 네이티브 초기화 패턴을 Dart에 복사하지 마십시오. Android가 Flutter 결과를 통해 notInitialized를 보고하면 이를 통합 또는 네이티브 브리지 문제로 간주하고 패키지 설정을 검사하십시오.
유형화된 오류 및 복구 처리
SDK의 검증된 오류 유형은 다음과 같습니다.
| 오류 유형 | 앱 정책에 대한 의미 | 안전한 복구 |
|---|---|---|
sessionExpired | 토큰이 더 이상 의도된 세션을 시작할 수 없습니다. | 백엔드에 새 유효 세션 요청 |
networkError | 네이티브 흐름이 네트워크 작업을 완료할 수 없습니다. | 컨텍스트 유지 및 제한된 재시도 제공 |
cameraAccessDenied | 필수 카메라 액세스를 사용할 수 없습니다. | 필요한 이유 설명 및 설정 또는 대체 경로 안내 |
notInitialized | Android 네이티브 통합 또는 브리지가 준비되지 않았습니다. | 릴리스 컨텍스트 로깅 및 설정 조사 |
apiError | SDK 또는 서비스가 API 수준 오류를 반환했습니다. | 안전할 때만 재시도; 백엔드 상태 조정 |
retryBlocked | 흐름이 다른 자동 시도를 방지합니다. | 루프 중지 및 백엔드 또는 지원 정책 따르기 |
unknown | 네이티브 오류가 알려진 Dart 유형에 매핑되지 않았습니다. | 안전한 대체 및 상관 관계 데이터 유지 |
네이티브 플랫폼은 다른 세부 정보를 노출할 수 있습니다. unknown 경로를 유지하십시오.
고객 결과와 오류 분리
네트워크 장애는 거부가 아니며, 카메라 거부는 사기가 아니며, 취소는 신분 확인 실패가 아닙니다. 다음 범주를 별도로 유지하십시오.
- 사용자 메시지;
- 재시도 규칙;
- 제품 액세스;
- 지원 도구;
- 분석;
- 사기 및 전환 보고.
제한된 재시도
백엔드가 기존 세션을 계속할 수 있는지 또는 새 세션이 필요한지 결정하도록 하십시오. 만료되거나 차단된 토큰으로 SDK를 반복적으로 호출하는 무제한 루프를 피하십시오. 토큰 또는 신분 증거를 로깅하지 않고 시도 횟수와 원인을 추적하십시오.
백엔드 이벤트를 진실의 원천으로 사용
SDK는 간결한 클라이언트 결과를 반환합니다. 전체 증거 및 최종 상태는 서버 측 통합을 통해 도착합니다. 귀하의 웹훅 핸들러는 다음을 수행해야 합니다.
- 문서화된 서명 체계에 필요한 형식으로 원시 요청을 수신합니다.
- 이벤트를 인증하고 신선도를 검증합니다.
- 이벤트 식별자를 중복 제거합니다.
- 예상 세션 및 고객에게 매핑합니다.
- 이전 이벤트가 나중의 터미널 상태를 덮어쓰는 것을 방지합니다.
- 조정이 필요한 경우 표준 세션 상태를 검색합니다.
- 귀하의 정책을 적용하고 이유를 유지합니다.
- 제공업체의 응답 예산 내에서 반환합니다.
- 느린 다운스트림 작업을 비동기적으로 처리합니다.
최소 한 번의 전달을 가정하십시오. 중복 및 순서가 뒤바뀐 이벤트는 일반적인 분산 시스템 동작입니다. 제공업체 이벤트와 내부 전환을 별도로 저장하여 감사를 통해 둘 다 재구성할 수 있도록 하십시오.
앱은 자체 제품 상태에 대해서만 백엔드를 폴링하거나 정상적인 실시간 채널을 사용해야 합니다. 최종 기록을 직접 검색하기 위해 제공업체 API 키를 노출해서는 안 됩니다.
탄력적인 Flutter 화면 수명 주기 구축
명시적 로컬 상태 모델링
인증 화면은 다음을 사용할 수 있습니다.
- 유휴;
- 세션 요청 중;
- SDK 시작 중;
- SDK 흐름 열림;
- 백엔드 결정 조정 중;
- 검토 대기 중;
- 승인됨;
- 거부됨;
- 복구 가능한 오류;
- 취소됨.
안전한 것만 유지하십시오. 프로세스 종료 후, 활성 또는 완료된 세션이 이미 존재하는지 백엔드에 문의하십시오. 다른 시도를 생성할지 여부를 결정하기 위해 메모리 내 부울에 의존하지 마십시오.
위젯 수명 주기 존중
비동기 호출 후, setState, 대화 상자 또는 탐색 전에 mounted를 확인하십시오. 일시적인 UI 외부에 비즈니스 상태를 유지하십시오.
백그라운드 전환 및 취소 처리
앱 전환, 화면 잠금, 탐색 및 프로세스 종료를 테스트하십시오. 재개, 다시 시작 및 조정 동작을 정의하십시오.
권한 복구 설계
카메라 또는 NFC 필요성을 설명하십시오. 영구적인 거부 후, 설정 안내 또는 접근 가능한 대체 경로를 표시하십시오.
정책 누출 없는 구성
오프라인으로 확인된 Flutter DiditConfig 인터페이스는 languageCode, fontFamily, loggingEnabled, showCloseButton, showExitConfirmation, closeOnComplete, defaultDocumentCamera, defaultLivenessCamera, showDocumentCameraSwitchButton 및 showLivenessCameraSwitchButton을 노출합니다. 카메라 필드는 CameraLens.front 또는 CameraLens.back을 사용합니다. 모든 옵션은 Dart에서 유형화되어 네이티브 SDK에 매핑됩니다.
세 가지 규칙을 지키십시오.
- 상세 로깅은 개발 또는 제어된 진단 빌드에만 활성화합니다.
- UI 구성을 백엔드 정책의 대체물로 사용하지 마십시오.
- 요청된 렌즈 또는 자산을 사용할 수 없는 경우의 대체 동작을 포함하여 지원되는 각 언어, 사용자 정의 글꼴, 닫기 동작 및 카메라 정책을 두 플랫폼 모두에서 테스트하십시오.
워크플로 구성 및 제품 브랜딩은 모바일 기능 플래그의 미로가 아닌 콘솔 또는 백엔드 관리 워크플로에 속합니다. 이는 iOS, Android, 웹 및 지원 보기를 정렬되게 유지합니다.
통합 테스트
Dart 및 위젯 테스트
SDK 시작을 애플리케이션 서비스 뒤에 래핑하여 화면 테스트가 다음을 반환할 수 있도록 하십시오.
- 완료 및 승인됨;
- 완료 및 보류 중;
- 완료 및 거부됨;
- 취소됨;
- 각 유형화된 실패;
- 예상치 못한 플랫폼 예외 발생.
로딩 상태 정리, 마운트된 확인, 재시도 가시성, 백엔드 새로 고침 및 분석 범주를 확인하십시오. 실제 세션 토큰을 픽스처에 넣지 마십시오.
네이티브 통합 테스트
실제 iOS 및 Android 장치에서 디버그 및 릴리스 빌드를 실행하십시오. 다음을 다루십시오.
- 최초 및 이전에 결정된 권한;
- 지원되는 카메라 및 지원되지 않는 카메라;
- 사용되는 경우 NFC 지원 및 비 NFC 변형;
- 저조도, 흐림, 눈부심 및 방향;
- 느린, 손실된 및 복원된 연결;
- 백그라운드 전환 및 프로세스 재구성;
- 취소 및 반복 실행;
- 세션 만료 및 재시도 차단;
- 다른 로케일, 글꼴 크기 조정, 화면 리더 및 줄어든 모션;
- 앱 서명, 축소 및 프로덕션 종속성 해결.
에뮬레이터는 상태 및 오류 테스트에 유용하지만 모든 카메라, NFC, 생체 인식 및 장치 무결성 조건을 나타낼 수는 없습니다.
종단 간 백엔드 테스트
문서화된 각 고객 상태에 대해 결정론적 샌드박스 사례를 사용하십시오. 서명된 테스트 이벤트를 재생하고, 중복을 순서가 뒤바뀌게 보내고, 검토를 지연하고, 시뮬레이션된 누락된 웹훅 후 조정하십시오. 백엔드 상태가 변경되기 전에 앱이 액세스를 허용하지 않는지 확인하십시오.
생체 인식 테스트 설계 및 공격 경계에 대해서는 라이브니스 테스트 가이드를 참조하십시오.
보안 및 개인 정보 보호 체크리스트
릴리스 전에 다음을 확인하십시오.
- 영구 제공업체 자격 증명은 백엔드에만 존재합니다.
- 앱은 인증된 채널을 통해 범위가 지정된 세션 토큰을 수신합니다.
- 토큰 및 증거는 로그, 분석, URL 및 충돌 보고서에 없습니다.
- 백엔드 생성 요청은 멱등하며 안정적인 고객 참조에 연결됩니다.
- 클라이언트 완료는 직접적으로 권한을 부여하지 않습니다.
- 웹훅 서명, 신선도, 중복, 순서 및 조정 테스트가 통과합니다.
- iOS 개인 정보 보호 설명 및 Android 권한 여정은 명확한 목적 텍스트를 사용합니다.
- NFC 기능 및 변형은 워크플로 및 릴리스 서명과 일치합니다.
- 디버그 로깅은 프로덕션 환경에서 비활성화됩니다.
- 보존, 동의, 개인 정보 보호 고지, 삭제 및 지원 경로는 귀하의 역할 및 법률과 일치합니다.
- SDK, 네이티브 종속성, OS 및 장치 호환성은 출시 후 모니터링됩니다.
- 롤백 및 강제 업그레이드 결정에는 소유자가 있습니다.
일반적인 Flutter SDK 통합 실수
API 키를 Dart에 포함
모바일 애플리케이션은 영구 서버 자격 증명을 보호할 수 없습니다. 백엔드에서 세션을 생성하고 범위가 지정된 토큰을 전달하십시오.
완료 콜백 신뢰
클라이언트 결과는 사용자 인터페이스 상태입니다. 백엔드에서 권한 있는 상태를 확인하고 정책을 적용하십시오.
다른 플랫폼에서 메서드 발명
Flutter는 동일한 이름으로 모든 네이티브 SDK 메서드를 노출하지 않습니다. 통합 코드를 작성하기 전에 패키지에 대해 컴파일하고 공개 Dart 소스를 확인하십시오.
오래된 네이티브 구성 복사
SDK 변형, 배포 대상 및 패키지 관리자 설정이 변경됩니다. 설치된 릴리스에 대한 문서를 따르고 모바일 릴리스 체크리스트에 기록하십시오.
모든 오류를 거부로 처리
권한, 네트워크, 만료, API 실패, 취소 및 고객 결정은 다른 복구 및 분석이 필요합니다.
에뮬레이터에서만 테스트
카메라, NFC, 권한, 서명 및 네이티브 종속성은 실제 장치 및 릴리스 빌드 적용 범위를 필요로 합니다.
Flutter 신원 확인 워크플로에서 Didit 사용
Didit Flutter SDK는 무료로 제공됩니다. 신분증 확인, 라이브니스 감지 및 기타 구성된 확인을 포함하는 워크플로를 시작할 수 있으며, 팀은 워크플로 오케스트레이터를 통해 조건부 경로를 관리합니다.
게시된 모듈 요금은 가격 책정 페이지에서 확인할 수 있습니다. SDK는 네이티브 캡처 경험을 처리하며, 귀하의 백엔드는 세션 생성, 인증된 결과 처리, 고객 상태 및 제품 결정에 대한 책임이 있습니다.
자주 묻는 질문
어떤 메서드가 인증을 시작합니까?
백엔드에서 생성된 프로덕션 세션의 경우 DiditSdk.startVerification(sessionToken)을 호출하십시오. SDK는 더 간단한 워크플로 ID 통합 모드를 위해 DiditSdk.startVerificationWithWorkflow(...)도 노출합니다.
Flutter 앱에 Didit API 키가 포함되어야 합니까?
아니요. API 키는 백엔드에 보관하십시오. 앱은 인증 시도에 필요한 범위가 지정된 세션 토큰만 수신해야 합니다.
VerificationCompleted가 승인을 의미합니까?
반드시 그렇지는 않습니다. 세션 상태는 승인, 보류 또는 거부될 수 있습니다. 즉각적인 인터페이스 상태에 결과를 사용하고 백엔드를 통해 권한 있는 결정을 확인하십시오.
취소는 어떻게 처리해야 합니까?
별개의 사용자 결과로 취급하십시오. 백엔드 세션 상태를 유지하고, 정책에 따라 명확한 재개 또는 다시 시작 경로를 제공하며, 취소를 사기 또는 거부로 분류하지 마십시오.
Flutter SDK에 초기화 메서드가 있습니까?
검증된 공개 Dart API는 별도의 초기화 메서드를 노출하지 않습니다. 패키지의 네이티브 설정 지침을 따르고 문서화된 시작 메서드를 사용하십시오.
Flutter에서 신분증에 NFC를 사용할 수 있습니까?
선택한 패키지 변형, 장치, iOS 또는 Android 구성, 서명 기능 및 워크플로가 모두 활성화되면 네이티브 SDK는 NFC를 지원할 수 있습니다. 현재 릴리스 문서를 따르고 실제 장치에서 테스트하십시오.
케이스가 검토 중일 때 앱은 무엇을 해야 합니까?
정확한 보류 상태를 표시하고, 고객이 안전하게 나가도록 허용하며, 인증된 결과가 도착하면 백엔드에서 최종 제품 상태를 읽으십시오.
주요 참조
- Didit Flutter SDK 문서
- Didit Flutter SDK 소스 저장소
- Didit 세션 API 문서
- Didit 웹훅 문서
- Flutter 문서: 플랫폼 통합
- OWASP 모바일 애플리케이션 보안 검증 표준
강력한 Flutter SDK 통합은 각 경계를 명시적으로 유지합니다. 백엔드는 시도를 생성하고, 앱은 범위가 지정된 네이티브 흐름을 시작하며, 유형화된 결과는 복구를 유도하고, 인증된 서버 이벤트는 고객 상태를 유도하며, 실제 장치 테스트는 권한, 수명 주기, 네이티브 종속성 및 실패 경로가 해피 패스 데모 외부에서 작동함을 증명합니다.