authme_ekyc_sdk 3.0.1 copy "authme_ekyc_sdk: ^3.0.1" to clipboard
authme_ekyc_sdk: ^3.0.1 copied to clipboard

Flutter plugin for the AuthMe eKYC SDK: OCR-based identity document recognition (Taiwan + 12 other regions), liveness detection, and NFC passport verification on iOS and Android.

3.0.1 #

🔧 技術改進 #

  • Android: AuthMe SDK 升級至 2.8.2。
    • 三項 OCR 啟動時序相關 fatal crash(ModelRepository UnInitialized / stepFlows empty / lateinit remoteParams)收斂為正常結束 + 明確錯誤碼回傳,不再 native fatal exception。

🛡️ 強化 #

  • Android Plugin: startFeature 進場除原本的 isAuthMeInitialized 旗標檢查外,新增 AuthMe.context != null 雙重保險。
    • 解決 process 被系統回收後 plugin instance 旗標仍為 true 但 AuthMe 內部 static context 已 null,導致 OCR Activity 啟動瞬間取不到 ModelRepository 而 crash 的 race condition。
    • 搭配上方 Android SDK 兜底修正,徹底處理 OCR 啟動時序相關 crash。

📝 整合方提醒(Best Practices) #

為避免無謂的 Activity 啟動/立即 finish 閃跳,建議整合方 Flutter 端配合:

  • await initialize() 完成才 enable OCR 入口按鈕(init 進行中或失敗時 disable 或提示重試)
  • OCR 進行中以 PopScope(canPop: false) 攔截使用者返回,或維護自家「OCR in-progress」狀態
  • 接住 startFeature 拋出的 PlatformExceptionresultStream 上的 {error: ...} event 做對應 UI 處理

提醒:native fatal exception 無法用 Dart 的 try-catch 攔截,必須靠 plugin 回傳 event + 整合方狀態管理這條路。

3.0.0 — 2026-05-22 #

⚠️ Breaking Changes #

  • iOS: 移除 CocoaPods 安裝路徑,改為純 Swift Package Manager。
    • 不再提供 authme_ekyc_sdk.podspec,原本透過 AuthMe01/PodSpecs.git 取得的 pod 路線停用。
    • 需要 Flutter 3.32+ 且 SPM 啟用(3.32+ 預設啟用)。
    • 升級指引請見 README「iOS Setup」章節。

🚀 新功能與改進 #

  • iOS: AuthMeSPM 升級至 2.9.20(AuthMe / AuthMeUI 2.9.20、AuthmeNFCKit 2.0.10、Algo / OpenSSL 9.0.32)。
  • Android: AuthMe SDK 升級至 2.8.1(原 2.8.0-rc.200)。
  • Flutter Plugin:
    • Plugin 重新組織為 SPM 標準佈局(ios/authme_ekyc_sdk/Package.swift + Sources/),PrivacyInfo.xcprivacy 移入 SPM target resources。
    • iOS NFC reader UI 跟著 setLocale 切換語系(原本寫死繁中)。
    • SSLConfig 在 init 階段做基本檢查,設定錯誤印警告但不擋 init。
    • AuthmeSdk / SSLConfig / AuthmeLocale 補完 Dartdoc。

🔧 技術改進 #

  • Android:
    • AuthmeFeature rawValue 對齊 Dart enum,原本非台灣地區的 feature 在 Android 全部回 INVALID_FEATURE,現在恢復可用。
    • onActivityResult 改依 dispatched feature 選 result extractor,不再用 try/catch 當 control flow。
    • coroutineScope.cancel() on engine detach,修 in-flight coroutine leak。
  • iOS:
    • ~70 個 print(...) 收進 #if DEBUG helper,release build 不再 leak token prefix、device identifier 等 PII 到 NSLog。
  • Dart:
    • Diagnostic logging 收進 kDebugMode;token logging 安全化,短 token 不再 RangeError
  • Build / CI:
    • publish_to_pub_dev.yml 加入 pubspec / tag / android/build.gradle / CHANGELOG 版本一致性檢查。
    • pr_validation.yml 移除 pod install,新增 SPM enable step。
    • 新增 Customer Env Build Check workflow,乾淨環境驗證 plugin 能 build。
    • pubspec.yaml 補 repository / issue_tracker / topicsandroid/build.gradle 版本對齊 (3.0.0)。

🐛 修復問題 #

  • iOS FlutterResult 契約
    • setLocale / refreshToken 補上 result(nil),原本 Dart Future 永遠 hang。
    • initializeURL(string:)!guard let,原本 bad serverURL 會 crash host app。
    • AuthMeCore.build() 失敗改為回 INITIALIZATION_FAILED,原本錯誤被 print 吞掉。
    • confirmScanResultforEach 改為 typed for-in,原本 bad arg 會 double-call FlutterResult。
    • startFeatureflow.exception 改走 result stream,避免與同步 result(nil) 衝突 double-call。
  • 兩平台:lastOCRResult 在新 startFeature 進場時清掉,避免舊 scan 資料被 commit。
  • iOScoordinatorDidFinishScan 補上外層 modal 的 dismiss + 結束時若無 result 交付則自動發 cancellation 解鎖。原本 Flutter host 沒 UINavigationController 時 SDK 把 .push fallback 成 modal 呈現,scan 結束後 modal 不會自己消失;另一個常見情境是使用者在 Liveness 半途點返回,SDK 不會走 .canceled delegate,Dart 端的 in-progress 鎖永遠不解、下一次 startFeature 被 silently 拒絕。兩個問題一起修。
  • README 校對:刪除程式碼裡不存在的 enableDebug / setErrorHandler / customizeUI / stopNFCPassportScansetLocale 範例改為 AuthmeLocale.zhHant;Liveness 結果格式說明改為忠實反映兩平台現狀。
  • example app 不再寫死 client_secret,改為讀 String.fromEnvironment('AUTHME_CLIENT_SECRET')
  • 移除過時腳本 create_pubspec.sh / ios/create_podspec.sh;example 的 .cxx/ build artifact 退 git。
  • 單元測試:test/ekyc_sdk_test.dartAuthmeEkycSdkPluginTest.kt 從 stub 換為實質覆蓋 AuthmeFeature rawValue / AuthmeLocale 字串映射 / SSLConfig wire 格式。

⚠️ 已知議題 #

  • iOS Liveness 結果為 raw string(succeed / failed / unknown),與 Android 的 {result: "success"} 不一致,跨平台 shape 對齊列為下一個 minor 的 breaking change。建議目前用 final passed = value == 'success' || value == 'succeed'; 同時相容。
  • captureTimeout 參數目前兩平台都不會生效(native SDK 尚未提供對應 builder method)。

ℹ️ Migration Note #

若你下游 app 還在 Flutter <3.32 或刻意關閉了 SPM,請繼續使用 ^2.8.x,本版不相容。

2.8.21 #

🔧 技術改進 #

  • Android:
    • AuthMe SDK 升級至 2.8.0-rc.200
  • Flutter Plugin (Android):
    • TWIDFraud feature 補上 TWN_IDCard_Front 步驟,修正 init-scan-doc 回 400 的問題
    • startFeature 進場先 OCRFactory.disablePlugin() 清除前一輪註冊的 plugin,避免狀態殘留

🐛 修復問題 #

  • 修正 host app 整合 SDK 時的多項 crash
    • 修正 AgreementActivity / ConfirmPhotoActivity 在非 AppCompat theme host 下的 IllegalStateException
    • 修正 OCR 流程在 process death 後重啟導致的 UnInitialized / lateinit remoteParams / stepFlows is empty crash
    • 修正 OCRResultActivity / OCRResultComposeActivity / NfcResultActivity 在 intent extra 缺失時的 NullPointerException
  • 修正 OCR 結果頁(如護照流程)確認按鈕初始 disabled 卡住,需點欄位才會亮起的問題

⚠️ 已知議題 #

  • AuthmeFeature.NFCPassport(護照 NFC 讀取)目前無法完成讀取,預計下一版修正。需要護照辨識請暫時改用 AuthmeFeature.Passport(純 OCR 流程)。

2.8.19 #

🔧 技術改進 #

  • Android:
    • AuthMe SDK 升級至 2.8.0-rc.189
    • 改善初始化流程錯誤處理

🐛 修復問題 #

  • 修正 IndexOutOfBoundsException 崩潰問題
    • 修正 USAVisitorVISA 的 OCRStepType 設定
    • 新增 startFeature 操作鎖,防止連續快速呼叫導致的競態條件
    • 新增空步驟列表檢查,避免傳入無效配置
    • 新增 Activity 生命週期狀態重置
  • Dart 層新增初始化狀態追蹤和超時自動重置機制

2.8.18 #

🔧 技術改進 #

  • iOS:
    • 更新 AuthMe、AuthMeUI 至 2.9.2

2.8.17 #

🚀 新功能與改進 #

  • Flutter 3.38.5 支援: 升級 SDK 以支援 Flutter 3.38.5 及 Dart 3.10

🔧 技術改進 #

  • Flutter:
    • Dart SDK 版本升級至 ^3.10.0
    • Flutter 最低版本要求升級至 >=3.38.5

2.8.16 #

🔧 技術改進 #

  • iOS:
    • 更新 AuthMe、AuthMeUI 至 2.9.1

2.8.15 #

🔧 技術改進 #

  • iOS:
    • Flutter concurrency-safe

2.8.10 #

🔧 技術改進 #

  • iOS:
    • 更新 AuthMe、AuthMeUI 至 2.9.0

2.8.9 #

🚀 新功能與改進 #

  • Android 16 KB 頁面對齊支援: 啟用 useLegacyPackaging = false 以支援 Android 15+ 的新頁面大小要求
  • 依賴版本升級:
    • Kotlin 升級至 2.1.20
    • Gradle Plugin 升級至 8.13.0
    • Lottie 升級至 6.3.0
    • AuthMe SDK 升級至 2.8.0-rc.178 (Android) / 2.8.42 (iOS)

🔧 技術改進 #

  • Android:

    • compileSdk 升級至 35
    • minSdk 提升至 24 (Android 7.0+)
    • 改善 NFC plugin 初始化錯誤處理
    • 新增使用前檢查機制,避免未初始化錯誤
    • 加入詳細的錯誤日誌記錄
  • iOS:

    • 更新 AuthMe、AuthMeUI 至 2.8.42
    • 更新 AuthmeNFCKit 至 1.0.19
    • 修正編譯錯誤 (localizedDescription)
  • Example App:

    • Java 相容性升級至 17
    • 改用本地 path 依賴以便開發測試

🐛 修復問題 #

  • 修正 Android NFC plugin 未初始化導致的崩潰問題
  • 修正 iOS Swift 編譯錯誤
  • 修正 Java 版本過時警告

2.8.0 #

🚀 新功能與改進 #

  • iOS 依賴更新: 更新 AuthMe 和 AuthMeUI 到 2.8.35 版本
    • 支援最新的 AuthMe SDK 功能
    • 改善 iOS 平台的穩定性和效能
    • 修復 XCFramework 連結問題

🔧 技術改進 #

  • CocoaPods 配置優化:
    • 添加 AuthMe 私有倉庫源配置
    • 使用靜態框架連結方式解決依賴衝突
    • 改善 iOS 編譯和連結流程

📱 平台特定改進 #

  • iOS:

    • 修復 Git LFS 文件下載問題
    • 優化 XCFramework 處理機制
    • 改善靜態框架依賴管理
    • Liveness Result 調整: 更新 LivenessResult 類型引用,從 AuthMeLivenessViewController.LivenessResult 改為 LivenessResult
    • 移除過時配置: 移除 captureTimeout 配置項
  • Android:

    • Liveness Result 調整: 更新 LivenessResult.SuccessAuthMeResult.LivenessSuccess
    • OCR Result 調整: 修正 OCR 結果資料結構,從 result.map 改為 result.data
    • 效能優化: 改善 confirmScanResult 的 coroutine 處理機制

🐛 修復問題 #

  • 修正 iOS 平台 XCFramework 連結錯誤
  • 解決 AuthMe 依賴版本衝突問題
  • 修復 Git LFS 文件未正確下載的問題
  • 修復 Android 平台 OCR 結果資料結構不一致問題
  • 修正 Liveness 結果處理的類型引用問題

2.7.20 #

🚀 新功能與改進 #

  • Android 效能優化: 修正 confirmScanResult 方法中的 suspend function 處理機制
    • 使用 CoroutineScopeDispatchers.Main 確保非阻塞執行
    • 避免主線程阻塞,提升應用程式響應性
    • 改善 UI 操作的安全性,確保所有 UI 相關操作在主線程執行

🔧 技術改進 #

  • 錯誤處理增強:
    • 在 coroutine 內外都加入適當的錯誤處理機制
    • 使用 withContext(Dispatchers.Main) 確保錯誤回傳在主線程
    • 保持原有的資源清理邏輯,避免記憶體洩漏

📱 平台特定改進 #

  • Android:
    • 新增 kotlinx.coroutines 相關依賴
    • 實作 CoroutineScope 實例管理
    • 優化 lastOCRResult?.confirm() 的執行方式

🐛 修復問題 #

  • 修正 Android 平台在處理 OCR 確認時可能造成的 UI 凍結問題
  • 改善 Flutter 與原生 Android 代碼的協調性

2.7.19 #

  • 新增手動拍照開關參數。
  • 修正 Android 下載 Model 錯誤的問題。

2.7.16 #

  • 調整 Android Refresh Token 解析失敗處理流程。
  • 修正 NFCScanActivity Theme 沒有正確設定問題。

2.7.15 #

  • 加入 Android activity 自定義 result code callback 機制。

2.7.14 #

  • 移除前版 iOS Map 型態不支援 dynamic 的程式碼。
  • 加入 Android activity result callback filter。

2.7.13 #

  • 修正 iOS Map 型態不支援 dynamic 的問題。

2.7.12 #

  • 修正 iOS 出現有機率會當掉沒有任何回應,導致必須重啟APP問題。
  • 修正 iOS scanConfirm 無法回傳問題。

2.7.11 #

  • 調整 Result map 正反面編碼處理方式

2.7.9 #

  • 移除 OCR 背面過濾沒值的機制

2.7.8 #

  • 修正台灣身分證沒有拿到 back image 的問題
  • 加入 Result map 可以取得正反面原圖與截圖

2.7.7 #

  • 調整修正回傳 map 不為 Map<String, dynamic>

2.7.6 #

  • 增加 StreamSubscription 重新註冊事件防呆

2.7.5 #

  • 調整 SDK 初始化Token 雙平台接口一致

2.7.2 #

  • 增加 Exception 處理機制

2.7.0 #

  • 新增 Flutter bridge to Authme EKYC SDK
0
likes
145
points
394
downloads

Documentation

API reference

Publisher

verified publisherauthme.com

Weekly Downloads

Flutter plugin for the AuthMe eKYC SDK: OCR-based identity document recognition (Taiwan + 12 other regions), liveness detection, and NFC passport verification on iOS and Android.

Homepage
Repository (GitHub)
View/report issues

Topics

#ekyc #ocr #identity-verification #liveness #nfc

License

unknown (license)

Dependencies

flutter, http, plugin_platform_interface

More

Packages that depend on authme_ekyc_sdk

Packages that implement authme_ekyc_sdk