Platform
Inscription avec Apple
15 min
tutoriel de connexion avec apple introduction la connexion avec apple permet aux utilisateurs de se connecter à des applications en utilisant leur identifiant apple cette fonctionnalité est disponible sur ios 13 et versions ultérieures, et parse 3 5 et versions ultérieures prérequis pour compléter ce tutoriel, vous aurez besoin de une application créée sur back4app voir le https //www back4app com/docs/get started/new parse app pour apprendre à créer une application sur back4app configurer un sous domaine pour votre application back4app voir https //www back4app com/docs/platform/activating web hosting pour apprendre à créer un sous domaine dans back4app un https //developer apple com/ 1 créer une nouvelle application back4app tout d'abord, il est nécessaire de s'assurer que vous avez une application existante créée sur back4app cependant, si vous êtes un nouvel utilisateur, vous pouvez consulter https //www back4app com/docs/get started/new parse app pour apprendre à en créer une 2 ajoutez la capacité se connecter avec apple à votre projet xcode dans votre projet xcode, cliquez sur la cible (1) et allez à l'onglet signing & capabilities (2) cliquez sur le + capacité + capacité bouton (3) et ajoutez la se connecter avec apple se connecter avec apple capacité (4) pendant ce temps, choisissez votre identifiant de bundle identifiant de bundle (5) et conservez cette information car nous en aurons besoin plus tard 3 créez un nouvel identifiant de service connectez vous à votre https //developer apple com/ et allez à la section identifiants identifiants vérifiez si votre identifiant de bundle identifiant de bundle créé est là cliquez sur l' identifiant de bundle identifiant de bundle et faites défiler vers le bas vérifiez si le se connecter avec apple se connecter avec apple est sélectionné cliquez modifier modifier et assurez vous que le activer en tant qu'id d'application principal activer en tant qu'id d'application principal est sélectionné si tout est correct, enregistrez et quittez 4 configurer l'authentification parse pour apple allez sur le site back4app, connectez vous, puis trouvez votre application après cela, cliquez sur paramètres du serveur paramètres du serveur recherchez le bloc connexion apple connexion apple et sélectionnez paramètres paramètres la section connexion apple connexion apple ressemble à ceci maintenant, vous devez simplement coller votre bundle id bundle id dans le champ ci dessous et cliquer sur le bouton pour enregistrer en cas de problème lors de l'intégration de la connexion apple, veuillez contacter notre équipe via le chat ! 5 option 1 téléchargez notre modèle il y a un peu de codage impliqué pour faire fonctionner la connexion avec apple, donc nous avons créé https //github com/templates back4app/parsesigninwithapple que vous pouvez télécharger, et changer le bundle identifier bundle identifier , le app id app id , et client key client key le code est entièrement documenté, donc c'est un bon point de départ si vous préférez lire ce document, veuillez passer à l'étape suivante 6 option 2 écrire le code manuellement dans votre vue, ajoutez le framework authenticationservices et créez le authdelegate qui gérera le 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 implémentez vos délégués pour le viewcontroller implémentez le asauthorizationcontrollerdelegate et le asauthorizationcontrollerpresentationcontextproviding pour le viewcontroller 1 class viewcontroller uiviewcontroller, asauthorizationcontrollerdelegate, asauthorizationcontrollerpresentationcontextproviding 8 ajouter le bouton se connecter avec apple le viewdidappear est un bon endroit pour cela si vous choisissez d'autres endroits, n'oubliez pas de l'appeler une seule fois 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 } le applesignintapped dans la dernière ligne doit également être défini à l'intérieur de la 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 le presentationcontextprovider le presentationcontextprovider (asauthorizationcontrollerpresentationcontextproviding) demandera quelle fenêtre doit afficher la boîte de dialogue d'autorisation comme nous allons l'afficher dans la même fenêtre, nous devons retourner self view\ window 1 func presentationanchor(for controller asauthorizationcontroller) > aspresentationanchor { 2 // return the current view window 3 return self view\ window! 4 } 10 gestion du délégué asauthorizationcontrollerdelegate il y a quelques options que nous devons gérer lorsque le délégué est appelé, alors ajoutons du code pour gérer ces options de manière distincte 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 gestion du délégué pour didcompletewithauthorization lorsque nous authentifions avec succès, nous pouvons récupérer les informations autorisées 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 } c'est l'endroit où nous pouvons également ajouter du code pour se connecter à parse donc juste après le faites ce que vous voulez avec les données ici faites ce que vous voulez avec les données ici commentaire, ajoutons 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 } et bien sûr, ajoutez le framework parse 1 import parse