Platform
Regístrate con Apple
15 min
tutorial de inicio de sesión con apple introducción el inicio de sesión con apple permite a los usuarios iniciar sesión en aplicaciones utilizando su id de apple esta función está disponible en ios 13 y versiones posteriores, y parse 3 5 y versiones posteriores requisitos previos para completar este tutorial, necesitarás una aplicación creada en back4app consulta el tutorial de crear nueva aplicación para aprender cómo crear una aplicación en back4app configura un subdominio para tu aplicación de back4app consulta activar tu alojamiento web y consulta en vivo para aprender cómo crear un subdominio en back4app una cuenta de desarrollador de apple 1 crear una nueva aplicación en back4app primero que nada, es necesario asegurarse de que tienes una aplicación existente creada en back4app sin embargo, si eres un nuevo usuario, puedes consultar este tutorial https //www back4app com/docs/get started/new parse app para aprender cómo crear una 2 agrega la capacidad de iniciar sesión con apple a tu proyecto de xcode en tu proyecto de xcode, haz clic en el target (1) y ve a la pestaña de firmado y capacidades (2) haz clic en el + capacidad + capacidad botón (3) y agrega la iniciar sesión con apple iniciar sesión con apple capacidad (4) mientras estés allí, elige tu identificador de paquete identificador de paquete (5) y guarda esa información porque la necesitaremos más tarde 3 crea un nuevo id de servicio inicia sesión en tu cuenta de desarrollador de apple https //developer apple com/ y ve a la sección de identificadores identificadores verifica si tu identificador de paquete identificador de paquete creado está allí haz clic en el identificador de paquete identificador de paquete y desplázate hacia abajo verifica si la iniciar sesión con apple iniciar sesión con apple está seleccionada haz clic editar editar y asegúrate de que el habilitar como id de app principal habilitar como id de app principal esté seleccionado si todo está bien, guarda y sal 4 configurar parse auth para apple ve al sitio web de back4app, inicia sesión y luego encuentra tu aplicación después de eso, haz clic en configuración del servidor configuración del servidor busca el bloque de inicio de sesión de apple inicio de sesión de apple y selecciona configuraciones configuraciones la sección de inicio de sesión de apple inicio de sesión de apple se ve así ahora, solo necesitas pegar tu id de paquete id de paquete en el campo de abajo y hacer clic en el botón para guardar ¡en caso de que enfrentes algún problema al integrar el inicio de sesión de apple, por favor contacta a nuestro equipo a través del chat! 5 opción 1 descarga nuestra plantilla hay algo de codificación involucrada en hacer que el inicio de sesión con apple funcione, así que creamos esta plantilla https //github com/templates back4app/parsesigninwithapple que puedes descargar, y cambiar el identificador de paquete identificador de paquete , el id de la aplicación id de la aplicación , y clave del cliente clave del cliente el código está completamente documentado, por lo que es un buen punto de partida si prefieres leer este documento, por favor continúa al siguiente paso 6 opción 2 escribir código manualmente dentro de tu vista, agrega el marco authenticationservices y crea el authdelegate que manejará el pfuserauthenticationdelegate 1 import authenticationservices 2 3 class authdelegate\ nsobject, pfuserauthenticationdelegate { 4 func restoreauthentication(withauthdata authdata \[string string]?) > bool { 5 return true 6 } 7 8 func restoreauthenticationwithauthdata(authdata \[string string]?) > bool { 9 return true 10 } 11 } 7 implementa tus delegados para el viewcontroller implementa el asauthorizationcontrollerdelegate y asauthorizationcontrollerpresentationcontextproviding para el viewcontroller 1 class viewcontroller uiviewcontroller, asauthorizationcontrollerdelegate, asauthorizationcontrollerpresentationcontextproviding 8 agregar el botón iniciar sesión con apple el viewdidappear es un buen lugar para ello si eliges otros lugares, recuerda llamarlo solo una vez 1 override func viewdidappear( animated bool) { 2 super viewdidappear(animated) 3 4 // sign in with apple button 5 let signinwithapplebutton = asauthorizationappleidbutton() 6 7 // set this so the button will use auto layout constraint 8 signinwithapplebutton translatesautoresizingmaskintoconstraints = false 9 10 // add the button to the view controller root view 11 self view\ addsubview(signinwithapplebutton) 12 13 // set constraint 14 nslayoutconstraint activate(\[ 15 signinwithapplebutton leadinganchor constraint(equalto view\ safearealayoutguide leadinganchor, constant 50 0), 16 signinwithapplebutton trailinganchor constraint(equalto view\ safearealayoutguide trailinganchor, constant 50 0), 17 signinwithapplebutton bottomanchor constraint(equalto view\ safearealayoutguide bottomanchor, constant 70 0), 18 signinwithapplebutton heightanchor constraint(equaltoconstant 50 0) 19 ]) 20 21 // the function that will be executed when user tap the button 22 signinwithapplebutton addtarget(self, action #selector(applesignintapped), for touchupinside) 23 } el applesignintapped en la última línea también debe definirse dentro de la clase viewcontroller 1 // this is the function that will be executed when user taps the button 2 @objc func applesignintapped() { 3 let provider = asauthorizationappleidprovider() 4 let request = provider createrequest() 5 // request full name and email from the user's apple id 6 request requestedscopes = \[ fullname, email] 7 8 // pass the request to the initializer of the controller 9 let authcontroller = asauthorizationcontroller(authorizationrequests \[request]) 10 11 // similar to delegate, this will ask the view controller 12 // which window to present the asauthorizationcontroller 13 authcontroller presentationcontextprovider = self 14 15 // delegate functions will be called when user data is 16 // successfully retrieved or error occured 17 authcontroller delegate = self 18 19 // show the sign in with apple dialog 20 authcontroller performrequests() 21 } 9 el presentationcontextprovider el presentationcontextprovider (asauthorizationcontrollerpresentationcontextproviding) preguntará qué ventana debe mostrar el diálogo de autorización como vamos a mostrarlo en la misma ventana, debemos devolver self view\ window 1 func presentationanchor(for controller asauthorizationcontroller) > aspresentationanchor { 2 // return the current view window 3 return self view\ window! 4 } 10 manejo del delegado asauthorizationcontrollerdelegate hay algunas opciones que debemos manejar cuando se llama al delegado, así que agreguemos algo de código para manejar esas opciones de manera distinta 1 func authorizationcontroller(controller asauthorizationcontroller, didcompletewitherror error error) { 2 print("authorization error") 3 guard let error = error as? asauthorizationerror else { 4 return 5 } 6 7 switch error code { 8 case canceled 9 // user press "cancel" during the login prompt 10 print("canceled") 11 case unknown 12 // user didn't login their apple id on the device 13 print("unknown") 14 case invalidresponse 15 // invalid response received from the login 16 print("invalid respone") 17 case nothandled 18 // authorization request not handled, maybe internet failure during login 19 print("not handled") 20 case failed 21 // authorization failed 22 print("failed") 23 @unknown default 24 print("default") 25 } 26 } 11 manejo del delegado para didcompletewithauthorization cuando autenticamos con éxito, podemos recuperar la información autorizada 1 func authorizationcontroller(controller asauthorizationcontroller, didcompletewithauthorization authorization asauthorization) { 2 3 if let appleidcredential = authorization credential as? asauthorizationappleidcredential { 4 // unique id for each user, this uniqueid will always be returned 5 let userid = appleidcredential user 6 print("userid " + userid) 7 8 // if needed, save it to user defaults by uncommenting the line below 9 //userdefaults standard set(appleidcredential user, forkey "userid") 10 11 // optional, might be nil 12 let email = appleidcredential email 13 print("email " + (email ?? "no email") ) 14 15 // optional, might be nil 16 let givenname = appleidcredential fullname? givenname 17 print("given name " + (givenname ?? "no given name") ) 18 19 // optional, might be nil 20 let familyname = appleidcredential fullname? familyname 21 print("family name " + (familyname ?? "no family name") ) 22 23 // optional, might be nil 24 let nickname = appleidcredential fullname? nickname 25 print("nick name " + (nickname ?? "no nick name") ) 26 / 27 useful for server side, the app can send identitytoken and authorizationcode 28 to the server for verification purpose 29 / 30 var identitytoken string? 31 if let token = appleidcredential identitytoken { 32 identitytoken = string(bytes token, encoding utf8) 33 print("identity token " + (identitytoken ?? "no identity token")) 34 } 35 36 var authorizationcode string? 37 if let code = appleidcredential authorizationcode { 38 authorizationcode = string(bytes code, encoding utf8) 39 print("authorization code " + (authorizationcode ?? "no auth code") ) 40 } 41 42 // do what you want with the data here 43 44 } 45 } ese es el lugar donde también podemos agregar código para iniciar sesión en parse así que justo después del haz lo que quieras con los datos aquí haz lo que quieras con los datos aquí comentario, añadamos 1 pfuser loginwithauthtype(inbackground "apple", authdata \["token" string(identitytoken!), "id" userid]) continuewith { task > any? in 2 if ((task error) != nil){ 3 //dispatchqueue main async { 4 print("could not login \nplease try again ") 5 print("error with parse login after siwa \\(task error! localizeddescription)") 6 //} 7 return task 8 } 9 print("successfuly signed in with apple") 10 return nil 11 } y, por supuesto, añade el marco parse 1 import parse