iOS
...
Users
Integración de inicio de sesión con Facebook en iOS
16 min
iniciar sesión con facebook introducción en el guía anterior https //www back4app com/docs/ios/parse swift sdk/users/sign in with google , aprendimos cómo un usuario inicia sesión en una aplicación back4app utilizando una cuenta de google como seguimiento, ahora podemos agregar una alternativa de inicio de sesión que use una cuenta de facebook en su lugar para lograr esto, primero vamos a la página de desarrolladores de facebook y configuramos los requisitos para integrar tal funcionalidad en un proyecto de xcode facebook proporciona un sdk a los desarrolladores para integrar una opción de inicio de sesión con facebook entre diferentes aplicaciones 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 ejemplo ya fue introducido en la guía de inicio de sesión 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 una versión reciente de xcode 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 facebook y parseswift 1 configurando el sdk de facebook una vez que tengamos el proyecto de xcode vinculado a la aplicación back4app , procedemos a agregar el sdk de facebook que nos permitirá implementar el flujo de inicio de sesión para este ejemplo, utilizamos el swift package manager (spm) para agregar las dependencias de facebook login en el proyecto de xcode, ve a archivo>agregar paquetes… y en la barra de búsqueda, busca https //github com/facebook/facebook ios sdk https //github com/facebook/facebook ios sdk una vez que el facebook ios sdk aparezca en los resultados, haz clic en el botón agregar paquete a continuación, ve a la sección de aplicaciones de tu cuenta de desarrollador de facebook y crea una nueva aplicación ingresa el tipo de aplicación al que pertenece tu aplicación y ve a la siguiente página ingresa la información restante y haz clic en crear aplicación mientras estés en tu página de aplicaciones , localiza tu nueva aplicación creada, copia su id de aplicación y entra al panel haciendo clic en su nombre en la parte superior derecha, se encuentra el id de cliente asociado con tu cuenta de desarrollador de facebook estos dos ids son necesarios para la siguiente configuración la siguiente configuración que facebook necesita para establecer la capacidad de inicio de sesión es ingresar un par de datos clave valor en tu archivo xcode info plist más precisamente, ve a tu xcode navegador de proyectos, localiza el info plist y ábrelo como código fuente agrega los siguientes valores 1 cfbundleurltypes 2 3 4 cfbundletyperole 5 editor 6 cfbundleurlschemes 7 	 8 fbapp id 9 10 11 12 facebookappid 13 app id 14 facebookclienttoken 15 client token 16 lsapplicationqueriesschemes 17 18 fbapi 19 fb messenger share api 20 reemplace la app id cadena con el app id asociado a la aplicación recién creada en facebook la client token cadena debe ser reemplazada con el token de cliente ubicado en dashboard>settings>advanced>security>client token ahora tenemos que agregar la keychain sharing capacidad al proyecto de xcode para hacer esto, seleccione su proyecto en el navegador de proyectos y vaya a la sección de objetivos seleccione un objetivo y vaya a la signing & capabilities pestaña, luego haga clic en el + capability botón y agregue la keychain sharing capacidad en el appdelegate , agregamos la siguiente línea en el método delegado application( didfinishlaunchingwithoptions ) (asegúrate de importar el facebookcore framework primero) 1 import facebookcore 2 3 @main 4 class appdelegate uiresponder, uiapplicationdelegate { 5 func application( application uiapplication, didfinishlaunchingwithoptions launchoptions \[uiapplication launchoptionskey any]?) > bool { 6 7 8 applicationdelegate shared application(application, didfinishlaunchingwithoptions launchoptions) 9 return true 10 } 11 12 13 } por último, en el scenedelegate , agregamos el siguiente código para manejar los contextos de url entrantes 1 import facebookcore 2 3 class scenedelegate uiresponder, uiwindowscenedelegate { 4 5 6 func scene( scene uiscene, openurlcontexts urlcontexts set\<uiopenurlcontext>) { 7 guard let url = urlcontexts first? url else { 8 return 9 } 10 11 applicationdelegate shared application( 12 uiapplication shared, 13 open url, 14 sourceapplication nil, 15 annotation \[uiapplication openurloptionskey annotation] 16 ) 17 } 18 } 2 usando facebook login con parseswift con facebooklogin integrado exitosamente en tu proyecto de xcode, procedemos a implementar la función de inicio de sesión con facebook 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 signinwithfacebookbutton 1 // logincontroller swift file 2 import facebooklogin 3 4 5 class logincontroller uiviewcontroller { 6 7 8 private let signinwithfacebookbutton uibutton = { 9 let button = uibutton(type system) 10 button setimage(uiimage(named "facebookicon"), 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 signinwithfacebookbutton addtarget(self, action #selector(handlesigninwithfacebook), for touchupinside) 22 } 23 } 24 25 // mark sign in with facebook section 26 extension logincontroller { 27 @objc fileprivate func handlesigninwithfacebook() { 28 // todo here we will implement the sign in procedure 29 } 30 } para mostrar el formulario de inicio de sesión de facebook, el sdk de facebooklogin nos permite configurarlo y presentarlo a través del signin(with\ presenting\ callback) método de la clase loginmanager debemos pasar un array que contenga valores de tipo string asociados con los datos que queremos recopilar de facebook los valores comunes son public profile y email por otro lado, el segundo parámetro es un cierre de callback donde facebook devuelve las credenciales del usuario (incorporadas en un loginmanagerloginresult objeto) o un error si la autenticación falla 1 // mark sign in with facebook section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithfacebook() { 4 let loginmanager = loginmanager() 5 6 // method provided by the facebook sdk see https //developers facebook com/docs/facebook login/ios/ for more details 7 loginmanager login(permissions \["public profile", "email"], from self) { \[weak self] result, error in 8 if let error = error { 9 self? showmessage(title "error", message error localizeddescription) 10 return 11 } else if let result = result, result iscancelled { 12 self? showmessage(title "alert", message "sign in cancelled") 13 return 14 } 15 16 // once facebook successfully signs in the user, we retrieve the information related to the sign in process via the result token object, an accesstoken class type 17 guard let accesstoken = result? token else { fatalerror("this dhould never hapen ") } 18 19 // todo sign in the user on your back4app application with the accesstoken 20 } 21 } 22 } luego tomamos esta credencial y la usamos para que el usuario inicie sesión en la back4app plataforma el objeto que representa al usuario es la siguiente estructura (ver la guía de inicio de sesión 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 facebook contiene un accesstoken y el id del usuario que se utilizarán para completar el proceso de inicio de sesión más precisamente, instanciamos un objeto parsefacebook\<user> y llamamos al método login(userid\ authenticationtoken\ completion ) 1 // mark sign in with facebook section 2 extension logincontroller { 3 @objc fileprivate func handlesigninwithfacebook() { 4 let loginmanager = loginmanager() 5 6 // method provided by the facebook sdk see https //developers facebook com/docs/facebook login/ios/ for more details 7 loginmanager login(permissions \["public profile", "email"], from self) { \[weak self] result, error in 8 if let error = error { 9 self? showmessage(title "error", message error localizeddescription) 10 return 11 } else if let result = result, result iscancelled { 12 self? showmessage(title "alert", message "sign in cancelled") 13 return 14 } 15 16 // once facebook successfully signed in the user, we retrieve the information related to the sign in process via the result token object, an accesstoken class type 17 guard let accesstoken = result? token else { fatalerror("this dhould never hapen ") } 18 19 // with the accesstoken returned by facebook, you need to sign in the user on your back4app application 20 user facebook login(userid accesstoken userid, accesstoken accesstoken tokenstring) { \[weak self] result in 21 // returns the user object asociated to the facebook user returned by facebook 22 switch result { 23 case success(let user) 24 // after the login succeeded, we send the user to the home screen 25 // additionally, you can complete the user information with the data provided by facebook 26 let homecontroller = homecontroller() 27 homecontroller user = user 28 29 self? navigationcontroller? pushviewcontroller(homecontroller, animated true) 30 case failure(let error) 31 // handle the error if the login process failed 32 self? showmessage(title "failed to sign in", message error message) 33 } 34 } 35 } 36 } 37 } 3 verificando el inicio de sesión del usuario y la creación de la sesión para asegurarte de que el inicio de sesión de google funcionó, puedes mirar tu back4app panel de control de la aplicación y ver el nuevo usuario que contiene los parámetros authdata de facebook también puedes verificar que se creó una sesión válida en el panel de control, que contiene un puntero al objeto user correspondiente 4 vinculando un usuario existente a una cuenta de facebook en caso de que tu aplicación ios requiera asociar una cuenta de facebook a un usuario existente en tu back4app plataforma, el parsefacebook\<user> objeto implementa el método link(id\ accesstoken\ completion ) donde pasas el userid de la cuenta de facebook y el accesstoken asociado con la sesión 1 let facebookuserid string // the userid of the facebook account to link to 2 let accesstoken string = accesstoken current! tokenstring // the access token of the currently signed in facebook user 3 4 user facebook link(userid facebookuserid, accesstoken accesstoken) { result in 5 switch result { 6 case success(let user) 7 // linking succeeded, the user is now linked to the corresponding facebook account 8 case failure(let error) 9 // linking failed, handle the error 10 } 11 } 5 cerrar sesión el proceso de cierre de sesión no varía de la forma estándar de llamar al método user signout() (detallado en guías anteriores) sin embargo, cuando un usuario inicia sesión con una cuenta de facebook, por consistencia, también debes cerrar sesión del usuario de facebook actual podemos lograr esto llamando al siguiente método junto con user signout() para verificar si el usuario actual tiene una cuenta de facebook vinculada, puedes comprobarlo mirando el diccionario user current? authdata 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 facebook en la próxima guía, continuaremos con un método de inicio de sesión diferente