■はじめに
Appleから、Googleログインなどのソーシャルログインを追加する場合にはAppleのソーシャルログインを追加するようにレビューガイドラインが更新されました。
そのため、ここでは、Appleのソーシャルログイン(Sign In with Apple)の実装方法を記載します。
このログインはiOS13から利用できますので、ターゲットバージョンを13以上にしてください。
■手順
プロジェクトを作成し、「Capability」で「Sign In with Apple」を追加する。
ViewControllerに「AuthenticationServices」のインポートを追加する。
import AuthenticationServices
Delegateに「ASAuthorizationControllerDelegate」を追加する。
class ViewController: UIViewController, ASAuthorizationControllerDelegate {
「viewDidLoad」で「Sign In」のボタンを作成する。
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
let authorizationButton = ASAuthorizationAppleIDButton()
authorizationButton.frame = CGRect(x: 10, y: 100, width: UIScreen.main.bounds.size.width - 20, height: 50)
authorizationButton.addTarget(self, action: #selector(authorizationAppleID), for: .touchUpInside)
authorizationButton.cornerRadius = 10
self.view.addSubview(authorizationButton)
}
ボタン押下時の処理を追加する。
@objc func authorizationAppleID() {
let appleIDProvider = ASAuthorizationAppleIDProvider()
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email]
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
authorizationController.delegate = self
authorizationController.performRequests()
}
Delegateのメソッドを追加する。
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
print(appleIDCredential.user)
print(appleIDCredential.fullName ?? "")
print(appleIDCredential.email ?? "")
}
}
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
// エラー処理
}
これで、実装が完了しました。
ビルドして確認してみてください。
ソースコードの全量は以下です。
import UIKit
import AuthenticationServices
class ViewController: UIViewController, ASAuthorizationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
let authorizationButton = ASAuthorizationAppleIDButton()
authorizationButton.frame = CGRect(x: 10, y: 100, width: UIScreen.main.bounds.size.width - 20, height: 50)
authorizationButton.addTarget(self, action: #selector(authorizationAppleID), for: .touchUpInside)
authorizationButton.cornerRadius = 10
self.view.addSubview(authorizationButton)
}
@objc func authorizationAppleID() {
let appleIDProvider = ASAuthorizationAppleIDProvider()
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email]
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
authorizationController.delegate = self
authorizationController.performRequests()
}
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
print(appleIDCredential.user)
print(appleIDCredential.fullName ?? "")
print(appleIDCredential.email ?? "")
}
}
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
// エラー処理
}
}