Apple=でサインインを実装しています。返されたemail
のfullName
およびASAuthorizationAppleIDCredential
プロパティは、このApple IDの最初のサインイン。以降のすべてのサインインでは、これらのプロパティはnilです。
これはiOS 13のバグですか、それとも予想される動作ですか?
これが、リクエストを開始するために使用しているコードです。
@available(iOS 13.0, *)
dynamic private func signInWithAppleClicked() {
let request = ASAuthorizationAppleIDProvider().createRequest()
request.requestedScopes = [.fullName, .email]
let controller = ASAuthorizationController(authorizationRequests: [request])
controller.delegate = self
controller.presentationContextProvider = self
controller.performRequests()
}
このデリゲートメソッドで資格情報を受け取っています。
public func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
guard let credential = authorization.credential as? ASAuthorizationAppleIDCredential else { return }
let userIdentifier = credential.user
let token = credential.identityToken
let authCode = credential.authorizationCode
let realUserStatus = credential.realUserStatus
let mail = credential.email // nil
let name = credential.fullName // nil
}
ユーザーの情報は後続のAPI呼び出しでアプリと共有されないため、API応答から情報を受け取った直後に、アプリはそれをローカルに保存する必要があります。プロセスまたはネットワークで後続の障害が発生した場合は、ローカルストレージから情報を読み取って、もう一度処理することができます。