iOS
...
Users
Integration von „Mit Apple anmelden“ in Swift-Projekte
12 min
mit apple anmelden einführung bei der integration von drittanbieter anmeldemethoden in eine ios app ist es zwingend erforderlich, die option „mit apple anmelden“ als zusätzliche alternative hinzuzufügen zu diesem zweck hat apple das authenticationservices framework eingeführt dieses framework ermöglicht es entwicklern, nahtlos einen mit apple anmelden button in jedes xcode projekt zu integrieren in diesem repository https //github com/templates back4app/ios sign in with apple stellen wir eine einfache xcode vorlage zur verfügung, in der sie die verschiedenen anmeldemethoden testen können, die wir implementieren dieses beispiel wurde bereits im anmeldehandbuch https //www back4app com/docs/ios/parse swift sdk/users/user log in sie können es für weitere details zum projekt erneut besuchen voraussetzungen um dieses schnellstartprojekt abzuschließen, benötigen sie eine aktuelle version von xcode ein apple entwicklerkonto mit einem nicht personalisierten entwicklerteam eine app, die bei back4app erstellt wurde befolgen sie das tutorial für neue parse apps um zu lernen, wie man eine parse app bei back4app erstellt hinweis befolgen sie das tutorial zur installation des parse sdk (swift) um ein xcode projekt zu erstellen, das mit back4app verbunden ist ziel um eine benutzeranmeldefunktion mit dem authenticationservices framework und dem parseswift sdk zu integrieren 1 einrichten der anmeldung mit apple sobald wir das xcode projekt verknüpft mit der back4app anwendung haben, fügen wir die fähigkeit zur anmeldung mit apple hinzu wählen sie dazu ihr projekt im projekt navigator aus und gehen sie zum abschnitt ziele wählen sie das hauptziel aus und gehen sie zum signing & capabilities tab, klicken sie dann auf die + fähigkeit schaltfläche und fügen sie die anmeldung mit apple fähigkeit hinzu dies ist die einzige konfiguration, die erforderlich ist, um eine sign in with apple methode in einer ios app zu integrieren 2 verwendung des authenticationservices frameworks mit parseswift der anmeldefluss mit apple kann in drei phasen abgeschlossen werden aber vorher lassen sie uns die schaltfläche hinzufügen und einrichten, die verwendet werden soll, um den sign in with apple fluss anzuzeigen in der logincontroller logincontroller klasse fügen wir diese schaltfläche hinzu 1 // logincontroller swift file 2 import authenticationservices 3 4 5 class logincontroller uiviewcontroller { 6 7 8 private let signinwithapplebutton uibutton = { 9 let button = uibutton(type system) 10 button setimage(uiimage(named "appleicon"), for normal) 11 button imageview? contentmode = scaleaspectfit 12 return button 13 }() 14 15 override func viewdidload() { 16 super viewdidload() 17 // 18 // layout configuration 19 // 20 21 signinwithapplebutton addtarget(self, action #selector(handlesigninwithapple), for touchupinside) 22 } 23 } 24 25 // mark sign in with apple section 26 extension logincontroller asauthorizationcontrollerdelegate, asauthorizationcontrollerpresentationcontextproviding { 27 @objc fileprivate func handlesigninwithapple() { 28 // todo here we will implement the sign in procedure 29 } 30 31 // asauthorizationcontrollerdelegate 32 33 func authorizationcontroller(controller asauthorizationcontroller, didcompletewithauthorization authorization asauthorization) { 34 // todo handle the sign in result 35 } 36 37 func authorizationcontroller(controller asauthorizationcontroller, didcompletewitherror error error) { 38 showmessage(title "error", message error localizeddescription) 39 } 40 41 // asauthorizationcontrollerpresentationcontextproviding 42 43 func presentationanchor(for controller asauthorizationcontroller) > aspresentationanchor { 44 guard let window = view\ window else { fatalerror("no uiwindow found!") } 45 return window 46 } 47 } beachten sie, dass der logincontroller logincontroller zwei neuen protokollen entspricht asauthorizationcontrollerdelegate asauthorizationcontrollerdelegate und asauthorizationcontrollerpresentationcontextproviding asauthorizationcontrollerpresentationcontextproviding das erste protokoll ermöglicht es uns, das anmeldeergebnis an die logincontroller logincontroller klasse zu delegieren das zweite protokoll dient dazu, das uiwindow uiwindow zu bestimmen, in dem das anmeldeformular angezeigt wird wir implementieren jetzt den ablauf in der handlesigninwithapple() handlesigninwithapple() methode in der ersten phase bereiten wir die anfrage und das formular vor die anfrage wird von der asauthorizationappleidrequest asauthorizationappleidrequest klasse erstellt wir erhalten eine instanz dieser klasse vom asauthorizationappleidprovider asauthorizationappleidprovider provider und das formular von der asauthorizationcontrolle asauthorizationcontrolle r klasse sobald wir eine instanz der anfrage haben, müssen wir die scopes angeben, an denen wir interessiert sind bisher gewährt apple nur zugriff auf den vollständigen namen und die e mail adresse des benutzers daher ist eine standardmethode zur erstellung einer anfrage 1 @objc fileprivate func handlesigninwithapple() { 2 let provider = asauthorizationappleidprovider() 3 let request asauthorizationappleidrequest = provider createrequest() 4 request requestedscopes = \[ fullname, email] 5 6 } mit dieser anfrage erstellen wir einen asauthorizationcontroller asauthorizationcontroller controller dieser controller ist dafür verantwortlich, ein blatt anzuzeigen, in dem der benutzer sich authentifiziert und die entsprechenden berechtigungen erteilt, um den anmeldeprozess abzuschließen 1 @objc fileprivate func handlesigninwithapple() { 2 // as requested by apple, we set up the necessary objects to implement the sign in with apple flow 3 // see https //help apple com/developer account/#/devde676e696 for more details 4 let provider = asauthorizationappleidprovider() 5 let request asauthorizationappleidrequest = provider createrequest() 6 request requestedscopes = \[ fullname, email] 7 8 let authorizationcontroller = asauthorizationcontroller(authorizationrequests \[request]) 9 authorizationcontroller delegate = self // here self is a reference to logincontroller 10 authorizationcontroller presentationcontextprovider = self // here self is a reference to logincontroller 11 12 // presents the sign in with apple sheet and the result will be handled by the asauthorizationcontrollerdelegate delegate 13 authorizationcontroller performrequests() 14 } in der letzten phase behandeln wir das anmeldeergebnis dies wird über die delegatenmethode zurückgegeben authorizationcontroller(controller\ didcompletewithauthorization ) authorizationcontroller(controller\ didcompletewithauthorization ) das letzte argument in dieser methode ist eine asauthorization asauthorization klasse, die alle notwendigen informationen über die apple id und die anmeldeinformationen enthält in dieser phase verknüpfen wir ein user user objekt und führen die anmeldung in der back4app back4app anwendung durch dieses user user objekt hat die folgende struktur (siehe die anleitung zur anmeldung für weitere details) 1 import parseswift 2 3 struct user parseuser { 4 5 6 var username string? 7 var email string? 8 var emailverified bool? 9 var password string? 10 11 var age int? 12 } jetzt erstellen wir ein user user objekt aus den daten, die im asauthorization asauthorization ergebnis enthalten sind wir erreichen dies, indem wir ein parseapple parseapple objekt instanziieren (aus user apple user apple ) und die login(user\ identitytoken ) login(user\ identitytoken ) methode aufrufen 1 // mark sign in with apple section 2 extension logincontroller asauthorizationcontrollerdelegate, asauthorizationcontrollerpresentationcontextproviding { 3 4 // asauthorizationcontrollerdelegate 5 6 func authorizationcontroller(controller asauthorizationcontroller, didcompletewithauthorization authorization asauthorization) { 7 // we cast the (asauthorization) authorization object to an asauthorizationappleidcredential object 8 guard let credential = authorization credential as? asauthorizationappleidcredential else { 9 return showmessage(title "sign in with apple", message "invalid credential") 10 } 11 12 guard let identitytoken = credential identitytoken else { 13 return showmessage(title "sign in with apple", message "token not found") 14 } 15 16 // we log in the user with the token generated by apple 17 user apple login(user credential user, identitytoken identitytoken) { \[weak self] result in 18 switch result { 19 case success(let user) 20 // after the login succeeded, we send the user to the home screen 21 // additionally, you can complete the user information with the data provided by apple 22 let homecontroller = homecontroller() 23 homecontroller user = user 24 25 self? navigationcontroller? pushviewcontroller(homecontroller, animated true) 26 case failure(let error) 27 self? showmessage(title "error", message error message) 28 } 29 } 30 } 31 } 3 überprüfung der benutzeranmeldung und erstellung der sitzung um sicherzustellen, dass die google anmeldung funktioniert hat, können sie ihr back4app anwendungs dashboard ansehen und den neuen benutzer benutzer mit den facebook authdata authdata parametern sehen sie können auch überprüfen, dass eine gültige sitzung im dashboard erstellt wurde, die einen verweis auf das entsprechende benutzer benutzer objekt enthält 4 verknüpfung eines bestehenden benutzers mit einer apple id falls ihre ios app eine verknüpfung einer apple id mit einem bestehenden benutzer in ihrer back4app plattform erfordert, implementiert das parseapple\<user> parseapple\<user> objekt die methode link(user\ identitytoken\ completion ) link(user\ identitytoken\ completion ) in der sie den benutzer benutzer wert und den identitytoken identitytoken von einer asauthorizationappleidcredential asauthorizationappleidcredential berechtigung übergeben 1 let credential asauthorizationappleidcredential 2 3 guard let identitytoken = credentials identitytoken else { 4 return showmessage(title "sign in with apple", message "token not found") 5 } 6 7 user apple link(user credential user, identitytoken identitytoken){ result in 8 switch result { 9 case success(let user) 10 // linking succeeded, user object now is linked to the corresponding apple id 11 case failure(let error) 12 // linking failed, handle the error 13 } 14 } 5 app ausführen sie können zu diesem repository gehen und das beispielprojekt herunterladen stellen sie vor dem ausführen des projekts sicher, dass sie die bereitstellungsprofile mit denjenigen verknüpfen, die mit ihrem entwicklerkonto verbunden sind fazit am ende dieses leitfadens haben sie gelernt, wie sie sich anmelden oder bestehende back4app benutzer auf ios mit der anmeldung bei apple verknüpfen