1

Ich versuche, die Authentifizierung für die Xamarin Field Engineer Mobile App arbeiten zu lassen. Ich habe das Xamarin, das mit meiner Azure SQL-Datenbank ohne Authentifizierung arbeitet. Obwohl ich die Einrichtung von Benutzerdefiniertes Azure Active Directory korrekt befolgt habe und über fiddler darauf zugreifen kann, wird durch den Code, den ich verwende, der Zugriff auf die Anmeldeseite nicht abgeschlossen, da auf meinem Android-Smartphone eine leere Authentifizierungsseite angezeigt wird.Xamarin Android Azure Mobile App .NET-Authentifizierung mit Azure Active Directory

Ich versuche, den Benutzer zur Anmeldung nur zu bekommen, wenn sie die Daten aktualisieren oder versuchen, online zu gehen. Wenn sie offline sind oder WLAN-Zugang nicht haben, gibt es nicht, da sich anzumelden.

using System; 
using System.Collections.Generic; 
using System.Threading.Tasks; 
using Microsoft.WindowsAzure.MobileServices; 
using Microsoft.WindowsAzure.MobileServices.SQLiteStore; 
using Microsoft.WindowsAzure.MobileServices.Sync; 
using FieldEngineerLite.Helpers; 
using FieldEngineerLite.Models; 
using Microsoft.WindowsAzure.MobileServices.Eventing; 
using System.Diagnostics; 
using System.Net; 
using System.Security.Policy; 

namespace FieldEngineerLite 
{ 

    public class JobService 
    { 
     public bool LoginInProgress = false; 
     public bool Online = false;   

     public IMobileServiceClient MobileService = null; 
     private IMobileServiceSyncTable<Job> jobTable; 

     // Placeholder string for Try App Service is ZUMOAPPURL 
     // To use with your own app, use URL in the form https://xamaringisdemo.azurewebsites.net/ 
     private const string MobileUrl = "https://xamaringisdemo.azurewebsites.net/"; 

     public async Task InitializeAsync() 
     { 
      this.MobileService = 
       new MobileServiceClient(MobileUrl, new LoggingHandler()); 

      var store = new MobileServiceSQLiteStore("local.db"); 
      store.DefineTable<Job>(); 

      await MobileService.SyncContext.InitializeAsync(store, StoreTrackingOptions.NotifyLocalAndServerOperations); 
      jobTable = MobileService.GetSyncTable<Job>(); 
     } 

     public async Task<IEnumerable<Job>> ReadJobs(string search) 
     { 
      return await jobTable.ToEnumerableAsync(); 
     } 

     public async Task UpdateJobAsync(Job job) 
     { 
      job.Status = Job.CompleteStatus; 

      await jobTable.UpdateAsync(job); 

      // trigger an event so that the job list is refreshed 
      await MobileService.EventManager.PublishAsync(new MobileServiceEvent("JobChanged")); 
     } 

     public async Task SyncAsync() 
     { 
      if(await EnsureLogin()); 
      try 
      { 
       await this.MobileService.SyncContext.PushAsync(); 
       await jobTable.PullAsync(null, jobTable.CreateQuery()); 
      } 
      catch (Exception e) 
      { 
       Debug.WriteLine(e); 
      } 
     } 

     public async Task CompleteJobAsync(Job job) 
     { 
      await UpdateJobAsync(job); 

      if (Online) 
       await this.SyncAsync(); 
     } 

     public async Task<bool> EnsureLogin() 
     { 
      LoginInProgress = true; 
      while (this.MobileService.CurrentUser == null) 
      { 
       try 
       { 
        await this.MobileService.LoginAsync(App.UIContext, 
         MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory); 
        Online = true; 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine("failed to authenticate: " + ex.Message); 
        Online = false; 
       } 
      } 
      LoginInProgress = false; 
      return await EnsureLogin(); 
     } 
    } 
} 

Antwort

Verwandte Themen