使用 Apple 登錄 — 在您的應用程序中實現它!
已發表: 2020-01-14使用 Apple 登錄 — Apple 去年在 WWDC 上推出的一項新功能,現在可從 iOS 13 獲得。此功能提供簡單且安全的帳戶註冊和應用程序或網站登錄。 無需填寫註冊表或通過社交媒體登錄,您現在可以創建一個帳戶並使用您的 Apple ID 登錄,並通過 Face ID、Touch ID 或密碼進行驗證。
使用 Apple 登錄的簡短說明:
- 快速、簡單的帳戶設置和登錄
- 已驗證的電子郵件地址
- 內置安全性
- 反欺詐
- 跨平台️
- iOS 13+
在本文中,我將重點介紹在 iOS 設備上 Sign In With Apple 的基本實現,無需與網頁版集成或與後端集成。
“使用 Apple 登錄”功能如何工作?

在點擊“Sign In With Apple”或“Continue with Apple”(這取決於選擇在應用程序中實現哪個按鈕)後,會出現一個信息窗口,其中包含此解決方案的可能性(第二個屏幕截圖)。 然後在點擊“繼續”後,我們會獲得有關將與應用程序所有者共享哪些數據的信息。
在這裡,我們有兩種使用 Sign In With Apple 在應用程序中註冊帳戶的選項:
- 通過共享我們的電子郵件地址——您的真實電子郵件地址將與應用程序或網站共享。
- 隱藏我們的電子郵件地址- 您的真實電子郵件不會被共享到應用程序或網站。 Apple 將為您生成一封具有 @privaterelay.appleid.com 域的獨特電子郵件。 不用擔心,無論如何,來自應用程序所有者的所有電子郵件都會轉發到您的收件箱,因為電子郵件將被轉發到我們的真實電子郵件地址。 應用程序的所有者只會知道使用 Apple 域生成的電子郵件地址
選擇其中一個選項並點擊“繼續”後,我們會像解鎖手機一樣驗證我們的 Apple ID,即通過 Face ID、Touch ID 或輸入密碼。 此時,應在應用程序/網站中創建一個具有用戶唯一標識符的帳戶。

當您之前在應用程序中使用“Sign In With Apple”時,您可以預覽這種登錄方式的詳細設置並停止使用此功能。 為此,請前往“設置”>“Apple ID”>“密碼和安全”>“使用您的 Apple ID 的應用程序”>“選擇應用程序”。
如何實現“Sign In With Apple”?
看完“Sign In With Apple”的理論部分,我們就可以著手實現了

首先,您需要在項目中打開“Signing & Capabilities”,然後按+並添加“Sign In With Apple”功能。

蘋果在 WWDC 主題演講中將實現這一功能的過程分為四個階段。 所有階段如下所述。
1. 按鈕
一開始,我們必須在屏幕上添加一個按鈕。 這必須是AuthenticationService
框架中的ASAuthorizationAppleIDButton
按鈕。 它有兩種顏色(白色和黑色),標題不同。 對於按鈕,我們必須添加一個在點擊它後要調用的動作。 我在第二點描述授權動作。
導入身份驗證服務 讓按鈕 = ASAuthorizationAppleIDButton(類型:.signIn,樣式:.white) button.addTarget(self, action: #selector(appleIdButtonClicked), for: .touchUpInside) stackView.addArrangedSubview(按鈕)
2.授權️
在這裡,我們創建一個授權請求,其中作為requestedScopes
,我們僅提供在我們的應用程序或網站中創建帳戶所需的信息。 就我而言,這是全名和電子郵件地址。 然後設置委託並提出請求。
@objc func appleIdButtonClicked() { 讓請求 = ASAuthorizationAppleIDProvider().createRequest() request.requestedScopes = [.fullName, .email] 讓控制器 = ASAuthorizationController(授權請求:[請求]) controller.delegate = self controller.presentationContextProvider = self controller.performRequests() }
3. 驗證
通過 Face ID、Touch ID 或密碼快速檢查後,將返回授權結果。 授權成功後, didCompleteWithAuthorization
方法會返回一個AppleIdCredential
類型的對象。 然後您需要檢查它們是否是ASAuthorizationAppleIdCredential
類型的憑據 - 如果是,在此對像中,我們將找到在我們的系統中設置帳戶所需的所有數據,例如唯一的用戶 ID、全名和電子郵件地址(其中用戶之前要求的)。 此時,我們可以通過僅提供必要的信息來繼續在我們的系統中創建一個帳戶。 如果發生錯誤,會在didCompleteWithError
方法中返回,我們可以在其中處理這個錯誤。

func 授權控制器(控制器:ASAuthorizationController,didCompleteWithAuthorization 授權:ASAuthorization){ if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { // 在您的系統中創建一個帳戶。 } else if let passwordCredential = authorization.credential as? ASPasswordCredential { // 使用現有的 iCloud 鑰匙串憑據登錄。 } } func 授權控制器(控制器:ASAuthorizationController,didCompleteWithError 錯誤:錯誤){ 打印(錯誤) }
4. 處理變更
例如,您必須為用戶已停止使用 Apple ID 使用應用程序登錄這一事實做好準備。 這應該在用戶重新啟動應用程序後正確處理。
使用我們在帳戶註冊期間收到的用戶 ID,我們可以通過調用getCredentialState
方法非常快速地獲取 Apple ID 憑據的當前狀態。 該方法可以返回三種狀態:
-
authorized
- 可以繼續使用應用程序的授權用戶。 - 已
revoked
— 註銷用戶,您可以選擇將他引導至登錄屏幕以再次登錄。 -
notFound
表示用戶之前沒有使用過“Sign In With Apple”。 此時,還向用戶顯示登錄屏幕。
getCredentialState
方法調用應該在AppDelegate
中的didFinishLaunchingWithOptions
方法中。
此外,Apple 提供了 Notification,它會在憑據被撤銷時通知它,然後我們必須以上述方式處理此狀態。
appleIDProvider.getCredentialState(forUserID: userId) { credentialState,錯誤 切換憑證狀態 { 案例.授權: // Apple ID 憑證有效。 案例.撤銷: // Apple ID 憑證被撤銷,註銷。 案例.notFound: // 未找到憑據,因此顯示登錄 UI。 默認: 休息 } } //註冊撤銷通知 NotificationCenter.default.addObserver(forName: NSNotification.Name.ASAuthorizationAppleIDProviderCredentialRevoked, 對象:無, 隊列:無){ _ in // 將用戶註銷,可選擇引導他們再次登錄 }
在我的示例應用程序中實現所有四個階段後,一切正常,看起來像這樣:

我必須在我的應用程序中添加“使用 Apple 登錄”嗎?
如果您的應用程序使用第三方登錄方法,例如 Facebook、Google 或 LinkedIn,那麼您還必鬚根據新指南添加 Sign In With Apple。 如果您不添加它,您的申請可能會被拒絕,並且可能不會被 Apple 審核。 以下是新聞鏈接和指南中的引用。
使用 Apple 登錄的新指南 — 2019 年 9 月 12 日️
從今天開始,提交到 App Store 的新應用程序必須遵循這些準則。 現有應用程序和應用程序更新必須在 2020 年 4 月之前跟進。
以下是提供使用 Apple 新功能登錄的應用程序,當然,每天都有越來越多的應用程序

你可以在這裡查看我的 GitHub 上的整個項目。
資料來源:
- https://developer.apple.com/videos/play/wwdc2019/706/
- https://developer.apple.com/videos/play/wwdc2019/516
- https://developer.apple.com/sign-in-with-apple/get-started/
- https://developer.apple.com/news/?id=09122019b
- https://developer.apple.com/app-store/review/guidelines/#sign-in-with-apple