Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Taichi Sato (@syarihu) ● Money Forward, Inc. ○ Android Engineer ● TechBooster

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Fingerprint API

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

● Android 6.0 (API Level 23)から利用 できる公式の指紋認証API ● FingerprintManagerクラスを利用して実 装する ● Android 9.0 (API Level 28)から非推奨 Fingerprint API

Slide 7

Slide 7 text

BiometricPrompt API

Slide 8

Slide 8 text

● Android 9.0 (API Level 28)から利用 できるAPI ● より強力な生体認証を提供する ● BiometricPromptクラスを利用して 実装する BiometricPrompt API

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

AndroidX Biometric Library

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

● BiometricFragment ● FingerprintHelperFragment ● FingerprintDialogFragment Android X Biometric Library

Slide 15

Slide 15 text

● BiometricFragment ○ Android 9.0以上のPlatformの BiometricPromptクラスを利用 Android X Biometric Library

Slide 16

Slide 16 text

● FingerprintHelperFragment ○ Android 6.0以上の FingerprintManagerクラスを利用 ● FingerprintDialogFragment ○ FingerprintHelperFragmentを内部で 呼び出してダイアログを表示 Android X Biometric Library

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Android X Biometric Library ● これらのFragmentはAndroidX ライブラリ内部からの呼び出しに制限さ れている ● AndroidXのBiometricPromptクラスの authenticateメソッド内部でAPI Levelに よって処理を分けている

Slide 19

Slide 19 text

Android X Biometric Library ● パーミッション ○ android.permission.USE_FINGERPRINT ○ android.permission.USE_BIOMETRIC ● AndroidManifest.xmlにあらかじめ追加 されているため、自分で追加する必要は ない

Slide 20

Slide 20 text

Android X Biometric Library を使ってみる

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

コールバックの実装 val callback = object : BiometricPrompt.AuthenticationCallback() { override fun onAuthenticationSucceeded( result: BiometricPrompt.AuthenticationResult ) { super.onAuthenticationSucceeded(result) /** 成功処理 */ }

Slide 24

Slide 24 text

コールバックの実装 override fun onAuthenticationFailed() { super.onAuthenticationFailed() /** 失敗処理 */ }

Slide 25

Slide 25 text

コールバックの実装 override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { /** エラー処理 */ when (errorCode) { BiometricConstants.ERROR_NO_BIOMETRICS -> { // 生体認証未登録 } else -> { // それ以外 } } }

Slide 26

Slide 26 text

Executorの実装 private fun mainExecutorCompat(): Executor { return if (Build.VERSION.SDK_INT >= 28) { mainExecutor } else { HandlerExecutor(Handler(mainLooper)) } }

Slide 27

Slide 27 text

Executorの実装 private class HandlerExecutor( private val handler: Handler ) : Executor { override fun execute(runnable: Runnable) { handler.post(runnable) } }

Slide 28

Slide 28 text

getMainExecutorメソッド ● API Level 28以上のContextに実装されて おり、それ未満のAPI Levelでは使えない

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Android 8.0

Slide 32

Slide 32 text

Android 9.0

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Trick or Treat (技術書典5新刊) ● Android Xの生体認証の話 ● AACのViewModelをDagger で生成する話 ● 機械学習の型の話 ● Androidネイティブ ライブラリビルドTips https://techbooster.booth.pm/items/1046485

Slide 36

Slide 36 text

ありがとうございました