トップ 最新 追記

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|

2021-08-09 [Cocoa][Swift]Sign In with Apple

Sign In with Appleで何ができるか試してみる。

XcodeのCapabilitiesで"Sign in with Apple"を追加する。

Capabilities

ASAuthorizationControllerDelegateプロトコルに準拠する。

import AuthenticationServices
 
class ViewController: UIViewController, ASAuthorizationControllerDelegate {
}

"Sign in with Apple"ボタンを生成して配置する。

let button = ASAuthorizationAppleIDButton()
button.translatesAutoresizingMaskIntoConstraints = false
button.addTarget(self, action:#selector(pushApplebutton), for: .touchUpInside)
view.addSubview(button)
 
let topConstraint = NSLayoutConstraint.init(item: button,
                                            attribute: .top,
                                            relatedBy: .equal,
                                            toItem: view,
                                            attribute: .top,
                                            multiplier: 1.0,
                                            constant: 50.0)
let leftConstraint = NSLayoutConstraint.init(item: button,
                                             attribute: .left,
                                             relatedBy: .equal,
                                             toItem: view,
                                             attribute: .left,
                                             multiplier: 1.0,
                                             constant: 50.0)
NSLayoutConstraint.activate([topConstraint, leftConstraint])

"Sign in with Apple"ボタンの押下を受け取る。

@objc func pushApplebutton() {
    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,
                             didCompleteWithError error: Error) {
    print(error.localizedDescription)
}

成功の場合。

func authorizationController(controller: ASAuthorizationController,
                             didCompleteWithAuthorization authorization: ASAuthorization) {
    if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
        let userID = appleIDCredential.user
        if let name = appleIDCredential.fullName?.givenName,
           let emailAddr = appleIDCredential.email {
            print("userID: \(userID), name: \(name), emailAddr: \(emailAddr)")
        } else {
            print("userID: \(userID)")
        }
    }
}

初回もその後のサインインもユーザIDは受け取れるが、指定した氏名と電子メールのアドレスは初回のみなので、初回サインイン時の覚えておく必要がある。

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/ios/LogOn - GitHub

トップ 最新 追記