2013-03-12 6 views
11

Hier ist der logische Fluss Ich versuche in meinem iPhone App-Code:Correct Flow einzuloggen Benutzer von iOS-App auf Remote-API

enter image description here

Ich glaube, ich die technischen Feinheiten zu verstehen, dies zu erreichen (mit AFNetworking, Herstellen einer Verbindung zu einer Rails-API unter Verwendung von Devise als Authentifizierung). Das auth_token wird nach erfolgreicher Anmeldung im Schlüsselbund gespeichert. Was ich nicht herausfinden kann, ist der beste Weg, meine App so einzurichten, dass sie sich wie oben verhält.

Ich möchte, dass die Erfahrung für den Benutzer natürlich gut ist, also vielleicht, während es nach dem Token sucht und versucht, sich einzuloggen, zeigt es einen "ladenden" Bildschirm irgendeiner Art.

Wie würde ich das erreichen? Ich weiß nicht, welchen View-Controller ich als rootviewcontroller im AppDelegate einstellen soll oder wie ich ihn einstellen soll, nachdem sich der Benutzer angemeldet hat. Ich habe das in der Facebook-App ausprobiert und sehe beim Öffnen einen leeren Navigationscontroller es scheint, dann ist meine Profilansicht geladen. Was machen sie hinter den Kulissen und ist das der beste Weg?

Ich verwende keine Storyboards.

Antwort

9

Ich habe eine ähnliche implementiert, der RootViewController war ein "SplashViewController" in einem NavigationController, zeigt ein schönes Logo, Aktivitätsanzeige und gibt Benutzerinformationen über den Authentifizierungsstatus. Es enthält die Logik zum Überprüfen des gespeicherten Tokens und der Authentifizierungsimplementierung. Wenn die Authentifizierung erfolgreich ist, wird ShowUserController angezeigt, indem Sie in den navigationController-Stack klicken.

Wenn Authentifizierung fehlschlägt, wird ein LoginViewController modal präsentiert. SplashViewController implementiert den Delegaten von LoginViewController, der lediglich den Benutzernamen und das Passwort an SplashViewController übergibt. Nach erfolgreicher Anmeldung wird LoginViewController beendet und der Benutzer wird an ShowUserController weitergeleitet.

+0

Ich ging diese Route. Ich habe einen PathFinderViewController erstellt, den ich beim Laden der App auf rootViewController gesetzt habe. Dies überprüft, wohin es geht. Wenn ich mich anmelden muss, zeige ich den Login-Bildschirm modal an und versuche, mich einzuloggen. Wenn erfolgreich, verlasse ich den Login-Bildschirm und ändere den rootViewController in den UserViewController. Wenn PathFinder feststellt, dass Auth_Token gültig ist, wird der rootViewController einfach in UsersViewController geändert. Vielen Dank! – sbonkosky

+0

@Sbonkosky Froh, Ihnen zu helfen :). BTW wie hast du das Flussdiagramm erstellt? – Anupdas

+0

Ich benutzte [LucidChart] (http://www.lucidchart.com/) – sbonkosky

4

Starten Sie Ihre App mit dem Root-Controller als den, den der Benutzer sehen wird, nachdem er sich erfolgreich angemeldet hat, und schichten Sie dann die Login-Ansichten/Controller oben mit modalen Aufrufen ein. Wenn die Authentifizierung erfolgreich ist, ist Ihr Benutzer bereits dort, wo er sein möchte, ansonsten rufen Sie die Login-Ebenen modal oben auf. Sobald sie authentifiziert sind, werden Sie die Anmeldesichten nicht mehr benötigen.

+0

Aber was mache ich, wenn der Benutzer eine langsame Datenverbindung hat und die Überprüfung, ob das auth_token gültig ist, dauert ein paar Sekunden? Was zeige ich in der Zwischenzeit? – sbonkosky

+0

Sie können eine beliebige modale Ansicht aufstellen. Erstellen Sie eine modale Ansicht mit einem Drehfeld und einem Text, der nach Abschluss der Token-Validierung nicht mehr angezeigt wird. Zum Beispiel, setzen Sie den Root-Controller, als eine modale "Laden ..." Ansicht mit Spinner, bis die Authentifizierung abgeschlossen ist. Wenn es schlecht ist, verwerfen Sie die Ansicht "Spinner" und fügen Sie die Anmeldesicht ein. Wenn es gut ist, verwerfen Sie einfach die Ansicht "Spinner". Wenn Sie alles von Ihrem Root View Controller aus steuern, wird Ihr Leben einfacher. –

+0

So habe ich Facebooks SDK-Arbeit gesehen. –

2

Um @Owen Hartnetts Antwort zu erarbeiten, da dieser Text nicht in einen Kommentar passt; So habe ich das SDK von Facebook gesehen. Wenn Sie eine App erstellen, die das Facebook iOS SDK als einzigen Anmeldemechanismus verwendet, dann ist die Funktionsweise folgendermaßen:

In meiner App-Delegate didFinishLaunchingWithOptions Methode ich zunächst für ein "bereits auf Datei" Zugriffstoken in sagen , NSUserDefaults. Wenn nicht gefunden, muss ich einen anfordern, und so muss mein App-Delegierter sofort einen modalen Login-Flow starten, der mit einem gültigen Zugriffstoken endet, das dann in NSUserDefaults gespeichert wird, damit es bei der nächsten geöffneten App verwendet werden kann.

Wenn ich bereits ein Zugriffs-Token in meiner Datei didFinishLaunchingWithOptions habe, nehme ich den glücklichen Pfad an und öffne eine "angemeldete Benutzersitzung" asynchron mit dem Zugriffs-Token, das ich zur Zeit der App Open gefunden habe. Wenn das Zugriffstoken, über das ich die Datei geöffnet habe, legitim ist, wird keine UX angezeigt. Wenn das Zugriffstoken, das ich in der Datei habe, ein unzulässiges Zugriffstoken ist (der Server sagt, es ist beispielsweise zu alt), zeigt meine Methode der offenen Sitzung in meinem Anwendungsdelegaten den richtigen modalen Login-Ablauf an, wenn ich dies herausfinde.

Da diese openSession-Methode asynchron ausgeführt wird, fragen Sie sich vielleicht, wie Ihr Root View-Controller, der einen angemeldeten Benutzer benötigt, in der Zwischenzeit funktionieren wird.

Die Antwort ist, dass es so geschrieben werden sollte, als hätte es einen angemeldeten Benutzer. Es sollte annehmen. Wenn Code jemals ausgeführt wird oder nicht erfolgreich ausgeführt werden kann, weil kein gültiges Zugriffstoken vorhanden ist, sollte dieser Code die Anmeldebenutzeroberfläche auslösen, wenn sie nicht bereits (d. H. Die Zugriffstokenprüfung bei geöffneter App von dieses Mal, hat dem Benutzer bereits die modale Login-Benutzeroberfläche präsentiert).

Schließlich ist dies eine übersetzte Version des Facebook SDK-Login-Flusses. Zum Beispiel, wenn Sie nur ihr SDK verwenden, würden Sie nie mit NSUserDefaults Schnittstelle wie ich vorschlagen. Ich habe ihren Ablauf in eine "benutzerdefinierte Implementierung" der Anmeldung bei einer Remote-API übersetzt.

Verwandte Themen