[英]Apple sign in not working after deploying to TestFlight
我在我的應用程序中啟用了使用 Apple 登錄。 實施后,當我從 Xcode 運行應用程序時,它工作正常。 但是,當我將應用程序部署到 TestFlight 時,單擊按鈕時似乎沒有任何反應。 在發布到 TestFlight 之前,我應該從開發到生產有什么需要改變的嗎? 所有其他社交登錄都運行良好,例如 Google 和 Facebook。
謝謝,
發生這種情況是因為您已經有權使用 Apple 登錄。 請轉到設置 > 單擊您的 Apple ID [第一個選項] > 密碼和安全 > 使用 Apple ID 的應用程序。 你會在那里找到你的應用程序。 刪除它並重試。 它會工作。
每當用戶與蘋果簽約時,您都需要將他的信息保存在任一鑰匙串中。 當用戶第二次通過身份驗證時,您將不會獲得所有用戶信息。 您需要從鑰匙串中檢索此信息。 還有一件事,確保用戶在他的數據不可用時看到警報,否則Apple會因無法登錄而拒絕該應用程序。使用此代碼,根據您的要求進行更改。
// MARK: - Apple Sign In Delegate
@available(iOS 13.0, *)
extension SignupVC: ASAuthorizationControllerDelegate {
func setupAppleButton() {
var btnAuthorization = ASAuthorizationAppleIDButton(type: .signIn, style: .black)
if #available(iOS 13.2, *) {
btnAuthorization = ASAuthorizationAppleIDButton(type: .signUp, style: .black)
}
btnAuthorization.frame = CGRect(x: 16, y: 14, width: view.frame.size.width - 32, height: 44)
btnAuthorization.addTarget(self, action: #selector(appleLogin), for: .touchUpInside)
viewApple.addSubview(btnAuthorization)
}
@objc func appleLogin() {
let appleIDProvider = ASAuthorizationAppleIDProvider()
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email]
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
authorizationController.performRequests()
}
/// Prepare requests for both Apple ID and password providers.
private func performExistingAccountSetupFlows() {
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()
}
/// ASAuthorizationControllerDelegate function for authorization failed
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print(error.localizedDescription)
}
/// ASAuthorizationControllerDelegate function for successful authorization
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
// Create an account as per your requirement
let appleUserFirstName = appleIDCredential.fullName?.givenName
let appleUserLastName = appleIDCredential.fullName?.familyName
let appleUserEmail = appleIDCredential.email
guard [appleUserFirstName, appleUserLastName, appleUserEmail].contains(nil) else {
keyChainHelper.appleUserID = appleIDCredential.user
keyChainHelper.appleUserFname = appleUserFirstName
keyChainHelper.appleUserLname = appleUserLastName
keyChainHelper.appleUserEmail = appleUserEmail
// Continue to your work
return
}
let appleIDProvider = ASAuthorizationAppleIDProvider()
appleIDProvider.getCredentialState(forUserID: appleIDCredential.user) { (credentialState, _) in
switch credentialState {
case .authorized:
guard let userID = self.keyChainHelper.appleUserID else {
print("data is not available.")
DispatchQueue.main.async {
self.showAlertToReset()
}
return }
if userID == appleIDCredential.user {
// Credential is valid
// Continiue to show 'User's Profile' Screen
//Get saved info from Keychain
// Continue to your work
//self.keyChainHelper.appleUserFname, lName: self.keyChainHelper.appleUserLname, email: self.keyChainHelper.appleUserEmail)
}
case .revoked:
// Credential is revoked.
// Show 'Sign In' Screen
break
case .notFound:
// Credential not found.
// Show 'Sign In' Screen
break
default:
break
}
}
}
}
func showAlertToReset() {
let alert = ADDAlertController(title: "", message:"Please reset account permission from Password & Security to Sign up with Apple.\nTap Settings > [your name] > Password & Security > Apple ID logins\n\nSwipe left on your app, tap delete > Stop using.", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: strings.ok().uppercased(), style: .default, handler: nil))
present(alert, animated: true, completion: nil)
}
}
@available(iOS 13.0, *)
extension SignupVC: ASAuthorizationControllerPresentationContextProviding {
// For present window
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return view.window!
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.