Platform
Inscreva-se com a Apple
15 min
tutorial de login com apple introdução o login com apple permite que os usuários façam login em aplicativos usando seu id apple esse recurso está disponível no ios 13 e posterior, e no parse 3 5 e posterior pré requisitos para completar este tutorial, você precisará um aplicativo criado no back4app veja o tutorial de criar novo app para aprender como criar um aplicativo no back4app configurar um subdomínio para seu aplicativo back4app veja ativando seu hospedagem web e consulta ao vivo para aprender como criar um subdomínio no back4app uma conta de desenvolvedor apple 1 criar um novo app no back4app primeiramente, é necessário garantir que você tenha um aplicativo existente criado no back4app no entanto, se você é um novo usuário, pode verificar este tutorial https //www back4app com/docs/get started/new parse app para aprender como criar um 2 adicione a capacidade de fazer login com apple ao seu projeto xcode no seu projeto xcode, clique no target (1) e vá para a aba signing & capabilities (2) clique no + capacidade + capacidade (3) e adicione a fazer login com apple fazer login com apple (4) enquanto estiver lá, escolha seu identificador do pacote identificador do pacote (5) e guarde essa informação porque precisaremos dela mais tarde 3 crie um novo id de serviço faça login na sua conta de desenvolvedor apple https //developer apple com/ e vá para a seção identificadores identificadores verifique se o seu identificador do pacote identificador do pacote criado está lá clique no identificador do pacote identificador do pacote e role para baixo verifique se o fazer login com apple fazer login com apple está selecionado clique editar editar e certifique se de que o ativar como um id de app principal ativar como um id de app principal está selecionado se tudo estiver certo, salve e saia 4 configurar parse auth para apple vá para o site do back4app, faça login e depois encontre seu aplicativo após isso, clique em configurações do servidor configurações do servidor procure pelo bloco login com apple login com apple e selecione configurações configurações a seção login com apple login com apple parece assim agora, você só precisa colar seu bundle id bundle id no campo abaixo e clicar no botão para salvar caso você enfrente algum problema ao integrar o login da apple, entre em contato com nossa equipe via chat! 5 opção 1 baixe nosso modelo há alguma codificação envolvida para fazer o login com a apple funcionar, então criamos este modelo https //github com/templates back4app/parsesigninwithapple que você pode baixar e alterar o identificador do pacote identificador do pacote , o id do app id do app , e chave do cliente chave do cliente o código está totalmente documentado, então é um bom ponto de partida se você preferir ler este documento, por favor, prossiga para a próxima etapa 6 opção 2 escrever código manualmente dentro da sua view, adicione o framework authenticationservices e crie o authdelegate que irá lidar com o 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 implemente seus delegates para o viewcontroller implemente o asauthorizationcontrollerdelegate e asauthorizationcontrollerpresentationcontextproviding para o viewcontroller 1 class viewcontroller uiviewcontroller, asauthorizationcontrollerdelegate, asauthorizationcontrollerpresentationcontextproviding 8 adicione o botão de entrar com a apple o viewdidappear é um bom lugar para isso se você escolher outros lugares, lembre se de chamá lo apenas uma 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 } o applesignintapped na última linha também deve ser definido dentro da classe 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 o presentationcontextprovider o presentationcontextprovider (asauthorizationcontrollerpresentationcontextproviding) irá perguntar qual janela deve exibir o diálogo de autorização como vamos exibi lo na mesma janela, devemos retornar self view\ window 1 func presentationanchor(for controller asauthorizationcontroller) > aspresentationanchor { 2 // return the current view window 3 return self view\ window! 4 } 10 tratando o delegado asauthorizationcontrollerdelegate existem algumas opções que devemos tratar quando o delegado é chamado, então vamos adicionar algum código para lidar com essas opções de forma 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 tratando o delegado para didcompletewithauthorization quando autenticamos com sucesso, podemos recuperar as informações autorizadas 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 } esse é o lugar onde também podemos adicionar código para login no parse então, logo após o faça o que quiser com os dados aqui faça o que quiser com os dados aqui comentário, vamos adicionar 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 } e, claro, adicione o framework parse 1 import parse