AndroidX Biometric Library

Da5a59469ce3ebb55619ce34f85f8c4f?s=47 syarihu
October 31, 2018

AndroidX Biometric Library

shibuya.apk #29で発表したAndroidXの生体認証の話です。

Da5a59469ce3ebb55619ce34f85f8c4f?s=128

syarihu

October 31, 2018
Tweet

Transcript

  1. AndroidX Biometric Library shibuya.apk #29 2018/10/31 (Wed) @syarihu

  2. Taichi Sato (@syarihu) • Money Forward, Inc. ◦ Android Engineer

    • TechBooster
  3. None
  4. Fingerprint API

  5. • Android 6.0 (API Level 23)から利用 できる公式の指紋認証API • FingerprintManagerクラスを利用して実 装する

    Fingerprint API
  6. • Android 6.0 (API Level 23)から利用 できる公式の指紋認証API • FingerprintManagerクラスを利用して実 装する

    • Android 9.0 (API Level 28)から非推奨 Fingerprint API
  7. BiometricPrompt API

  8. • Android 9.0 (API Level 28)から利用 できるAPI • より強力な生体認証を提供する •

    BiometricPromptクラスを利用して 実装する BiometricPrompt API
  9. • 生体認証を行うためのダイアログを提供 する • 認証ダイアログが内部で実装されている ため、画面の一部に生体認証を入れる ことはできない BiometricPrompt API

  10. None
  11. AndroidX Biometric Library

  12. • 非推奨になったFingerprint APIと 新しいBiometricPrompt APIの互換性を 保って利用するためのライブラリ ◦ 2018年10月現在の最新バージョンは 1.0.0-alpha2 Android

    X Biometric Library
  13. • 非推奨になったFingerprint APIと 新しいBiometricPrompt APIの互換性を 保って利用するためのライブラリ ◦ 2018年10月現在の最新バージョンは 1.0.0-alpha2 •

    androidx.biometric.BiometricPrompt Android X Biometric Library
  14. • BiometricFragment • FingerprintHelperFragment • FingerprintDialogFragment Android X Biometric Library

  15. • BiometricFragment ◦ Android 9.0以上のPlatformの BiometricPromptクラスを利用 Android X Biometric Library

  16. • FingerprintHelperFragment ◦ Android 6.0以上の FingerprintManagerクラスを利用 • FingerprintDialogFragment ◦ FingerprintHelperFragmentを内部で

    呼び出してダイアログを表示 Android X Biometric Library
  17. Android X Biometric Library • これらのFragmentはAndroidX ライブラリ内部からの呼び出しに制限さ れている

  18. Android X Biometric Library • これらのFragmentはAndroidX ライブラリ内部からの呼び出しに制限さ れている • AndroidXのBiometricPromptクラスの

    authenticateメソッド内部でAPI Levelに よって処理を分けている
  19. Android X Biometric Library • パーミッション ◦ android.permission.USE_FINGERPRINT ◦ android.permission.USE_BIOMETRIC

    • AndroidManifest.xmlにあらかじめ追加 されているため、自分で追加する必要は ない
  20. Android X Biometric Library を使ってみる

  21. build.gradle dependencies { implementation 'androidx.biometric:biometric:1.0.0-alpha02' }

  22. ダイアログの設定 val builder = BiometricPrompt.PromptInfo.Builder().apply { setTitle("生体認証を行います") setSubtitle("サブタイトル") setDescription("説明") setNegativeButtonText("キャンセル")

    }
  23. コールバックの実装 val callback = object : BiometricPrompt.AuthenticationCallback() { override fun

    onAuthenticationSucceeded( result: BiometricPrompt.AuthenticationResult ) { super.onAuthenticationSucceeded(result) /** 成功処理 */ }
  24. コールバックの実装 override fun onAuthenticationFailed() { super.onAuthenticationFailed() /** 失敗処理 */ }

  25. コールバックの実装 override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { /** エラー処理

    */ when (errorCode) { BiometricConstants.ERROR_NO_BIOMETRICS -> { // 生体認証未登録 } else -> { // それ以外 } } }
  26. Executorの実装 private fun mainExecutorCompat(): Executor { return if (Build.VERSION.SDK_INT >=

    28) { mainExecutor } else { HandlerExecutor(Handler(mainLooper)) } }
  27. Executorの実装 private class HandlerExecutor( private val handler: Handler ) :

    Executor { override fun execute(runnable: Runnable) { handler.post(runnable) } }
  28. getMainExecutorメソッド • API Level 28以上のContextに実装されて おり、それ未満のAPI Levelでは使えない

  29. getMainExecutorメソッド • AndroidXの開発中のソースコードには ContextCompatにgetMainExecutor メソッドがある • AndroidXの次のバージョンにこれが含まれれ ば、今後自前で実装する必要は無くなる

  30. 生体認証を開始する BiometricPrompt( this /** FragmentActivity */, mainExecutorCompat(), callback ).authenticate(builder.build())

  31. Android 8.0

  32. Android 9.0

  33. • Fingerprint APIはAPI Level 28で 非推奨になるため、BiometricPromptを 使う必要がある • AndroidXのBiometricライブラリを 使えば簡単に実装可能

    まとめ
  34. • ContextCompatにgetMainExecutor メソッドが実装されれば自前でExecutor を実装する必要がなくなる ので気にしておくとよい まとめ

  35. Trick or Treat (技術書典5新刊) • Android Xの生体認証の話 • AACのViewModelをDagger で生成する話

    • 機械学習の型の話 • Androidネイティブ ライブラリビルドTips https://techbooster.booth.pm/items/1046485
  36. ありがとうございました