Middle+
¿Cómo implementar la autorización a través de Apple en una aplicación iOS?
sobes.tech AI
Respuesta de la IA
Para implementar la autenticación con Apple (Iniciar sesión con Apple) en una aplicación iOS, se requieren los siguientes pasos:
-
Configurar la aplicación en el Apple Developer Portal:
- Activar la capacidad "Iniciar sesión con Apple" para tu App ID.
- Generar o actualizar el Perfil de Provisión con la capacidad activada.
-
Añadir la capacidad "Iniciar sesión con Apple" en el proyecto Xcode.
-
Utilizar el framework
AuthenticationServices.
Ejemplo de código para iniciar la solicitud de autenticación:
import AuthenticationServices
@available(iOS 13.0, *)
func performSignInWithApple() {
// Crear proveedor
let appleIDProvider = ASAuthorizationAppleIDProvider()
// Crear solicitudes
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email] // Solicitar nombre y correo del usuario
// Crear controlador para manejar solicitudes
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
// Establecer delegados para manejar respuestas
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
// Iniciar proceso de autenticación
authorizationController.performRequests()
}
// Implementación de delegados
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
// Manejar autenticación exitosa
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
let userIdentifier = appleIDCredential.user // Identificador único de Apple
let fullName = appleIDCredential.fullName // Nombre del usuario
let email = appleIDCredential.email // Correo del usuario (disponible solo en el primer ingreso)
// Aquí puedes enviar userIdentifier y otros datos a tu servidor para verificación y creación/vinculación de cuenta
print("User ID: \(userIdentifier)")
print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
print("Email: \(email ?? "")")
} else if let passwordCredential = authorization.credential as? ASPasswordCredential {
// El usuario usó contraseñas guardadas en iCloud Keychain
let username = passwordCredential.user
let password = passwordCredential.password
// Aquí puedes usar estos datos para iniciar sesión
print("Username: \(username)")
print("Password: \(password)")
}
}
// Manejar error de autenticación
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Falló el inicio de sesión con Apple: \(error.localizedDescription)")
// Aquí manejamos errores (por ejemplo, usuario canceló la autorización)
}
}
// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
// Proporciona la ventana en la que se mostrará la interfaz de autorización
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return view.window! // Es importante devolver una ventana NO nula
}
}
// TODO: Asegúrate de que YourViewController implemente los protocolos necesarios.
- Procesar los datos obtenidos tras una autorización exitosa:
- Usa
userIdentifierpara identificar de forma única al usuario de Apple. fullNameyemailsolo están disponibles en el primer ingreso de ese usuario y tu aplicación. Guárdalos.- Envía
userIdentifier,identityToken(que contiene información para verificar en el servidor) yauthorizationCodea tu servidor para verificar y crear/vincular la cuenta del usuario en tu sistema. - El servidor debe verificar
"identityToken"con Apple para asegurar la autenticidad de la solicitud.
- Usa
Además de la autorización principal, también es importante implementar:
- Manejo del estado de autorización del usuario (por ejemplo, mediante
ASAuthorizationAppleIDProvider().getCredentialState). - La opción de revocar la autorización por parte del usuario.
- La interacción con tu backend para crear/autenticar al usuario tras una autorización exitosa con Apple.
Nota: Sign In with Apple solo está disponible en dispositivos con iOS 13 / macOS Catalina y versiones posteriores. Para versiones más antiguas, se requiere un mecanismo de autenticación alternativo.