Fingerprint authentication added.

This commit is contained in:
Andrey Shabarshov 2022-01-19 17:29:38 +00:00
parent 4092564222
commit 978cb50603
8 changed files with 8804 additions and 8507 deletions

View File

@ -6,6 +6,7 @@ using Android.Runtime;
using Android.OS; using Android.OS;
using Android.Support.V4.Content; using Android.Support.V4.Content;
using AndroidX.Core.App; using AndroidX.Core.App;
using Plugin.Fingerprint;
namespace QRBee.Droid namespace QRBee.Droid
{ {
@ -18,9 +19,13 @@ namespace QRBee.Droid
base.OnCreate(savedInstanceState); base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState);
CrossFingerprint.SetCurrentActivityResolver(()=>Xamarin.Essentials.Platform.CurrentActivity);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App()); LoadApplication(new App());
ZXing.Mobile.MobileBarcodeScanner.Initialize(Application); ZXing.Mobile.MobileBarcodeScanner.Initialize(Application);
if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.Camera) == (int) Permission.Granted) if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.Camera) == (int) Permission.Granted)
{ {
@ -28,6 +33,7 @@ namespace QRBee.Droid
else else
{ {
ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.Camera }, 0); ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.Camera }, 0);
// ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.UseFingerprint }, 0);
} }
} }

View File

@ -4,4 +4,5 @@
<application android:label="QRBee.Android" android:theme="@style/MainTheme"></application> <application android:label="QRBee.Android" android:theme="@style/MainTheme"></application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
</manifest> </manifest>

View File

@ -59,6 +59,9 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Plugin.Fingerprint">
<Version>2.1.4</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Compat"> <PackageReference Include="Xamarin.Android.Support.Compat">
<Version>28.0.0.3</Version> <Version>28.0.0.3</Version>
</PackageReference> </PackageReference>

File diff suppressed because it is too large Load Diff

View File

@ -132,6 +132,9 @@
<Reference Include="System.Numerics.Vectors" /> <Reference Include="System.Numerics.Vectors" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Plugin.Fingerprint">
<Version>2.1.4</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2244" /> <PackageReference Include="Xamarin.Forms" Version="5.0.0.2244" />
<PackageReference Include="Xamarin.Essentials" Version="1.7.0" /> <PackageReference Include="Xamarin.Essentials" Version="1.7.0" />
<PackageReference Include="ZXing.Net.Mobile"> <PackageReference Include="ZXing.Net.Mobile">

View File

@ -6,6 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Plugin.Fingerprint" Version="2.1.4" />
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2244" /> <PackageReference Include="Xamarin.Forms" Version="5.0.0.2244" />
<PackageReference Include="Xamarin.Essentials" Version="1.7.0" /> <PackageReference Include="Xamarin.Essentials" Version="1.7.0" />
<PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" /> <PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" />

View File

@ -2,6 +2,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Plugin.Fingerprint;
using Plugin.Fingerprint.Abstractions;
using Xamarin.Forms; using Xamarin.Forms;
namespace QRBee.ViewModels namespace QRBee.ViewModels
@ -28,8 +30,27 @@ namespace QRBee.ViewModels
/// <param name="obj"></param> /// <param name="obj"></param>
private async void OnLoginClicked(object obj) private async void OnLoginClicked(object obj)
{ {
// Prefixing with `//` switches to a different navigation stack instead of pushing to the active one bool isFingerprintAvailable = await CrossFingerprint.Current.IsAvailableAsync(false);
await Shell.Current.GoToAsync($"//{nameof(MainPage)}"); if (!isFingerprintAvailable)
{
//Insert PIN
return;
}
var conf = new AuthenticationRequestConfiguration("Authentication", "Authenticate access to your personal data");
var authResult = await CrossFingerprint.Current.AuthenticateAsync(conf);
if (authResult.Authenticated)
{
//Success
// Prefixing with `//` switches to a different navigation stack instead of pushing to the active one
await Shell.Current.GoToAsync($"//{nameof(MainPage)}");
}
else
{
//Failure
return;
}
} }
/// <summary> /// <summary>

View File

@ -10,13 +10,13 @@
<ContentPage.Content> <ContentPage.Content>
<StackLayout Padding="10,0,10,0" VerticalOptions="Center"> <StackLayout Padding="10,0,10,0" VerticalOptions="Center">
<StackLayout Orientation="Vertical"> <!-- <StackLayout Orientation="Vertical"> -->
<Label Text="Login: " Padding="5,10,0,0"/> <!-- <Label Text="Login: " Padding="5,10,0,0"/> -->
<Entry HorizontalOptions="FillAndExpand" Keyboard="Text"/> <!-- <Entry HorizontalOptions="FillAndExpand" Keyboard="Text"/> -->
<!-- -->
<Label Text="Password: " Padding="5,0,0,0" /> <!-- <Label Text="Password: " Padding="5,0,0,0" /> -->
<Entry HorizontalOptions="FillAndExpand" IsPassword="True"/> <!-- <Entry HorizontalOptions="FillAndExpand" IsPassword="True"/> -->
</StackLayout> <!-- </StackLayout> -->
<Button VerticalOptions="Center" Text="Login" Command="{Binding LoginCommand}"/> <Button VerticalOptions="Center" Text="Login" Command="{Binding LoginCommand}"/>
<Button VerticalOptions="Center" Text="Register new user" Command="{Binding RegisterCommand}"/> <Button VerticalOptions="Center" Text="Register new user" Command="{Binding RegisterCommand}"/>