Middle+
Como implementar a autenticação através da Apple numa aplicação iOS?
sobes.tech IA
Resposta da IA
Para implementar a autenticação com a Apple (Iniciar sessão com a Apple) numa aplicação iOS, são necessários os seguintes passos:
-
Configurar a aplicação no Apple Developer Portal:
- Ativar a capacidade "Iniciar sessão com a Apple" para o seu App ID.
- Gerar ou atualizar o Perfil de Provisão com a capacidade ativada.
-
Adicionar a capacidade "Iniciar sessão com a Apple" no projeto Xcode.
-
Utilizar o framework
AuthenticationServices.
Exemplo de código para iniciar a solicitação de autenticação:
import AuthenticationServices
@available(iOS 13.0, *)
func performSignInWithApple() {
// Criar provedor
let appleIDProvider = ASAuthorizationAppleIDProvider()
// Criar pedidos
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email] // Solicitar nome e email do utilizador
// Criar controlador para gerir pedidos
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
// Definir delegados para gerir respostas
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
// Iniciar processo de autenticação
authorizationController.performRequests()
}
// Implementação dos delegados
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
// Gerir autenticação bem-sucedida
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
let userIdentifier = appleIDCredential.user // Identificador único da Apple
let fullName = appleIDCredential.fullName // Nome do utilizador
let email = appleIDCredential.email // Email do utilizador (disponível apenas na primeira entrada)
// Aqui pode enviar userIdentifier e outros dados para o seu servidor para verificação e criação/vinculação de conta
print("User ID: \(userIdentifier)")
print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
print("Email: \(email ?? "")")
} else if let passwordCredential = authorization.credential as? ASPasswordCredential {
// O utilizador utilizou passwords guardadas no iCloud Keychain
let username = passwordCredential.user
let password = passwordCredential.password
// Aqui pode usar esses dados para login
print("Username: \(username)")
print("Password: \(password)")
}
}
// Gerir erro de autenticação
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Falha no login com Apple: \(error.localizedDescription)")
// Aqui trata erros (por exemplo, utilizador cancelou a autenticação)
}
}
// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
// Fornece a janela onde será exibida a interface de autenticação
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return view.window! // É importante devolver uma janela NÃO nula
}
}
// TODO: Certifique-se de que YourViewController implementa os protocolos necessários.
- Processar os dados obtidos após uma autenticação bem-sucedida:
- Use
userIdentifierpara identificar de forma única o utilizador Apple. fullNameeemailestão disponíveis apenas na primeira entrada para esse utilizador e sua aplicação. Guarde-os.- Envie
userIdentifier,identityToken(que contém informações para verificar no servidor) eauthorizationCodepara o seu servidor para verificação e criação/vinculação da conta do utilizador no seu sistema. - O servidor deve verificar
"identityToken"com a Apple para garantir a autenticidade da solicitação.
- Use
Além da autenticação principal, também é importante implementar:
- Gestão do estado de autorização do utilizador (por exemplo, através de
ASAuthorizationAppleIDProvider().getCredentialState). - A possibilidade de revogar a autorização pelo utilizador.
- A interação com o seu backend para criar/autenticar o utilizador após uma autenticação bem-sucedida com a Apple.
Nota: Sign In with Apple só está disponível em dispositivos com iOS 13 / macOS Catalina e versões posteriores. Para versões mais antigas, é necessário um mecanismo de autenticação de reserva.