Faça login com a Apple — implemente-o em seu aplicativo!
Publicados: 2020-01-14Entrar com a Apple — um novo recurso apresentado pela Apple na WWDC no ano passado, já está disponível a partir do iOS 13. Esse recurso oferece registro de conta simples e seguro e login no aplicativo ou site. Em vez de preencher formulários de registro ou fazer login via mídia social, agora você pode criar uma conta e fazer login com seu ID Apple e verificar por Face ID, Touch ID ou senha.
Uma breve descrição de Entrar com a Apple:
- Configuração e login de conta rápidos e fáceis
- Endereços de e-mail verificados
- Segurança embutida
- Anti-fraude
- Multiplataforma ️
- iOS 13+
Neste artigo, focarei na implementação básica do Sign In With Apple em dispositivos iOS sem integração com a versão web ou integração com o back-end.
Como funciona o recurso “Entrar com a Apple”?

Após tocar em “Sign In With Apple” ou “Continue with Apple” (depende de qual botão foi escolhido para ser implementado no aplicativo) uma janela de informações aparece com as possibilidades desta solução (segunda captura de tela). Então, depois de tocar em “Continuar”, obtemos informações sobre quais dados serão compartilhados com o proprietário do aplicativo.
Aqui temos duas opções para registrar uma conta no aplicativo usando Sign In With Apple:
- Ao compartilhar nosso endereço de e-mail — seu endereço de e-mail real será compartilhado com o aplicativo ou site.
- Ao ocultar nosso endereço de e-mail, seu e-mail real não será compartilhado com o aplicativo ou site. A Apple irá gerar um e-mail exclusivo para você com o domínio @privaterelay.appleid.com. Não se preocupe, todos os e-mails do proprietário do aplicativo serão encaminhados para sua caixa de entrada de qualquer maneira, porque os e-mails serão encaminhados para nosso endereço de e-mail real. O proprietário do aplicativo saberá apenas o endereço de e-mail gerado com o domínio da Apple
Depois de selecionar uma das opções e tocar em “Continuar”, verificamos nosso ID Apple como no caso de desbloquear o telefone, ou seja, por Face ID, Touch ID ou digitando a senha. Neste momento, deverá ser criada uma conta na aplicação/site com um identificador único para o utilizador.

Quando você usou no aplicativo o “Sign In With Apple” antes, você pode visualizar os detalhes dessa forma de fazer login nas configurações e parar de usar esse recurso. Para fazer isso, vá para Configurações> ID Apple> Senha e segurança> Aplicativos usando seu ID Apple> Escolher aplicativo.
Como implementar “Entrar com a Apple”?
Depois de ler a parte teórica de “Sign In With Apple”, podemos proceder à implementação

Antes de tudo, você precisa abrir “Assinatura e recursos” em seu projeto, pressione + e adicione o recurso “Entrar com a Apple”.

A Apple na palestra da WWDC dividiu o processo de implementação desse recurso em quatro etapas. Todas as etapas estão descritas a seguir.
1. Botão
No início, temos que adicionar um botão à nossa tela. Este deve ser o botão ASAuthorizationAppleIDButton
da estrutura AuthenticationService
. Está disponível em duas cores (branco e preto) com títulos diferentes. Ao botão, devemos adicionar uma ação que deve ser invocada depois de tocá-lo. Descrevo a ação de autorização no segundo ponto.
importar serviços de autenticação botão let = ASAuthorizationAppleIDButton(type: .signIn, style: .white) button.addTarget(self, action: #selector(appleIdButtonClicked), for: .touchUpInside) stackView.addArrangedSubview(botão)
2. Autorização ️
Aqui criamos uma solicitação de autorização, na qual conforme requestedScopes
fornecemos apenas as informações necessárias para criar uma conta em nosso aplicativo ou site. No meu caso, este é o nome completo e o endereço de e-mail. Em seguida, defina o delegado e faça a solicitação.
@objc func appleIdButtonClicked() { let request = ASAuthorizationAppleIDProvider().createRequest() request.requestedScopes = [.fullName, .email] let controller = ASAuthorizationController(authorizationRequests: [request]) controller.delegate = self controller.presentationContextProvider = self controller.performRequests() }
3. Verificação
Após uma verificação rápida por Face ID, Touch ID ou senha, o resultado da autorização será retornado. Quando a autorização for bem sucedida, o método didCompleteWithAuthorization
retornará um objeto do tipo AppleIdCredential
. Então você precisa verificar se são credenciais do tipo ASAuthorizationAppleIdCredential
— se sim, neste objeto encontraremos todos os dados necessários para configurar uma conta em nosso sistema, como o ID único do usuário, nome completo e endereço de e-mail (que o usuário havia solicitado anteriormente). Neste ponto, podemos continuar a criar uma conta em nosso sistema, fornecendo apenas as informações necessárias. Se ocorrer um erro, ele será retornado no método didCompleteWithError
, onde podemos tratar esse erro.

func autorizaçãoController(controlador: ASAuthorizationController, didCompleteWithAuthorization autorização: ASAuthorization) { se deixar appleIDCredential = autorização.credential como? ASAautorizaçãoAppleIDCredential { // Crie uma conta em seu sistema. } else if let passwordCredential = authorization.credential as? ASPasswordCredential { // Faça login usando uma credencial de Chaves do iCloud existente. } } func authorizationController(controlador: ASAuthorizationController, didCompleteWithError erro: Erro) { imprimir(erro) }
4. Manipulação de alterações
Você deve estar preparado para o fato de que o usuário, por exemplo, parou de usar o login do aplicativo usando um ID Apple. Isso deve ser tratado adequadamente depois que o usuário reiniciar o aplicativo.
Usando o ID do usuário que recebemos durante o registro da conta, podemos obter o estado atual da credencial do ID Apple invocando o método getCredentialState
muito rapidamente. Este método pode retornar três estados:
-
authorized
— um usuário autorizado que pode continuar usando o aplicativo. -
revoked
— desconecte o usuário e, opcionalmente, você pode levá-lo à tela de login para fazer login novamente. -
notFound
— significa que o usuário não usou anteriormente “Entrar com a Apple”. Neste ponto, mostre também ao usuário a tela de login.
A invocação do método getCredentialState
deve estar em AppDelegate
no método didFinishLaunchingWithOptions
.
Além disso, a Apple fornece Notificação, na qual informa quando as credenciais foram revogadas e, em seguida, devemos tratá-lo da maneira mencionada acima para esse status.
appleIDProvider.getCredentialState(forUserID: userId) { credentialState, erro em mudar credencialState { caso .autorizado: // A credencial do ID Apple é válida. caso .revogado: // A credencial do ID Apple foi revogada, faça logout. caso .notFound: // Nenhuma credencial foi encontrada, então mostre a IU de login. predefinição: parar } } // Registre-se para notificação de revogação NotificationCenter.default.addObserver(forName: NSNotification.Name.ASAuthorizationAppleIDProviderCredentialRevoked, objeto: zero, fila: nil) { _ in // Desconecta o usuário, opcionalmente orienta-o a entrar novamente }
Depois de implementar todos os quatro estágios no meu aplicativo de exemplo, tudo funciona e fica assim:

Tenho que adicionar “Entrar com a Apple” ao meu aplicativo?
Se seu aplicativo usa um método de login de terceiros, como Facebook, Google ou LinkedIn, você também deve adicionar Entrar com a Apple de acordo com as novas diretrizes. Se você não adicioná-lo, sua inscrição poderá ser rejeitada e não poderá ser analisada pela Apple. Abaixo está um link para as notícias e uma citação das diretrizes.
Novas diretrizes para fazer login com a Apple — 12 de setembro de 2019 ️
A partir de hoje, novos aplicativos enviados à App Store devem seguir essas diretrizes. Aplicativos e atualizações de aplicativos existentes devem segui-los até abril de 2020.
Abaixo estão os aplicativos que oferecem login usando o novo recurso da Apple, claro, há mais e mais deles todos os dias

Você pode conferir todo o projeto no meu GitHub aqui.
Fontes:
- https://developer.apple.com/videos/play/wwdc2019/706/
- https://developer.apple.com/videos/play/wwdc2019/516
- https://developer.apple.com/sign-in-with-apple/get-started/
- https://developer.apple.com/news/?id=09122019b
- https://developer.apple.com/app-store/review/guidelines/#sign-in-with-apple