Prosegue la serie dedicata allo sviluppo di una app che permette di segnalare i migliori posti dove si gusta la vera focaccia genovese.

Oramai la app ha delle caratteristiche di tutto rispetto: offline-sync e gestione autenticazione in modalità server-flow.

Siccome siamo programmatori 8o almeno io tento di esserlo) e per questo non siamo mai contenti, e se non abbiamo rogne ce le andiamo a cercare, ecco che voglio presentarVi le modalità per dotare la app in sviluppo con autenticazione client-flow.

Come detto in precedenza questo tipo di autenticazione si basa sull'SDK nativo messo a disposizione dall'IdP: nel nostro caso Facebook.

Anche in questo caso prima di buttarci nel codice occorre configurare il portale developer di Facebook, in modo da permetterci di usare il relativo SDK.

In questo caso è possibile ricondurre le attività per mettere in campo questa autenticazione nei seguenti punti sono sono abbastanza generali e applicabili anche in casi in cui si utilizzi differente IdP. Attenzione, però, che esistono tra l'SDK messo a disposizione da un IdP e un'altro un IdP differenze e modalità di configurazione maggiori rispetto al caso del server-flow.

  1. Accedere alla console developer dell’IdP scelto
  2. Creare una nuova App e abilitare l’autenticazione Oauth
  3. Inserire i dati della app che vuole utilizzare l’SDK native e la relativa autenticazione: generalmente il package name e l’hash key della firma utilizzata
  4. Prelevare i dati identificativi e la secret proposti dal portale (App Id e App Secret).
  5. Accedere al portale Azure e impostare app id e secret nel Mobile App service.
  6. Proteggere i controller del backend da accessi non autenticati (attributo [Authorize])

Quindi in definitiva occorre seguire i punti già visti per il caso del server-flow, cui occorre aggiungere solo il punto tre, che sarà esposto nel seguito.

Dopo aver avuto accesso al portale developer di facebook accedere a Settings -> Basic, e agire su Add Platform.

Qui occorre selezionare Android, e completare con i seguenti campi.

 

Google Play Package Name: il nome del package della nostra app - nel nostro caso it.trilogik.AppFocGenova
Class Name: il nome della classe da cui verrà richiamato la login dell'SDK nativo di facebook. Nel nostro caso it.trilogik.AppFocGenova.AppFocGenova.Droid.MainActivity
Key Hashes: La chiave hash della nostra app. Esistono decine di modi per ottenerla, molti dei quali non funzionanti (almeno in ambito Xamarin): ho comunque trovato sempre efficace usare il seguente codice, che Vi riporto per completezza, lanciato direttamente nella MainActivity del progetto specializzato Android. Ovviamente una volta rintracciata la chiave il codice per ottenerla può essere eliminato.
Single Sign On: NO
Log In-App Purchase Events Automatically (Recommended): NO

 

...
namespace AppFocGenova.Droid
{
    [Activity(Label = "AppFocGenova", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        ICallbackManager callbackManager;
        protected override void OnCreate(Bundle bundle)
        {
.....
          PackageInfo info = this.PackageManager.GetPackageInfo("it.trilogik.AppFocGenova", PackageInfoFlags.Signatures);
          foreach (Android.Content.PM.Signature signature in info.Signatures)
          {
	     MessageDigest md = MessageDigest.GetInstance("SHA");
	     md.Update(signature.ToByteArray());

	     string keyhash = Convert.ToBase64String(md.Digest());
	     Console.WriteLine("KeyHash:", keyhash);
          }

Una volta completate le operazioni sopra è possibile mettere mano al codice.

Ma questa è un'altra storia e per oggi secondo me Ve ne è abbastanza: grazie al cielo il tempo sta tenendo, per cui causa spiaggia rimando tutto alla prossima settimana !!!