カテゴリー: Tech

Flutterで生体認証が楽々導入できると噂のlocal_auth

はじめに

最近はFlutterの勉強ばかりしていますが、今回は簡単に生体認証が導入できると噂のパッケージ、local_authを使ってみたいと思います

準備

まずはlocal_authをpubspec.yamlに追加しましょう。

flutter pub add local_auth

pubspec.yamlに追加されていれば成功です。

local_auth: ^2.1.0

次は、iOSで使用するために、Info.plistに以下の内容を追加します。

  <key>NSFaceIDUsageDescription</key>
    <string>生体認証を使用する目的を記述</string>

Androidで使用する場合は以下のコードをMainActivity.ktに追記します。

import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterFragmentActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine)
    }
}

AndroidManifest.xmlにパーミッションを追記します。

<uses-permission android:name="android.permission.USE_FINGERPRINT"/>

実装

local_authのサンプルコードを使用して解説を行いたいと思います。local_authのサンプルコードはこちらから。
上記の準備が終わっていればサンプルのコピペで動くと思います。

端末が生体認証可能かの確認

まずは端末が生体認証が可能な端末かどうかのチェックを行います。ここではあくまで端末側の仕様確認なので、ユーザーが生体認証の登録を行なっていなくとも端末が生体認証可能であればtrueが返却されます。

late bool canCheckBiometrics;
try {
  canCheckBiometrics = await auth.canCheckBiometrics;
} on PlatformException catch (e) {
  canCheckBiometrics = false;
  print(e);
}

生体認証の登録状態の確認

次は生体認証の登録状態の確認を行います。こちらは端末にユーザーが登録している生体認証の状況を取得することができます。

late List<BiometricType> availableBiometrics;
try {
  availableBiometrics = await auth.getAvailableBiometrics();
} on PlatformException catch (e) {
  availableBiometrics = <BiometricType>[];
  print(e);
}

何も登録していない場合は空の配列が返却されます。また、返却されるBiometricTypeはenumで以下のように定義されています。

enum BiometricType {
  /// Face authentication.
  face,

  /// Fingerprint authentication.
  fingerprint,

  /// Iris authentication.
  iris,

  /// Any biometric (e.g. fingerprint, iris, or face) on the device that the
  /// platform API considers to be strong. For example, on Android this
  /// corresponds to Class 3.
  strong,

  /// Any biometric (e.g. fingerprint, iris, or face) on the device that the
  /// platform API considers to be weak. For example, on Android this
  /// corresponds to Class 2.
  weak,
}

生体認証の実行

生体認証を実行します。local_authでは生体認証もできるというだけで、パスコードやジェスチャーなど通常の認証も可能です。

bool authenticated = false;
try {
  authenticated = await auth.authenticate(
    localizedReason:
    'Scan your fingerprint (or face or whatever) to authenticate',
    options: const AuthenticationOptions(
      useErrorDialogs: true,
      stickyAuth: true,
      biometricOnly: true,
    ),
  );
} on PlatformException catch (e) {
  print(e);
  return;
}

auth.authenticateを実行することにより認証を呼び出します。基本的には普段設定している認証が呼び出されますが、AuthenticationOptionsのbiometricOnlyをtrueにすることで、生体認証のみを呼び出すことができます。

 

おすすめ書籍

nukky

シェア
執筆者:
nukky
タグ: Flutter

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

4週間 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前