iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
Sign In with Appleで何ができるか試してみる。
XcodeのCapabilitiesで"Sign in with Apple"を追加する。
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は受け取れるが、指定した氏名と電子メールのアドレスは初回のみなので、初回サインイン時の覚えておく必要がある。