iOS
...
Users
Интеграция Google Sign-In с ParseSwift для iOS разработчиков
12 мин
вход с помощью google введение в настоящее время для приложений является обычным делом предлагать более одного типа метода входа поэтому пользователям проще войти с помощью учетной записи, которая у них уже есть, такой как учетная запись google или apple id более того, социальные сети (такие как facebook) предоставляют sdk для разработчиков, чтобы интегрировать опцию входа с использованием учетных данных их социальной сети мы начинаем этот гид с интеграции функции входа, предоставленной google после того как пользователь успешно вошел в систему с помощью своих учетных данных google, мы используем информацию об учетной записи, возвращаемую google, чтобы войти в новую учетную запись, которая будет связана с соответствующей учетной записью google в этом репозитории , мы предоставляем простой шаблон xcode, где вы можете протестировать различные методы входа, которые мы реализуем этот проект уже был представлен в предыдущем руководстве https //www back4app com/docs/ios/parse swift sdk/users/user log in , вы можете вернуться к нему для получения более подробной информации о проекте предварительные требования чтобы завершить этот быстрый старт, вам нужно xcode приложение, созданное на back4app следуйте за учебником по созданию нового parse приложения чтобы узнать, как создать приложение parse на back4app примечание следуйте за учебником по установке parse sdk (swift) чтобы создать проект xcode, подключенный к back4app цель интегрировать функцию входа пользователя с использованием sdk google и parseswift 1 настройка sdk google после того как мы связали проект xcode с приложением back4app , мы продолжаем добавлять sdk google, который позволит нам реализовать процесс входа в этом примере мы используем swift package manager (spm) для добавления зависимостей google sign in в проекте xcode перейдите в файл>добавить пакеты… и в строке поиска введите https //github com/google/googlesignin ios как только появится googlesignin ios в результатах, нажмите на кнопку add package затем перейдите на панель управления вашего аккаунта разработчика google и создайте новый проект как только проект будет создан, следующим шагом будет создание идентификатора клиента oauth в консоли google cloud выберите ваш новый проект и перейдите на страницу учетных данных это можно найти в левом меню в процессе вам может понадобиться настроить экран согласия oauth, который появится в форме входа с помощью google, и заполнить соответствующие требования чтобы завершить этот шаг, мы должны добавить в схемы url приложения url, сгенерированный во время создания идентификатора клиента oauth перейдите к конфигурации проекта и выберите основной целевой объект приложения затем перейдите в раздел info и добавьте соответствующую схему url из вашего проекта google 2 использование входа в систему google с parseswift с googlesignin успешно интегрированным в ваш проект xcode, мы переходим к реализации функции входа в систему с помощью google в пример проекта , logincontroller отвечает за обработку и отображение различных вариантов входа в систему затем мы настраиваем действие signinwithapplebutton в этом контроллере 1 // logincontroller swift file 2 import googlesignin 3 4 5 class logincontroller uiviewcontroller { 6 7 8 private let signinwithgooglebutton uibutton = { 9 let button = uibutton(type system) 10 button setimage(uiimage(named "googleicon"), for normal) 11 button imageview? contentmode = scaleaspectfit 12 return button 13 }() 14 15 override func viewdidload() { 16 super viewdidload() 17 // 18 // layout configuration 19 // 20 21 signinwithgooglebutton addtarget(self, action #selector(handlesigninwithgoogle), for touchupinside) 22 } 23 } 24 25 // mark sign in with google section 26 extension logincontroller { 27 @objc fileprivate func handlesigninwithgoogle() { 28 // todo here we will implement the sign in procedure 29 } 30 } чтобы отобразить форму входа от google, googlesignin googlesignin sdk позволяет нам настроить и представить её через метод signin(with\ presenting\ callback) signin(with\ presenting\ callback) из класса gidsignin gidsignin кроме того, мы должны передать объект gidconfiguration gidconfiguration , созданный с использованием идентификатора клиента , созданного на предыдущем шаге, затем контроллер представления и замыкание обратного вызова в замыкании обратного вызова google возвращает учетные данные пользователя (встроенные в объект gidgoogleuser gidgoogleuser ) или ошибку, если аутентификация не удалась 1 // mark sign in with google section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithgoogle() { 4 let signinconfig = gidconfiguration(clientid "my client id") // see https //developers google com/identity/sign in/ios/sign in for more details 5 6 // method provided by the googlesignin framework see https //developers google com/identity/sign in/ios/sign in for more details 7 gidsignin sharedinstance signin(with signinconfig, presenting self) { \[weak self] googleuser, error in 8 if let error = error { 9 self? showmessage(title "error", message error localizeddescription) 10 return 11 } 12 13 // after google returns a successful sign in, we get the users id and idtoken 14 guard let googleuser = googleuser, 15 let userid = googleuser userid, 16 let idtoken = googleuser authentication idtoken 17 else { fatalerror("this should never happen!?") } 18 19 // todo sign in the user in your back4app application 20 } 21 } 22 } затем мы берем эти учетные данные и используем их для входа пользователя на платформу back4app объект, представляющий пользователя, является следующей структурой (см предыдущий гид https //www back4app com/docs/ios/parse swift sdk/users/user log in , чтобы получить дополнительную информацию) 1 import parseswift 2 3 struct user parseuser { 4 5 6 var username string? 7 var email string? 8 var emailverified bool? 9 var password string? 10 11 var age int? 12 } поэтому учетные данные, возвращаемые google, содержат idtoken idtoken и id id пользователя, которые будут использованы для завершения процесса входа более точно, мы создаем объект parsegoogle\<user> parsegoogle\<user> и вызываем метод login(id\ idtoken\ completion) login(id\ idtoken\ completion) 1 // mark sign in with google section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithgoogle() { 4 gidsignin sharedinstance signout() // this should be called when the user logs out from your app for login testing purposes, we are calling it each time the user taps on the 'signinwithgooglebutton' button 5 6 let signinconfig = gidconfiguration(clientid "my client id") // see https //developers google com/identity/sign in/ios/sign in for more details 7 8 // method provided by the googlesignin framework see https //developers google com/identity/sign in/ios/sign in for more details 9 gidsignin sharedinstance signin(with signinconfig, presenting self) { \[weak self] googleuser, error in 10 if let error = error { 11 self? showmessage(title "error", message error localizeddescription) 12 return 13 } 14 15 // after google returns a successful sign in, we get the users id and idtoken 16 guard let googleuser = googleuser, 17 let userid = googleuser userid, 18 let idtoken = googleuser authentication idtoken 19 else { fatalerror("this should never happen!?") } 20 21 // with the user information returned by google, you need to sign in the user on your back4app application 22 user google login(id userid, idtoken idtoken) { result in 23 // returns the user object asociated to the gidgoogleuser object returned by google 24 switch result { 25 case success(let user) 26 // after the login succeeded, we send the user to the home screen 27 // additionally, you can complete the user information with the data provided by google 28 let homecontroller = homecontroller() 29 homecontroller user = user 30 31 self? navigationcontroller? pushviewcontroller(homecontroller, animated true) 32 case failure(let error) 33 // handle the error if the login process failed 34 self? showmessage(title "failed to sign in", message error message) 35 } 36 } 37 } 38 } 39 } 3 проверка входа пользователя и создания сессии чтобы убедиться, что вход в систему google сработал, вы можете посмотреть на вашу back4app панель управления и увидеть нового пользователя пользователя , содержащего параметры google authdata authdata вы также можете проверить, что действительная сессия была создана на панели управления, содержащей указатель на соответствующий пользователь пользователь объект 4 привязка существующего пользователя к учетной записи google в случае, если ваше ios приложение требует ассоциации учетной записи google с существующим пользователем на вашей back4app платформе, объект parsegoogle\<user> parsegoogle\<user> реализует метод link(id\ completion ) link(id\ completion ) , в который вы передаете id id учетной записи google, которую нужно привязать 1 let googleuserid string // the id of the google account to link to 2 3 user google link(id googleuserid) { \[weak self] result in 4 switch result { 5 case success(let user) 6 // linking succeeded, user object now is linked to the corresponding google account 7 case failure(let error) 8 // linking failed, handle the error 9 } 10 } 5 выход из системы процесс выхода из системы не отличается от стандартного способа вызова метода user signout() user signout() , как описано в предыдущих руководствах однако, когда пользователь входит в систему с учетной записью google, для согласованности вы также должны выйти из текущей учетной записи google мы можем достичь этого, вызвав следующий метод вместе с user signout() user signout() чтобы проверить, есть ли у текущего пользователя связанная учетная запись google, вы можете сделать это, посмотрев на user current? authdata user current? authdata словарь 6 запустите приложение вы можете перейти в этот репозиторий и скачать пример проекта перед запуском проекта убедитесь, что вы настроили профилиprovisioning с теми, которые связаны с вашей учетной записью разработчика заключение в конце этого руководства вы узнали, как войти в систему или привязать существующих back4app пользователей на ios, используя вход с помощью google в следующем руководстве мы продолжим с другим методом входа