XCode 26.5 日本語化計画
あなたのアプリのユーザーがアカウントを設定し、あなたのサービスを利用開始できる方法を提供してください。
このサンプルアプリ「Juice」は、AuthenticationServices フレームワークを使用して、ユーザーがアカウントを設定し、Apple ID でサインインするためのインターフェースを提供します。アプリは、ユーザーがアプリのアカウントを作成および設定できるフォームを表示し、次に「Apple でサインイン」を使用してユーザーの Apple ID を認証し、ユーザーのアカウントデータを表示します。
iOS 12 以前のバージョンで「Apple でサインイン」を実装する方法の詳細については、他のプラットフォームへの「Apple でサインイン」の統合 を参照してください。
サンプルコードプロジェクトを構成するには、Xcode で以下の手順を実行してください。
サンプルアプリでは、LoginViewController は、ビュー階層にログインフォームと「Apple でサインイン」ボタン (ASAuthorizationAppleIDButton) を表示します。また、ビューコントローラ自身をボタンのターゲットとして追加し、ボタンがタッチアップイベントを受け取ったときに呼び出されるアクションを渡します。
func setupProviderLoginView() {
let authorizationButton = ASAuthorizationAppleIDButton()
authorizationButton.addTarget(self, action: #selector
(handleAuthorizationAppleIDButtonPress), for: .touchUpInside)
self.loginProviderStackView.addArrangedSubview(authorizationButton)
}
さまざまな Apple プラットフォームで利用可能な「Appleでサインイン」ボタンの詳細については、あなたのアプリに「Apple でサインイン」ボタンを表示する を参照してください。
ユーザーが「Apple でサインイン」ボタンをタップすると、ビューコントローラは handleAuthorizationAppleIDButtonPress() 関数を呼び出し、ユーザーのフルネームとメールアドレスの認証要求を実行して、認証フローを開始します。次に、システムはユーザーがデバイス上で Apple ID でサインインしているかどうかを確認します。ユーザーがシステムレベルでサインインしていない場合、アプリはユーザーに「設定」で Apple ID でサインインするよう促すアラートを表示します。
@objc
func handleAuthorizationAppleIDButtonPress() {
let appleIDProvider = ASAuthorizationAppleIDProvider()
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email]
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
authorizationController.performRequests()
}
認証コントローラは、ASAuthorizationControllerPresentationContextProviding.presentationAnchor(for:) 関数を呼び出して、アプリからウィンドウを取得し、そのウィンドウ内でモーダルシートとしてユーザーに「Apple でサインイン」コンテンツを表示します。
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return self.view.window!
}
ユーザーがシステムレベルで Apple ID でサインインしている場合、Apple でサインイン機能の説明シートが表示され、続いてアカウント情報を編集できる別のシートが表示されます。ユーザーは、氏名(姓と名)を編集したり、連絡先として別のメールアドレスを選択したり、アプリからメールアドレスを非表示にしたりできます。ユーザーがアプリからメールアドレスを非表示にすることを選択した場合、Apple はプロキシメールアドレスを生成し、メールをユーザーのプライベートメールアドレスに転送します。最後に、ユーザーは Apple ID のパスワードを入力し、「続ける」をクリックしてアカウントを作成します。
認証が成功すると、認証コントローラーは ASAuthorizationControllerDelegate.authorization
Controller(controller:didCompleteWithAuthorization:) デリゲート関数を呼び出します。アプリはこの関数を使用して、ユーザーのデータをキーチェーンに保存します。
func authorizationController(controller: ASAuthorizationController,
didCompleteWithAuthorization authorization: ASAuthorization) {
switch authorization.credential {
case let appleIDCredential as ASAuthorizationAppleIDCredential:
// Create an account in your system.
let userIdentifier = appleIDCredential.user
let fullName = appleIDCredential.fullName
let email = appleIDCredential.email
// For the purpose of this demo app, store the `userIdentifier` in the keychain.
self.saveUserInKeychain(userIdentifier)
// For the purpose of this demo app, show the Apple ID credential information
in the `ResultViewController`.
self.showResultViewController(userIdentifier: userIdentifier, fullName: fullName,
email: email)
case let passwordCredential as ASPasswordCredential:
// Sign in using an existing iCloud Keychain credential.
let username = passwordCredential.user
let password = passwordCredential.password
// For the purpose of this demo app, show the password credential as an alert.
DispatchQueue.main.async {
self.showPasswordCredentialAlert(username: username, password: password)
}
default:
break
}
}
認証が失敗した場合、認証コントローラは ASAuthorizationControllerDelegate.authorizationController(controller:
didCompleteWithError:) デリゲート関数を呼び出してエラーを処理します。
func authorizationController(controller: ASAuthorizationController,
didCompleteWithError error: Error) {
// Handle error.
}
システムがユーザー認証を完了すると、アプリは ResultViewController を表示します。このビューコントローラーには、フレームワークから要求されたユーザー情報(ユーザーが入力したフルネームとメールアドレスなど)が表示されます。また、このビューコントローラーにはサインアウトボタンが表示され、ユーザーデータはキーチェーンに保存されます。ユーザーがサインアウトボタンをタップすると、アプリはビューコントローラーとキーチェーンからユーザー情報を削除し、LoginViewController をユーザーに表示します。
LoginViewController.performExistingAccountSetupFlows() 関数は、Apple ID と iCloud キーチェーンのパスワードの両方を要求することで、ユーザーが既存のアカウントを持っているかどうかを確認します。handleAuthorizationAppleIDButtonPress() と同様に、認証コントローラは、プレゼンテーションコンテンツプロバイダとデリゲートを LoginViewController オブジェクトに設定します。
func performExistingAccountSetupFlows() {
// Prepare requests for both Apple ID and password providers.
let requests = [ASAuthorizationAppleIDProvider().createRequest(),
ASAuthorizationPasswordProvider().createRequest()]
// Create an authorization controller with the given requests.
let authorizationController = ASAuthorizationController(authorizationRequests: requests)
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
authorizationController.performRequests()
}
authorizationController(controller:didCompleteWithAuthorization:) デリゲート関数は、認証情報が Apple ID (ASAuthorizationAppleIDCredential) かパスワード認証情報 (ASPasswordCredential) かをチェックします。認証情報がパスワード認証情報の場合、システムは既存のアカウントで認証できるユーザーにアラートを表示します。
サンプルアプリは、必要な場合にのみ「Apple でサインイン」ユーザーインターフェイスを表示します。アプリデリゲートは、AppDelegate.application(_:didFinishLaunchingWithOptions:) 関数内で、起動直後に保存されたユーザー認証情報の状態を確認します。
ASAuthorizationAppleIDProvider.getCredentialState() 関数は、キーチェーンに保存されているユーザー識別子の状態を取得します。ユーザーがアプリの認証を許可している場合(たとえば、デバイス上で Apple ID を使用してアプリにサインインしている場合)、アプリは実行を続行します。ユーザーがアプリの認証を取り消した場合、またはユーザーの認証情報の状態が見つからない場合は、showLoginViewController() 関数を呼び出してログインフォームを表示します。
func application(_ application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let appleIDProvider = ASAuthorizationAppleIDProvider()
appleIDProvider.getCredentialState(forUserID: KeychainItem.currentUserIdentifier)
{ (credentialState, error) in
switch credentialState {
case .authorized:
break // The Apple ID credential is valid.
case .revoked, .notFound:
// The Apple ID credential is either revoked or was not found, so show the sign-in UI.
DispatchQueue.main.async {
self.window?.rootViewController?.showLoginViewController()
}
default:
break
}
}
return true
}
AuthenticationServices を使用して、tvOS アプリ向けにスムーズなサインイン体験を構築しましょう。
表示用に「Apple でサインイン」ボタンを作成する SwiftUI ビュー。
アプリが「Apple でサインイン」を使用できるようにする権限。
class ASAuthorizationAppleIDProvider
Apple ID に基づいてユーザー認証を行うための要求を生成する仕組み。
class ASAuthorizationAppleIDCredential
Apple ID 認証が成功した結果として得られる認証情報。