Sitzungsverwaltung mit Xamarin.Forms (Android)
-
21-12-2019 - |
Frage
Erstens bin ich mir nicht sicher, ob ich das überhaupt gestalterisch am besten anhebe, aber ich bin ein bisschen neu bei Android und sehr neu bei Xamarin.Forms.Mein Setup besteht aus einer Reihe von ContentPage
s in einer Xamarin.Forms-PCL, die alle Informationen von einem REST-Dienst verarbeiten.Dieser Dienst gewährt beim Einloggen a WorkToken
an dem die Anwendung dann festhält, um weitere Vorgänge auszuführen.Ich speichere das in einem ISessionManager
.
Mein Problem ist ein Workflow-Problem.Ich habe ein LoginPage
dass ich dem Benutzer zeigen möchte, ob seine Sitzung beendet/fehlerhaft/was auch immer ist;Grundsätzlich möchte ich, wenn sie nicht angemeldet sind und versuchen, etwas zu tun, diese Seite auf den Stapel verschieben und sie dazu zwingen, sich anzumelden. Wenn sie gültige Anmeldeinformationen angeben, lassen Sie sie dort weitermachen, wo sie aufgehört haben.All dies geschieht größtenteils in der PCL, aber ich habe eine Android-Implementierung davon erstellt ISessionManager
das wird bei jedem abgefragt ContentPage
ist überschrieben OnAppearing
Methode.Jede Seite ruft auf ISessionManager
'S CheckLogin
Das wird genau das tun, und wenn sie nicht angemeldet sind, wird ein erstellt Intent
und starten Sie die LoginActivity
dadurch. LoginActivity
umschließt im Wesentlichen nur die PCLs LoginPage
.
Das Problem, auf das ich stoße, ist, dass auf diese Weise das LoginActivity
wird asynchron über der aufgerufenen Seite ausgeführt.Diese aufrufende Seite befindet sich jedoch in einem fehlerhaften Zustand, da sie noch nicht ordnungsgemäß über den REST-Dienst initialisiert wurde.Ich stelle mir vor, dass es zwei mögliche Lösungen gibt.Führen Sie entweder das aus Intent
synchron (was ich nicht für möglich halte) oder mein Design überdenken.Hier ist die Intent
aufstellen:
var intent = new Intent(_context, typeof(LoginActivity));
intent.AddFlags(ActivityFlags.NewTask);
_context.StartActivity(intent);
Ich habe in mehreren Xamarin-Foren nach verwandten Beiträgen zu diesem Thema gesucht, aber über die grundlegenden Navigationsworkflows in Xamarin.Forms hinaus nicht viel gefunden.
Bearbeiten:Ich habe etwas Analoges zu dem gefunden, was ich hier zu tun versuche: So übergeben Sie Variablen von einem neuen Intent zurück an die Klasse, die ihn in Android erstellt hat, aber im Kontext von Xamarin.Forms.Der startActivityForResult
würde mein Problem lösen, wenn es existieren würde Forms.Context
, aber es scheint kein Äquivalent zu geben.
Lösung
Warum erstellen Sie eine LoginActivity?Liegt es daran, dass Sie etwas Natives von Android verwenden müssen?
Mein erster Gedanke ist, dass Sie, nachdem Sie den Token-Status bei „OnAppearing“ überprüft haben, entscheiden können, ob Sie das Modal für die Anmeldeseite pushen möchten oder nicht. Nachdem die Benutzeranmeldung abgeschlossen und das Token gespeichert ist, können Sie das Modal öffnen und loslegen zeigt die vorherige Seite an, auf der sich der Benutzer befand.