iOS
...
Users
Implementación de inicio de sesión Google en iOS con ParseSwift
13 min
iniciar sesión con google introducción hoy en día, es común que las aplicaciones ofrezcan más de un tipo de método de inicio de sesión por lo tanto, para los usuarios es más fácil iniciar sesión con una cuenta que ya tienen, como una cuenta de google o un id de apple además, las redes sociales (como facebook) ponen a disposición un sdk para que los desarrolladores integren una opción de inicio de sesión utilizando sus credenciales de red social comenzamos esta guía integrando primero la función de inicio de sesión proporcionada por google después de que el usuario haya iniciado sesión con éxito con su credencial de google, utilizamos la información de la cuenta devuelta por google para iniciar sesión a un nuevo usuario que estará asociado con la cuenta de google correspondiente en este repositorio , proporcionamos una plantilla simple de xcode donde puedes probar los diferentes métodos de inicio de sesión que estamos implementando este proyecto ya fue introducido en la guía anterior https //www back4app com/docs/ios/parse swift sdk/users/user log in , puedes revisitarla para más detalles sobre el proyecto requisitos previos para completar este inicio rápido, necesitas xcode una aplicación creada en back4app sigue el tutorial de nueva aplicación parse para aprender cómo crear una aplicación parse en back4app nota sigue el tutorial de instalación del sdk de parse (swift) para crear un proyecto de xcode conectado a back4app objetivo integrar una función de inicio de sesión de usuario utilizando el sdk de google y parseswift 1 configurando el sdk de google una vez que tengamos el proyecto de xcode vinculado a la back4app aplicación, procedemos a agregar el sdk de google que nos permitirá implementar el flujo de inicio de sesión para este ejemplo, utilizamos el gestor de paquetes de swift (spm) para agregar dependencias de google sign in en el proyecto de xcode, ve a archivo>añadir paquetes… y en la barra de búsqueda, busca https //github com/google/googlesignin ios una vez que la googlesignin ios opción aparezca en los resultados, haz clic en el add package botón a continuación, ve al tablero de tu cuenta de desarrollador de google y crea un nuevo proyecto una vez que se haya creado el proyecto, el siguiente paso es crear un id de cliente oauth en la consola de google cloud selecciona tu nuevo proyecto y ve a la página de credenciales esto se puede encontrar en el menú de la izquierda durante este proceso, es posible que necesites configurar la pantalla de consentimiento de oauth que aparecerá en el formulario de inicio de sesión con google y completar los requisitos correspondientes en consecuencia para concluir este paso, tenemos que agregar en los esquemas de url de la aplicación la url generada durante la creación del id de cliente oauth ve a la configuración del proyecto y selecciona el objetivo principal de la aplicación luego ve a la info sección y agrega el esquema de url correspondiente de tu proyecto de google 2 usando google sign in con parseswift con googlesignin integrado exitosamente en tu proyecto de xcode, procedemos a implementar la función de inicio de sesión con google en el ejemplo del proyecto , el logincontroller se encarga de manejar y mostrar las diferentes opciones de inicio de sesión luego configuramos la acción signinwithapplebutton en este controlador 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 } para mostrar el formulario de inicio de sesión de google, el googlesignin googlesignin sdk nos permite configurarlo y presentarlo a través del signin(with\ presenting\ callback) signin(with\ presenting\ callback) método de la gidsignin gidsignin clase además, tenemos que pasar un gidconfiguration gidconfiguration objeto instanciado utilizando el client id creado en el paso anterior, luego el controlador de vista que presenta, y un cierre de callback en el cierre de callback, google devuelve las credenciales del usuario (embebidas en un gidgoogleuser gidgoogleuser objeto) o un error si la autenticación falló 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 } luego tomamos estas credenciales y las usamos para iniciar sesión al usuario en la plataforma back4app el objeto que representa al usuario es la siguiente estructura (ver la guía anterior https //www back4app com/docs/ios/parse swift sdk/users/user log in para más detalles) 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 } por lo tanto, la credencial devuelta por google contiene un idtoken idtoken y el id id del usuario que se utilizará para completar el proceso de inicio de sesión más precisamente, instanciamos un parsegoogle\<user> parsegoogle\<user> objeto y llamamos al login(id\ idtoken\ completion) login(id\ idtoken\ completion) método 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 verificando el inicio de sesión del usuario y la creación de sesión para asegurarte de que el inicio de sesión de google funcionó, puedes mirar tu back4app panel de aplicación y ver el nuevo usuario usuario , que contiene los authdata authdata de google también puedes verificar que se creó una sesión válida en el panel, que contiene un puntero al correspondiente usuario usuario objeto 4 vinculando un usuario existente a una cuenta de google en caso de que tu aplicación ios requiera que asocies una cuenta de google con un usuario existente en tu back4app plataforma, el parsegoogle\<user> parsegoogle\<user> objeto implementa el método link(id\ completion ) link(id\ completion ) donde pasas el id id de la cuenta de google que se va a vincular 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 cerrar sesión el proceso de cierre de sesión no varía de la forma estándar de llamar al user signout() user signout() método (detallado en guías anteriores) sin embargo, cuando un usuario inicia sesión con una cuenta de google, por consistencia, también debes cerrar sesión en el usuario de google actual podemos lograr esto llamando al siguiente método junto con user signout() user signout() para verificar si el usuario actual tiene una cuenta de google vinculada, puedes comprobarlo mirando el user current? authdata user current? authdata diccionario 6 ejecutar la aplicación puedes ir a este repositorio y descargar el proyecto de ejemplo antes de ejecutar el proyecto, asegúrate de configurar los perfiles de aprovisionamiento con los asociados a tu cuenta de desarrollador conclusión al final de esta guía, aprendiste cómo iniciar sesión o vincular usuarios existentes de back4app en ios utilizando el inicio de sesión con google en la próxima guía, continuaremos con un método de inicio de sesión diferente