3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

.NET MAUIとMAUI Blazor Appで生体認証(指紋認証)を実装してみる(Android)

Posted at

はじめに

Build 2022 にて現行のクロスプラットフォームである Xamarin.Forms の後継として、.NET MAUI(.NET Multi-platform App UI)が発表された。

maui.png

ただし、リリースされたばかりということもあり、生体認証(指紋認証)を実装する知見があまりネットにはなかったため、備忘録としてまとめることにした。

以下のものを準備

検証内容

今回検証する内容としては、MAUIをベースとする以下の2つのプラットフォームで指紋認証を実装。

MAUI Blazor app について詳しくはこちら

MAUI での指紋認証の実装

Plugin.Fingerprintをインストール

MAUIプロジェクトを新規で立ち上げ、MAUIプロジェクトにNu GetでPlugin.Fingerprintをインストールする。バージョンは「プレリリースを含める」にチェックし、3.0.0-bet.1 をインストール。

Plugin.Fingerprint:https://www.nuget.org/packages/Plugin.Fingerprint/#supportedframeworks-body-tab

MAUIの環境設定

Xamarin.Formsで使用されていたパッケージをMAUIでも使えるように Xamarin.Android.X パッケージを Nu Get でインストール。インストール先は、MAUIプロジェクト>Dependencies>net6.0-android。

Android デバイスの生体認証機能にアクセスするために AndroidManifest.xml に以下を追記。

<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<!-- only if you target android below level 28 -->
<uses-permission android:name="android.permission.USE_FINGERPRINT" />

また、MainActivity.cs に以下を宣言。

using Plugin.Fingerprint;
...
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    CrossFingerprint.SetCurrentActivityResolver(() => this);
}

テンプレートのMainPage.xamlにボタンを作成

<ScrollView>
    <VerticalStackLayout 
        Spacing="25" 
        Padding="30,0" 
        VerticalOptions="Center">

        <Image
            Source="dotnet_bot.png"
            SemanticProperties.Description="Cute dot net bot waving hi to you!"
            HeightRequest="200"
            HorizontalOptions="Center" />
            
        <Label 
            Text="Hello, World!"
            SemanticProperties.HeadingLevel="Level1"
            FontSize="32"
            HorizontalOptions="Center" />
        
        <Label 
            Text="Welcome to .NET Multi-platform App UI"
            SemanticProperties.HeadingLevel="Level2"
            SemanticProperties.Description="Welcome to dot net Multi platform App U I"
            FontSize="18"
            HorizontalOptions="Center" />

        <Button 
            x:Name="CounterBtn"
            Text="Click me"
            SemanticProperties.Hint="Counts the number of times you click"
            Clicked="OnCounterClicked"
            HorizontalOptions="Center" />

        <Button x:Name="AuthBtn" Text="Auth" Clicked="OnAuthClicked" HorizontalOptions="Center" />

    </VerticalStackLayout>
</ScrollView>

イベントハンドラをMainPage.xaml.csに実装

using Plugin.Fingerprint;
using Plugin.Fingerprint.Abstractions;
…
private async void OnAuthClicked(object sender, EventArgs e)
{
    if (await CrossFingerprint.Current.IsAvailableAsync(true))
    {
        var request = new AuthenticationRequestConfiguration("Login!", "Access your account");
        var result = await CrossFingerprint.Current.AuthenticateAsync(request);
        if (result.Authenticated)
        {
            await DisplayAlert("Authenticated!", "Access granted", "OK");
        }
        else
        {
            await DisplayAlert("Not authenticated!", "Access denied", "OK");
        }
    }
    else
    {
        await DisplayAlert("Failure", "Biometrics not available", "OK");
    }
}

デバイス側で指紋認証を事前登録

デバイス側に指紋が登録されていない状態でアプリを実行すると認証は失敗するので、デバイス(エミュレータ)側で事前に登録しておく。

  • Android OS内の[設定]に移動し、[セキュリティ]を選択します
  • [デバイスセキュリティ]で[画面ロック]を選択し、PINを追加します
  • [デバイスセキュリティ]で[指紋]を選択して指紋を追加します。
    • エミュレータで指紋を追加するには、エミュレータ[…]をクリックして[指紋]を選択し、[センサーに触れる]ボタンを2回クリックします。2回クリックして、最後に[完了]をクリックします

MAUI の動作検証

アプリ起動
maui-1.png

Auth ボタン押下
maui-2.png

認証完了
maui-3.png

MAUI のデモ動画はこちら

MAUI Blazor での指紋認証の実装

MAUI Blazor app の場合は、BlazorWebView コンポーネントとの関係性を考慮する必要があるため、ボタンを配置するステップ3にて、テンプレートのMainPage.xamlを以下のように修正してみる。

<ScrollView>
    <VerticalStackLayout>
        
    <BlazorWebView HostPage="wwwroot/index.html">
        <BlazorWebView.RootComponents>
            <RootComponent Selector="#app" ComponentType="{x:Type local:Main}" />
        </BlazorWebView.RootComponents>
    </BlazorWebView>

    <Button x:Name="AuthBtn" Text="Auth" Clicked="OnAuthClicked" HorizontalOptions="Center" />

    </VerticalStackLayout>
</ScrollView>

MAUI Blazor の動作検証

Auth ボタン押下
mauiblazor-1.png

認証完了
mauiblazor-2.png

MAUI Blazor のデモ動画はこちら

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?