Autenticação biométrica – Xamarin.Forms

Olá, neste artigo irei demonstrar como implementar autenticação biométrica em suas aplicações Xamarin.Forms.

 

ADICIONANDO O NUGET PACKAGE

Para o exemplo será utilizado o plugin Fingerprint, instale o plugin em todos os seus projetos.

Screen Shot 2019-04-20 at 01.04.09

 

Android

Em seu projeto .Android, instale o Plugin CurrentActivity.

Screen Shot 2019-04-18 at 00.51.27.png

 

MainActivity.cs

No arquivo MainActivity, atribua a Activity para SetCurrentActivityResolver e inicialize o plugin CrossCurrentActivity como demonstrado a seguir.

using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;
using Plugin.Fingerprint;
using Plugin.CurrentActivity;
namespace BiometricDemo.Droid
{
[Activity(Label = "BiometricDemo", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
CrossFingerprint.SetCurrentActivityResolver(() => CrossCurrentActivity.Current.Activity);
CrossCurrentActivity.Current.Init(this, savedInstanceState);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}

view raw
MainActivity.cs
hosted with ❤ by GitHub

 

AndroidManifest.xml

Adicione as seguintes permissões no arquivo AndroidManifest.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.julianocustodio.biometricdemo">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
<application android:label="BiometricDemo.Android"></application>
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
</manifest>

view raw
AndroidManifest.xml
hosted with ❤ by GitHub

iOS

Info.plist

Adicione a permissão para que dispositivos que utilizem o iOS 11.3 ou superior, possam utilizar o Face ID.

<key>NSFaceIDUsageDescription</key>
<string>Need your face to unlock secrets!</string>

view raw
Info.plist
hosted with ❤ by GitHub

XAML

Crie uma Label para demonstrar uma mensagem de resultado e um Button para chamar o método de autenticação.

<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:BiometricDemo"
x:Class="BiometricDemo.MainPage" Padding="10">
<StackLayout VerticalOptions="Center">
<Button Clicked="Autenticar" Text="Autenticar" BackgroundColor="#F3F3F3"/>
<Label x:Name="Resultado" Text="" HorizontalTextAlignment="Center"/>
</StackLayout>
</ContentPage>

view raw
MainPage.xaml
hosted with ❤ by GitHub

C#

Primeiro utilize o método IsAvailableAsync para verificar se o dispositivo possui o sensor de biometria. Depois utilize o AuthenticateAsync para ativar o sensor como demonstrado no exemplo a seguir.

using System;
using System.ComponentModel;
using Plugin.Fingerprint;
using Xamarin.Forms;
namespace BiometricDemo
{
[DesignTimeVisible(true)]
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void Autenticar(object sender, EventArgs e)
{
var result = await CrossFingerprint.Current.IsAvailableAsync(true);
if (result)
{
var auth = await CrossFingerprint.Current.AuthenticateAsync("Toque no sensor");
if (auth.Authenticated)
{
Resultado.Text = "Autenticado com sucesso! 🙂";
}
else
{
Resultado.Text = "Impressão digital não reconhecida";
}
}
else
{
await DisplayAlert("Ops","Dispositivo não suportado","OK");
}
}
}
}

view raw
MainPage.xaml.cs
hosted with ❤ by GitHub

Resultado

iOS

ezgif.com-gif-maker

 

Android

ezgif.com-video-to-gif

 

Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.

icongithub

3 comentários em “Autenticação biométrica – Xamarin.Forms

  1. Boa noite Juliano, como está?

    Atualmente meu app, está autenticando no web-service com usuário e senha. Gostaria de adicionar o recurso de autenticação por biometria, porém, ainda não tenho certeza do fluxo correto. Pois para chegar ao web-service preciso necessariamente do usuário e senha.

    O correto seria na primeira autenticação usar os mesmos e depois armazenar no security storage, para quando a biometria passar mandar o mesmos?

    Curtir

    1. Olá Jackson, estou bem e você ?

      Exatamente, a primeira vez você solicita usuário e senha e pede para configurar a biometria. Assim, na sequencia você faz uma validação apenas na biometria, quando ela for compativel, você envia ao servidor o usuário e senha.

      Espero ter ajudado.

      Curtido por 1 pessoa

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s