Вход и выход пользователя с ParseSwift SDK в iOS
10 мин
вход и выход пользователя введение в руководстве по регистрации пользователей https //www back4app com/docs/ios/parse swift sdk/users/user registration мы узнали, как интегрировать опцию регистрации в ios приложение с использованием платформы back4app и \<font color="#2166ae">parseswift sdk\</font> как только пользователь успешно зарегистрируется в вашем приложении, действия входа и выхода являются ключевыми функциями в потоке приложения \<font color="#2166ae">parseswift sdk\</font> позволит нам бесшовно интегрировать эти функции в любое ios приложение предварительные требования чтобы завершить этот быстрый старт, вам нужно xcode приложение, созданное на back4app следуйте руководству по созданию нового parse приложения https //www back4app com/docs/get started/new parse app чтобы узнать, как создать приложение parse на back4app примечание следуйте руководству по установке parse sdk (swift) https //www back4app com/docs/ios/parse swift sdk чтобы создать проект xcode, связанный с back4app цель реализовать функцию входа и выхода пользователя с использованием parseswift sdk и платформы back4app 1 настройка функций входа и выхода перед тем как начать реализовывать любую функциональность входа, мы должны создать объект, который будет представлять пользователя для простоты мы повторно используем ту же \<font color="#2166ae">пользователь\</font> структуру (которая соответствует протоколу \<font color="#2166ae">parseuser\</font> ), которую мы представили в руководстве по регистрации пользователей 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? } мы рекомендуем следовать руководству по регистрации пользователей и зарегистрировать как минимум одного пользователя, чтобы использовать его в качестве примера для этого руководства аналогично процессу регистрации, вход в систему требует форму, где пользователь вводит свой имя пользователя и пароль затем мы выполняем запрос на вход, используя соответствующие методы, предоставленные \<font color="#2166ae">parseswift sdk\</font> в свою очередь, back4app обрабатывает запрос и возвращает ответ, содержащий информацию для входа когда происходит ошибка, ответ возвращает информацию для идентификации и обработки этой ошибки процесс выхода из системы прост \<font color="#2166ae">parseswift sdk\</font> позволяет нам реализовать его в одной строке кода 2 настройка приложения после того как вы подключили https //www back4app com/docs/ios/parse swift sdk/install sdk ваш проект xcode к вашему back4app приложению, следующим шагом будет настройка пользовательского интерфейса приложения для процесса входа мы реализуем простой контроллер, содержащий соответствующие поля ввода и кнопку входа класс, отвечающий за эту форму, называется logincontroller и является подклассом uiviewcontroller ключевыми компонентами, которые необходимо интегрировать в этот контроллер, являются два uitextfield и одна uibutton следующий фрагмент показывает реализацию класса logincontroller 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 } кроме того, вспомогательная функция \<font color="#2166ae">showmessage(title\ message )\</font> реализована в расширении \<font color="#2166ae">uiviewcontroller\</font> 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 } для процесса выхода мы вставляем кнопку в контроллере главного экрана, т е , \<font color="#2166ae">homecontroller\</font> этот контроллер представления будет содержать только кнопку выхода и метку, показывающую имя пользователя реализация этого контроллера представления проста 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 запрос на вход теперь мы переходим к реализации метода login(with\ password) в классе logincontroller протокол parseuser предоставляет объекту user статический метод login(username\ password) этот метод подготавливает и отправляет запрос на вход в ваше приложение back4app в зависимости от случая использования можно использовать одну из многих реализаций метода login( ) теперь мы завершаем метод login(with\ password) в 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 запрос на выход запрос на выход так же прост, как и запрос на вход еще раз, протокол parseuser предоставляет user статический метод logout( ) вызывая этот метод, текущий пользователь (доступный через user current ) выходит из вашего back4app приложения мы вызовем этот метод, когда пользователь нажмет кнопку выхода, расположенную на главном экране, т е в методе handlelogout() класса homecontroller , мы добавим следующее 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 запустите приложение! в этом репозитории https //github com/templates back4app/ios user log in and log out , вы найдете проект xcode, содержащий процессы входа и выхода, которые мы описали выше перед запуском приложения убедитесь, что вы подключили проект xcode к вашему \<font color="#2166ae">back4app\</font> приложению заключение с помощью back4app и \<font color="#2166ae">parseswift sdk\</font> мы можем быстро интегрировать функции входа и выхода в ios приложениях после подключения вашего back4app приложения к вашему проекту xcode процесс входа (или выхода) требует всего лишь вызова одного метода