ios13比較大的變化,蘋果推出了自己的第三方登錄。

Apple login免輸入用戶名密碼,用很高的安全性,支持蘋果所有的平臺和web端
1,使用
加入支持庫AuthenticationServices.framework
引用之
import AuthenticationServices
在工程的Signing & Capabilities中確認支持sign in with Apple

檢查授權是否過期
let appleIDProvider = ASAuthorizationAppleIDProvider()
appleIDProvider.getCredentialState(forUserID:KeychainItem.currentUserIdentifier) { (credentialState, error)in
? ? ? ? ? ? switchcredentialState {
? ? ? ? ? ? case.authorized:
? ? ? ? ? ? ? ? // The Apple ID credential is valid.
? ? ? ? ? ? ? ? break
? ? ? ? ? ? case.revoked:
? ? ? ? ? ? ? ? // The Apple ID credential is revoked.
? ? ? ? ? ? ? ? break
? ? ? ? ? ? case.notFound:
? ? ? ? ? ? ? ? // No credential was found, so show the sign-in UI.
? ? ? ? ? ? default:
? ? ? ? ? ? ? ? break
? ? ? ? ? ? }
? ? ? ? }
頁面出現(xiàn)時檢查授權和賦值delegate
let requests = [ASAuthorizationAppleIDProvider().createRequest(),
? ? ? ? ? ? ? ? ? ? ? ? ASAuthorizationPasswordProvider().createRequest()]
? ? ? ? // Create an authorization controller with the given requests.
? ? ? ? letauthorizationController =ASAuthorizationController(authorizationRequests: requests)
? ? ? ? authorizationController.delegate=self
? ? ? ? authorizationController.presentationContextProvider=self
? ? ? ? authorizationController.performRequests()
點擊按鈕觸發(fā)事件
let appleIDProvider = ASAuthorizationAppleIDProvider()
? ? ? ? letrequest = appleIDProvider.createRequest()
? ? ? ? request.requestedScopes = [.fullName, .email]
//用戶昵稱 ?郵箱
? ? ? ? letauthorizationController =ASAuthorizationController(authorizationRequests: [request])
? ? ? ? authorizationController.delegate=self
? ? ? ? authorizationController.presentationContextProvider=self
? ? ? ? authorizationController.performRequests()
實現(xiàn)delegate下的方法,獲取AppleID數(shù)據(jù)
func authorizationController(controller:ASAuthorizationController, didCompleteWithAuthorization authorization:ASAuthorization) {
? ? ? ? if let appleIDCredential = authorization.credentialas?ASAuthorizationAppleIDCredential{
? ? ? ? ? ? letuserIdentifier = appleIDCredential.user
? ? ? ? ? ? letfullName = appleIDCredential.fullName
? ? ? ? ? ? letemail = appleIDCredential.email
????????????//獲取到的user、fullName、email
? ? ? ? ? ? // Create an account in your system.
? ? ? ?}elseifletpasswordCredential = authorization.credentialas?ASPasswordCredential{
? ? ? ? ? ? // Sign in using an existing iCloud Keychain credential.
? ? ? ? }
? ?}
? ? funcauthorizationController(controller:ASAuthorizationController, didCompleteWithError error:Error) {
? ? ? ? // Handle error.
? ? }
2,注意
如果App中使用第三方登錄的,蘋果要求必須實現(xiàn)Apple login,這是強制的??!
其他使用自身賬號登錄系統(tǒng)的不算在內。
遇到,了解,并記錄?。?/p>