iOS
...
Users
ParseSwift SDK: Benutzeranmeldung und -abmeldung in iOS
10 min
benutzeranmeldung und abmeldung einführung in dem benutzerregistrierungsleitfaden https //www back4app com/docs/ios/parse swift sdk/users/user registration haben wir gelernt, wie man eine anmeldemöglichkeit in eine ios app integriert, indem wir die back4app plattform und das parseswift sdk parseswift sdk sobald sich ein benutzer erfolgreich in ihrer app anmeldet, sind die aktionen zur anmeldung und abmeldung wichtige funktionen im ablauf der app das parseswift sdk parseswift sdk ermöglicht es uns, diese funktionen nahtlos in jede ios app zu integrieren voraussetzungen um dieses schnellstartprojekt abzuschließen, benötigen sie xcode eine app, die bei back4app erstellt wurde befolgen sie das tutorial für neue parse apps um zu lernen, wie man eine parse app bei back4app erstellt hinweis befolgen sie das tutorial zur installation des parse sdk (swift) um ein xcode projekt zu erstellen, das mit back4app verbunden ist ziel um eine benutzeranmelde und abmeldefunktion mit dem parseswift sdk und der back4app plattform zu implementieren 1 einrichten der anmelde und abmeldefunktionen bevor wir mit der implementierung einer anmeldefunktionalität beginnen, müssen wir das objekt erstellen, das den benutzer repräsentiert zur vereinfachung werden wir die gleiche benutzer benutzer struktur wiederverwenden (die dem parseuser parseuser protokoll entspricht), die wir im benutzerregistrierungsleitfaden https //www back4app com/docs/ios/parse swift sdk/users/user registration import foundation import parseswift struct user parseuser { var username string? var email string? var emailverified bool? var password string? var age int? } wir empfehlen, dem benutzerregistrierungsleitfaden zu folgen und mindestens einen benutzer zu registrieren, um ihn als beispiel für diesen leitfaden zu verwenden ähnlich wie beim anmeldeprozess erfordert das einloggen ein formular, in dem der benutzer seinen benutzernamen und passwort dann führen wir eine anmeldeanfrage mit den entsprechenden methoden durch, die vom parseswift sdk parseswift sdk im gegenzug verarbeitet back4app die anfrage und gibt eine antwort zurück, die die anmeldeinformationen enthält wenn ein fehler auftritt, gibt die antwort informationen zurück, um diesen fehler zu identifizieren und zu behandeln der abmeldeprozess ist unkompliziert das parseswift sdk parseswift sdk ermöglicht es uns, ihn in einer einzigen codezeile zu implementieren 2 einrichtung der app sobald sie ihre verbunden https //www back4app com/docs/ios/parse swift sdk/install sdk haben, ist der nächste schritt, die benutzeroberfläche der app einzurichten für den anmeldeprozess werden wir einen einfachen controller implementieren, der die entsprechenden eingabefelder und einen anmeldebutton enthält die klasse, die für dieses formular verantwortlich ist, heißt logincontroller und ist eine unterklasse von uiviewcontroller die wichtigsten komponenten, die in diesen controller integriert werden müssen, sind zwei uitextfield und ein uibutton der folgende codeausschnitt zeigt die implementierung der logincontroller klasse 1 import uikit 2 import parseswift 3 4 class logincontroller uiviewcontroller { 5 private let usernametextfield uitextfield = { 6 let textfield = uitextfield() 7 textfield borderstyle = roundedrect 8 textfield placeholder = "username " 9 textfield autocapitalizationtype = none 10 textfield textalignment = center 11 return textfield 12 }() 13 14 private let passwordtextfield uitextfield = { 15 let textfield = uitextfield() 16 textfield borderstyle = roundedrect 17 textfield issecuretextentry = true 18 textfield placeholder = "password " 19 textfield textalignment = center 20 return textfield 21 }() 22 23 private let loginbutton uibutton = { 24 let button = uibutton(type roundedrect) 25 button settitle("log in", for normal) 26 return button 27 }() 28 29 override func viewdidload() { 30 super viewdidload() 31 32 navigationitem title = "back4app log in" 33 34 // lays out the login form 35 let stackview = uistackview(arrangedsubviews \[usernametextfield, passwordtextfield, loginbutton]) 36 stackview\ translatesautoresizingmaskintoconstraints = false 37 stackview\ spacing = 8 38 stackview\ axis = vertical 39 stackview\ distribution = fillequally 40 41 let stackviewheight = cgfloat(stackview\ arrangedsubviews count) (44 + stackview\ spacing) stackview\ spacing 42 43 view\ addsubview(stackview) 44 stackview\ centerxanchor constraint(equalto view\ safearealayoutguide centerxanchor) isactive = true 45 stackview\ centeryanchor constraint(equalto view\ safearealayoutguide centeryanchor) isactive = true 46 stackview\ widthanchor constraint(equalto view\ safearealayoutguide widthanchor, multiplier 0 7) isactive = true 47 stackview\ heightanchor constraint(equaltoconstant stackviewheight) isactive = true 48 49 // adds the method that will be called when the user taps the login button 50 loginbutton addtarget(self, action #selector(handlelogin), for touchupinside) 51 52 // if the user is already logged in, we redirect them to the homecontroller 53 guard let user = user current else { return } 54 let homecontroller = homecontroller() 55 homecontroller user = user 56 57 navigationcontroller? pushviewcontroller(homecontroller, animated true) 58 } 59 60 /// called when the user taps on the loginbutton button 61 @objc private func handlelogin() { 62 guard let username = usernametextfield text, !username isempty, 63 let password = passwordtextfield text, !password isempty else { 64 // shows an alert with the appropriate title and message 65 return showmessage(title "error", message "invalid credentials ") 66 } 67 68 login(with username, password password) 69 } 70 71 /// logs in the user and presents the app's home screen (homecontroller) 72 /// parameters 73 /// username user's username 74 /// password user's password 75 private func login(with username string, password string) { 76 // todo here we will implement the login process 77 } 78 } zusätzlich wird die hilfsfunktion showmessage(title\ message ) showmessage(title\ message ) in einer erweiterung von uiviewcontroller uiviewcontroller 1 extension uiviewcontroller { 2 3 /// presents an alert with a title, a message and a back button 4 /// parameters 5 /// title title for the alert 6 /// message shor message for the alert 7 func showmessage(title string, message string) { 8 let alertcontroller = uialertcontroller(title title, message message, preferredstyle alert) 9 10 alertcontroller addaction(uialertaction(title "back", style cancel)) 11 12 present(alertcontroller, animated true) 13 } 14 } für den logout prozess fügen wir einen button im home controller ein, d h homecontroller homecontroller dieser view controller wird nur den logout button und ein label enthalten, das den benutzernamen des nutzers anzeigt die implementierung dieses view controllers ist unkompliziert 1 import uikit 2 import parseswift 3 4 class homecontroller uiviewcontroller { 5 6 /// when set, it updates the usernamelabel's text with the user's username 7 var user user? { 8 didset { 9 usernamelabel text = "hello \\(user? username ?? "n/a")!" 10 } 11 } 12 13 private let usernamelabel uilabel = { 14 let label = uilabel() 15 label textalignment = center 16 label font = boldsystemfont(ofsize 18) 17 label translatesautoresizingmaskintoconstraints = false 18 return label 19 }() 20 21 private let logoutbutton uibutton = { 22 let button = uibutton(type roundedrect) 23 button settitle("log out", for normal) 24 button translatesautoresizingmaskintoconstraints = false 25 return button 26 }() 27 28 override func viewdidload() { 29 super viewdidload() 30 31 // sets up the layout (usernamelabel and logoutbutton) 32 view\ backgroundcolor = systembackground 33 navigationitem hidesbackbutton = true 34 navigationitem title = "back4app" 35 view\ addsubview(usernamelabel) 36 view\ addsubview(logoutbutton) 37 38 usernamelabel topanchor constraint(equalto view\ safearealayoutguide topanchor, constant 8) isactive = true 39 usernamelabel centerxanchor constraint(equalto view\ safearealayoutguide centerxanchor) isactive = true 40 41 logoutbutton bottomanchor constraint(equalto view\ safearealayoutguide bottomanchor, constant 8) isactive = true 42 logoutbutton centerxanchor constraint(equalto view\ safearealayoutguide centerxanchor) isactive = true 43 44 // adds the method that will be called when the user taps the logout button 45 logoutbutton addtarget(self, action #selector(handlelogout), for touchupinside) 46 } 47 48 /// called when the user taps the logout button 49 @objc private func handlelogout() { 50 // todo here we will implement the logout process 51 } 52 } 3 anmeldeanfrage wir fahren nun fort, die login(with\ password) methode in der logincontroller klasse zu implementieren das parseuser protokoll gibt dem user objekt die statische methode login(username\ password) diese methode bereitet die anmeldeanfrage vor und sendet sie an ihre back4app anwendung je nach anwendungsfall kann man eine der vielen implementierungen der login( ) methode verwenden wir vervollständigen nun die login(with\ password) methode in logincontroller 1 class homecontroller uiviewcontroller { 2 3 4 /// logs in the user and presents the app's home screen (homecontroller) 5 /// parameters 6 /// username user's username 7 /// password user's password 8 private func login(with username string, password string) { 9 // warning use only one of the following implementations, the synchronous or asynchronous option 10 11 // logs in the user synchronously, it throws a parseerror error if something happened 12 // this should be executed in a background thread! 13 do { 14 let loggedinuser = try user login(username username, password password) 15 16 // after the login success we send the user to the home screen 17 let homecontroller = homecontroller() 18 homecontroller user = loggedinuser 19 20 navigationcontroller? pushviewcontroller(homecontroller, animated true) 21 } catch let error as parseerror { 22 showmessage(title "error", message "failed to log in \\(error message)") 23 } catch { 24 showmessage(title "error", message "failed to log in \\(error localizeddescription)") 25 } 26 27 // logs in the user asynchronously 28 user login(username username, password password) { \[weak self] result in // handle the result (of type result\<user, parseerror>) 29 switch result { 30 case success(let loggedinuser) 31 self? usernametextfield text = nil 32 self? passwordtextfield text = nil 33 34 // after the login success we send the user to the home screen 35 let homecontroller = homecontroller() 36 homecontroller user = loggedinuser 37 38 self? navigationcontroller? pushviewcontroller(homecontroller, animated true) 39 case failure(let error) 40 self? showmessage(title "error", message "failed to log in \\(error message)") 41 } 42 } 43 } 44 } 4 abmeldeanfrage die abmeldeforderung ist so einfach wie die anmeldeforderung noch einmal stellt das parseuser protokoll die user mit der statischen methode logout( ) durch den aufruf dieser methode meldet sich der aktuelle benutzer (erreichbar über user current ) von ihrer back4app anwendung ab wir werden diese methode aufrufen, wenn der benutzer auf die abmeldetaste auf dem startbildschirm tippt, d h in der handlelogout() methode in der homecontroller klasse fügen wir folgendes hinzu 1 class homecontroller uiviewcontroller { 2 3 4 /// called when the user taps the logout button 5 @objc private func handlelogout() { 6 // warning use only one of the following implementations, the synchronous or asynchronous option 7 8 // logs out the user synchronously, it throws a parseerror error if something happened 9 // this should be executed in a background thread! 10 do { 11 try user logout() 12 13 // after the logout succeeded we dismiss the home screen 14 navigationcontroller? popviewcontroller(animated true) 15 } catch let error as parseerror { 16 showmessage(title "error", message "failed to log out \\(error message)") 17 } catch { 18 showmessage(title "error", message "failed to log out \\(error localizeddescription)") 19 } 20 21 // logs out the user asynchronously 22 user logout { \[weak self] result in // handle the result (of type result\<void, parseerror>) 23 switch result { 24 case success 25 // after the logout succeeded we dismiss the home screen 26 self? navigationcontroller? popviewcontroller(animated true) 27 case failure(let error) 28 self? showmessage(title "error", message "failed to log out \\(error message)") 29 } 30 } 31 } 32 } 5 führen sie die app aus! in diesem repository https //github com/templates back4app/ios user log in and log out , finden sie ein xcode projekt, das die oben beschriebenen anmelde und abmeldeprozesse enthält stellen sie vor dem ausführen der app sicher, dass sie das xcode projekt mit ihrer back4app back4app anwendung verbunden haben fazit die back4app und das parseswift sdk parseswift sdk ermöglichen es uns, anmelde und abmeldefunktionen in ios apps schnell zu integrieren nachdem sie ihre back4app anwendung mit ihrem xcode projekt verbunden haben, erfordert der anmelde (oder abmelde ) prozess nur den aufruf einer einzigen methode