Platform
Зарегистрироваться с Apple
15 мин
учебник по входу с apple введение вход с apple позволяет пользователям входить в приложения, используя свой apple id эта функция доступна на ios 13 и более поздних версиях, а также на parse 3 5 и более поздних версиях предварительные требования для завершения этого учебника вам потребуется приложение, созданное на back4app смотрите https //www back4app com/docs/get started/new parse app чтобы узнать, как создать приложение на back4app настройте поддомен для вашего приложения back4app смотрите https //www back4app com/docs/platform/activating web hosting чтобы узнать, как создать поддомен в back4app учетная запись https //developer apple com/ 1 создайте новое приложение back4app прежде всего, необходимо убедиться, что у вас есть существующее приложение, созданное на back4app однако, если вы новый пользователь, вы можете ознакомиться с https //www back4app com/docs/get started/new parse app чтобы узнать, как создать одно 2 добавьте возможность входа с помощью apple в ваш проект xcode в вашем проекте xcode нажмите на target (1) и перейдите на вкладку signing & capabilities (2) нажмите кнопку + возможность + возможность (3) и добавьте возможность вход с помощью apple вход с помощью apple (4) пока вы там, выберите ваш идентификатор пакета идентификатор пакета (5) и сохраните эту информацию, потому что она нам понадобится позже 3 создайте новый идентификатор службы войдите в свой https //developer apple com/ и перейдите в раздел идентификаторы идентификаторы проверьте, есть ли ваш созданный идентификатор пакета идентификатор пакета там нажмите на идентификатор пакета идентификатор пакета и прокрутите вниз проверьте, выбран ли вход с помощью apple вход с помощью apple нажмите редактировать редактировать и убедитесь, что включить как основной идентификатор приложения включить как основной идентификатор приложения выбран если все верно, сохраните и выйдите 4 настройка parse auth для apple перейдите на сайт back4app, войдите в систему и найдите ваше приложение после этого нажмите на настройки сервера настройки сервера найдите блок вход через apple вход через apple и выберите настройки настройки раздел вход через apple вход через apple выглядит так теперь вам просто нужно вставить ваш bundle id bundle id в поле ниже и нажать кнопку для сохранения если у вас возникнут проблемы при интеграции apple login, пожалуйста, свяжитесь с нашей командой через чат! 5 вариант 1 скачайте наш шаблон в процессе настройки входа с помощью apple требуется немного программирования, поэтому мы создали https //github com/templates back4app/parsesigninwithapple который вы можете скачать и изменить bundle identifier bundle identifier , app id app id , и client key client key код полностью документирован, поэтому это хорошая отправная точка если вы предпочитаете прочитать этот документ, пожалуйста, переходите к следующему шагу 6 вариант 2 написать код вручную внутри вашего представления добавьте фреймворк authenticationservices и создайте authdelegate, который будет обрабатывать 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 реализуйте свои делегаты для viewcontroller реализуйте asauthorizationcontrollerdelegate и asauthorizationcontrollerpresentationcontextproviding для viewcontroller 1 class viewcontroller uiviewcontroller, asauthorizationcontrollerdelegate, asauthorizationcontrollerpresentationcontextproviding 8 добавьте кнопку войти с помощью apple viewdidappear хорошее место для этого если вы выберете другие места, не забудьте вызвать его только один раз 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 } applesignintapped в последней строке также должен быть определен внутри класса 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 presentationcontextprovider провайдер контекста презентации (asauthorizationcontrollerpresentationcontextproviding) запросит, в каком окне должно отображаться диалоговое окно авторизации поскольку мы собираемся отобразить его в том же окне, мы должны вернуть self view\ window 1 func presentationanchor(for controller asauthorizationcontroller) > aspresentationanchor { 2 // return the current view window 3 return self view\ window! 4 } 10 обработка делегата asauthorizationcontrollerdelegate существует несколько вариантов, которые мы должны обработать, когда вызывается делегат, поэтому давайте добавим немного кода, чтобы обрабатывать эти варианты отдельно 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 обработка делегата для didcompletewithauthorization когда мы успешно аутентифицируемся, мы можем получить авторизованную информацию 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 } это место, где мы также можем добавить код для входа в parse так что сразу после делайте что хотите с данными здесь делайте что хотите с данными здесь комментария, давайте добавим 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 } и, конечно, добавьте фреймворк parse 1 import parse