Platform
Registrati con Apple
15 min
guida all'accesso con apple introduzione l'accesso con apple consente agli utenti di accedere alle app utilizzando il proprio id apple questa funzionalità è disponibile su ios 13 e versioni successive, e parse 3 5 e versioni successive requisiti per completare questa guida, avrai bisogno di un'app creata su back4app vedi il tutorial per creare una nuova app per imparare come creare un'app su back4app imposta un sottodominio per la tua app back4app vedi attivazione del tuo web hosting e live query per imparare come creare un sottodominio in back4app un account sviluppatore apple 1 crea una nuova app back4app prima di tutto, è necessario assicurarsi di avere un'app esistente creata su back4app tuttavia, se sei un nuovo utente, puoi controllare questo tutorial https //www back4app com/docs/get started/new parse app per imparare come crearne una 2 aggiungi la funzionalità accedi con apple al tuo progetto xcode nel tuo progetto xcode, fai clic su target (1) e vai alla scheda signing & capabilities (2) fai clic sul + funzionalità + funzionalità pulsante (3) e aggiungi la accedi con apple accedi con apple funzionalità (4) mentre sei lì, scegli il tuo identificatore del pacchetto identificatore del pacchetto (5) e tieni a mente queste informazioni perché ne avremo bisogno più tardi 3 crea un nuovo id servizio accedi al tuo account sviluppatore apple https //developer apple com/ e vai alla sezione identificatori identificatori controlla se il tuo identificatore del pacchetto identificatore del pacchetto creato è presente fai clic su identificatore del pacchetto identificatore del pacchetto e scorri verso il basso controlla se l' accedi con apple accedi con apple è selezionato clicca modifica modifica e assicurati che il abilita come id app principale abilita come id app principale sia selezionato se tutto è corretto, salva e esci 4 configura parse auth per apple vai al sito di back4app, accedi e poi trova la tua app dopo di che, clicca su impostazioni del server impostazioni del server cerca il blocco accesso apple accesso apple e seleziona impostazioni impostazioni la sezione accesso apple accesso apple appare così ora, devi solo incollare il tuo bundle id bundle id nel campo qui sotto e fare clic sul pulsante per salvare nel caso tu abbia problemi durante l'integrazione di apple login, contatta il nostro team tramite chat! 5 opzione 1 scarica il nostro modello c'è un po' di codice coinvolto nel far funzionare il sign in with apple, quindi abbiamo creato questo modello https //github com/templates back4app/parsesigninwithapple che puoi scaricare e modificare il bundle identifier bundle identifier , il app id app id , e client key client key il codice è completamente documentato, quindi è un buon punto di partenza se preferisci leggere questo documento, procedi al passaggio successivo 6 opzione 2 scrivere codice manualmente all'interno della tua vista, aggiungi il framework authenticationservices e crea l'authdelegate che gestirà il 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 i tuoi delegates per il viewcontroller implementa l'asauthorizationcontrollerdelegate e l'asauthorizationcontrollerpresentationcontextproviding per il viewcontroller 1 class viewcontroller uiviewcontroller, asauthorizationcontrollerdelegate, asauthorizationcontrollerpresentationcontextproviding 8 aggiungi il pulsante accedi con apple il viewdidappear è un buon posto per farlo se scegli altri posti, ricorda di chiamarlo solo una volta 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 } l'applesignintapped nell'ultima riga deve essere definito anche all'interno della 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 il presentationcontextprovider il presentationcontextprovider (asauthorizationcontrollerpresentationcontextproviding) chiederà quale finestra dovrebbe visualizzare la finestra di autorizzazione poiché la visualizzeremo nella stessa finestra, dobbiamo restituire self view\ window 1 func presentationanchor(for controller asauthorizationcontroller) > aspresentationanchor { 2 // return the current view window 3 return self view\ window! 4 } 10 gestire il delegato asauthorizationcontrollerdelegate ci sono alcune opzioni che dobbiamo gestire quando viene chiamato il delegato, quindi aggiungiamo del codice per gestire quelle opzioni in modo distinto 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 gestire il delegato per didcompletewithauthorization quando ci autentichiamo con successo, possiamo recuperare le informazioni autorizzate 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 } questo è il posto dove possiamo anche aggiungere codice per il login in parse quindi subito dopo il fai quello che vuoi con i dati qui fai quello che vuoi con i dati qui commento, aggiungiamo 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 naturalmente, aggiungi il framework parse 1 import parse