技術ブログ

プログラミング、IT関連の記事中心

Sign In with Appleを実装する方法【Swift】

■はじめに

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) {
        // エラー処理
    }
}