iOS
...
Users
Implementación de inicio de sesión Apple con Parse en iOS Swift
12 min
iniciar sesión con apple introducción al integrar métodos de inicio de sesión de terceros en una aplicación ios, es obligatorio agregar la opción de iniciar sesión con apple como una alternativa adicional para este propósito, apple introdujo el authenticationservices marco este marco permite a los desarrolladores integrar sin problemas un iniciar sesión con apple botón en cualquier proyecto de xcode en este repositorio https //github com/templates back4app/ios sign in with apple 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 revisitarlo para más detalles sobre el proyecto requisitos previos para completar este inicio rápido, necesitas una versión reciente de xcode una cuenta de desarrollador de apple con un equipo de desarrollador no personal 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 para integrar una función de inicio de sesión de usuario utilizando el authenticationservices marco y el parseswift sdk 1 configurando el inicio de sesión con apple una vez que tengamos el proyecto de xcode vinculado a la aplicación back4app , procedemos a agregar la capacidad de inicio de sesión con apple para hacer esto, selecciona tu proyecto en el navegador de proyectos y ve a la sección de objetivos selecciona el objetivo principal y ve a la pestaña signing & capabilities , luego haz clic en el botón + capability y agrega la capacidad de sign in with apple esta es la única configuración necesaria para comenzar a integrar un iniciar sesión con apple método en una aplicación ios 2 usando el marco authenticationservices con parseswift el flujo de iniciar sesión con apple se puede completar en tres etapas pero antes, agreguemos y configuremos el botón que se utilizará para presentar el iniciar sesión con apple flujo en la logincontroller logincontroller clase agregamos este botón 1 // logincontroller swift file 2 import authenticationservices 3 4 5 class logincontroller uiviewcontroller { 6 7 8 private let signinwithapplebutton uibutton = { 9 let button = uibutton(type system) 10 button setimage(uiimage(named "appleicon"), 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 signinwithapplebutton addtarget(self, action #selector(handlesigninwithapple), for touchupinside) 22 } 23 } 24 25 // mark sign in with apple section 26 extension logincontroller asauthorizationcontrollerdelegate, asauthorizationcontrollerpresentationcontextproviding { 27 @objc fileprivate func handlesigninwithapple() { 28 // todo here we will implement the sign in procedure 29 } 30 31 // asauthorizationcontrollerdelegate 32 33 func authorizationcontroller(controller asauthorizationcontroller, didcompletewithauthorization authorization asauthorization) { 34 // todo handle the sign in result 35 } 36 37 func authorizationcontroller(controller asauthorizationcontroller, didcompletewitherror error error) { 38 showmessage(title "error", message error localizeddescription) 39 } 40 41 // asauthorizationcontrollerpresentationcontextproviding 42 43 func presentationanchor(for controller asauthorizationcontroller) > aspresentationanchor { 44 guard let window = view\ window else { fatalerror("no uiwindow found!") } 45 return window 46 } 47 } tenga en cuenta que el logincontroller logincontroller se ajusta a dos nuevos protocolos asauthorizationcontrollerdelegate asauthorizationcontrollerdelegate y asauthorizationcontrollerpresentationcontextproviding asauthorizationcontrollerpresentationcontextproviding el primer protocolo nos permite delegar el resultado de inicio de sesión a la logincontroller logincontroller clase el segundo protocolo es para determinar la uiwindow uiwindow donde se muestra la hoja de inicio de sesión ahora implementamos el flujo en el handlesigninwithapple() handlesigninwithapple() método en la primera etapa, preparamos la solicitud y el formulario la solicitud se construye mediante la asauthorizationappleidrequest asauthorizationappleidrequest clase obtenemos una instancia de esta clase del asauthorizationappleidprovider asauthorizationappleidprovider proveedor y el formulario mediante la asauthorizationcontrolle asauthorizationcontrolle r clase una vez que tenemos una instancia de la solicitud, debemos proporcionar los alcances que nos interesan hasta ahora, apple solo da acceso al nombre completo y al correo electrónico del usuario por lo tanto, una forma estándar de crear una solicitud es 1 @objc fileprivate func handlesigninwithapple() { 2 let provider = asauthorizationappleidprovider() 3 let request asauthorizationappleidrequest = provider createrequest() 4 request requestedscopes = \[ fullname, email] 5 6 } con esta solicitud, construimos un asauthorizationcontroller asauthorizationcontroller controlador este controlador se encarga de mostrar una hoja donde el usuario se autentica y otorga los permisos correspondientes para completar el proceso de inicio de sesión 1 @objc fileprivate func handlesigninwithapple() { 2 // as requested by apple, we set up the necessary objects to implement the sign in with apple flow 3 // see https //help apple com/developer account/#/devde676e696 for more details 4 let provider = asauthorizationappleidprovider() 5 let request asauthorizationappleidrequest = provider createrequest() 6 request requestedscopes = \[ fullname, email] 7 8 let authorizationcontroller = asauthorizationcontroller(authorizationrequests \[request]) 9 authorizationcontroller delegate = self // here self is a reference to logincontroller 10 authorizationcontroller presentationcontextprovider = self // here self is a reference to logincontroller 11 12 // presents the sign in with apple sheet and the result will be handled by the asauthorizationcontrollerdelegate delegate 13 authorizationcontroller performrequests() 14 } en la última etapa manejamos el resultado del inicio de sesión esto se devuelve a través del método delegado authorizationcontroller(controller\ didcompletewithauthorization ) authorizationcontroller(controller\ didcompletewithauthorization ) el último argumento en este método es una asauthorization asauthorization clase que contiene toda la información necesaria sobre el apple id y las credenciales esta etapa es donde asociamos un user user objeto y realizamos el inicio de sesión en la back4app back4app aplicación este user user objeto tiene la siguiente estructura (ver la guía de inicio de sesión 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 } ahora, creamos un usuario usuario objeto a partir de los datos contenidos en el asauthorization asauthorization resultado logramos esto instanciando un parseapple parseapple objeto (de user apple user apple ) y llamamos al login(user\ identitytoken ) login(user\ identitytoken ) método 1 // mark sign in with apple section 2 extension logincontroller asauthorizationcontrollerdelegate, asauthorizationcontrollerpresentationcontextproviding { 3 4 // asauthorizationcontrollerdelegate 5 6 func authorizationcontroller(controller asauthorizationcontroller, didcompletewithauthorization authorization asauthorization) { 7 // we cast the (asauthorization) authorization object to an asauthorizationappleidcredential object 8 guard let credential = authorization credential as? asauthorizationappleidcredential else { 9 return showmessage(title "sign in with apple", message "invalid credential") 10 } 11 12 guard let identitytoken = credential identitytoken else { 13 return showmessage(title "sign in with apple", message "token not found") 14 } 15 16 // we log in the user with the token generated by apple 17 user apple login(user credential user, identitytoken identitytoken) { \[weak self] result in 18 switch result { 19 case success(let user) 20 // after the login succeeded, we send the user to the home screen 21 // additionally, you can complete the user information with the data provided by apple 22 let homecontroller = homecontroller() 23 homecontroller user = user 24 25 self? navigationcontroller? pushviewcontroller(homecontroller, animated true) 26 case failure(let error) 27 self? showmessage(title "error", message error message) 28 } 29 } 30 } 31 } 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 aplicación y ver el nuevo usuario usuario que contiene los authdata authdata parámetros 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 un apple id en caso de que tu aplicación ios requiera relacionar un apple id con un usuario existente en tu back4app plataforma, el parseapple\<usuario> parseapple\<usuario> objeto implementa el método link(user\ identitytoken\ completion ) link(user\ identitytoken\ completion ) donde pasas el valor de usuario usuario y el identitytoken identitytoken de una asauthorizationappleidcredential asauthorizationappleidcredential credencial 1 let credential asauthorizationappleidcredential 2 3 guard let identitytoken = credentials identitytoken else { 4 return showmessage(title "sign in with apple", message "token not found") 5 } 6 7 user apple link(user credential user, identitytoken identitytoken){ result in 8 switch result { 9 case success(let user) 10 // linking succeeded, user object now is linked to the corresponding apple id 11 case failure(let error) 12 // linking failed, handle the error 13 } 14 } 5 ejecuta 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 apple