SignInWithAppleとは
2019年のWWDCで発表されたAppleが開発した新しい認証方法です。
新規のアプリ申請では対応必須となっており、アップデート申請も7月から対応必須となります。
対応しない場合はリジェクト対象となりますので忘れずに対応しましょう。
準備編
AppleDeveloperでの設定
AppleDeveloperのサイトにアクセスして以下の設定をします。
Certificates, Identifiers & Profiles→Identifiers→対象のアプリ→CapabilitiesからSigninWithAppleにチェック
Xcodeの設定
次にXcodeのCapabilitiesにSignInWithAppleを下の手順で追加します。
TARGET→Signing&Capabilities→Capabilityを選択してSigninWithAppleを追加
実装編
ViewControllerの実装
ボタンイベント等で以下の処理を実装して認証画面を表示します。
let provider = ASAuthorizationAppleIDProvider()
let request = provider.createRequest()
request.requestedScopes = [.email, .fullName]
request.nonce = nonce
let controller = ASAuthorizationController(authorizationRequests: [request])
controller.delegate = self
controller.presentationContextProvider = self
controller.performRequests()
認証の実装
ログイン画面のViewControllerにASAuthorizationControllerDelegate
とASAuthorizationControllerPresentationContextProviding
を実装します。
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
// 認証成功時の処理
}
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
// 認証失敗時の処理
}
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
// コンテンツを表示するWindowを指定
// UIViewControllerのwindowを指定する
return self.view.window!
}
状態監視の実装
AppDelegateのapplicationDidBecomeActive
関数で以下のチェック処理を実装します。
let provider = ASAuthorizationAppleIDProvider()
provider.getCredentialState(forUserID: appleId) { state, error in
switch state {
// 認証が無効になった場合
case .revoked, .notFound:
// サービスのログアウト処理
default:
break
}
}
}
実装してみた感想
今回初めて実装してみましたがかなり簡単に実装できて実装もシンプルなのでかなり良い印象でした。
ただ公式ドキュメントが少しわかりにくいのでそのへん改善して欲しいなと思いました。
参考サイト
AppleDeveloper
iOSでAppleを使用して認証する
全く知らない人のためのSign in with Apple