SwiftUI:启动时检查用户身份验证

SwiftUI:启动时检查用户身份验证,swift,xcode,swiftui,sign-in-with-apple,Swift,Xcode,Swiftui,Sign In With Apple,我很好奇如何在启动我的应用程序时检查用户身份验证。在我的应用程序代理中,我正在执行以下操作。loggedIn变量将根据用户当前是否使用“使用Apple登录”按钮登录进行设置 由于某种原因,上述loggedInvar总是返回false。我知道这与forUserID:userID有关不返回任何内容。但是它在其他视图中工作…通过创建一个函数来检查是否进行了身份验证,从而解决了这个问题。如果是,请将bool设置为true。然后选中bool以显示正确的视图。还必须创建一个分派组,以便提供程序方法可以在返回

我很好奇如何在启动我的应用程序时检查用户身份验证。在我的应用程序代理中,我正在执行以下操作。
loggedIn
变量将根据用户当前是否使用“使用Apple登录”按钮登录进行设置


由于某种原因,上述
loggedIn
var总是返回false。我知道这与
forUserID:userID有关不返回任何内容。但是它在其他视图中工作…

通过创建一个函数来检查是否进行了身份验证,从而解决了这个问题。如果是,请将bool设置为true。然后选中bool以显示正确的视图。还必须创建一个分派组,以便提供程序方法可以在返回值之前完成

struct MeusicApp: App {
    func checkit() -> Bool {
        let group = DispatchGroup()
            group.enter()
        let userID = UserDefaults.standard.object(forKey: "userID") as? String
        let provider = ASAuthorizationAppleIDProvider()
        var stateBool = false
        provider.getCredentialState(forUserID: userID ?? "") { [self] state, error in
          switch state {
          case .authorized:
            // Credentials are valid.
            stateBool = true
            group.leave()
            break
          case .revoked:
            // Credential revoked, log them out
            stateBool = false
            group.leave()
            break
          case .notFound:
            // Credentials not found, show login UI
            stateBool = false
            group.leave()
            break
          case .transferred:
            print("Transferred")
          @unknown default:
            stateBool = false
            group.leave()
          }
        }
        group.wait()
        return stateBool
    }
    var body: some Scene {
        WindowGroup {
            if checkit() {
                Main()
            } else {
                ContentView()
            }
        }
    }
}

用户首次登录后,应将生成的userID/loggedIn结果存储到UserDefaults(即UserDefaults.standard.setObject(forKey:“userID”)=[userID]。然后在启动应用程序时,只需检查UserDefaults是否存在。只有当用户单击SignIn按钮时,才应调用身份验证提供程序凭据。我将userID保存在以下内容中:
UserDefaults.standard.set(userID,forKey:“userID”)
。我登录并保存它。然后撤销权限。然后遇到这个问题。@nicksarno检查UserDefaults是否存在的问题是,如果你撤销应用程序的Apple ID使用,UserDefaults仍然存在
struct MeusicApp: App {
    func checkit() -> Bool {
        let group = DispatchGroup()
            group.enter()
        let userID = UserDefaults.standard.object(forKey: "userID") as? String
        let provider = ASAuthorizationAppleIDProvider()
        var stateBool = false
        provider.getCredentialState(forUserID: userID ?? "") { [self] state, error in
          switch state {
          case .authorized:
            // Credentials are valid.
            stateBool = true
            group.leave()
            break
          case .revoked:
            // Credential revoked, log them out
            stateBool = false
            group.leave()
            break
          case .notFound:
            // Credentials not found, show login UI
            stateBool = false
            group.leave()
            break
          case .transferred:
            print("Transferred")
          @unknown default:
            stateBool = false
            group.leave()
          }
        }
        group.wait()
        return stateBool
    }
    var body: some Scene {
        WindowGroup {
            if checkit() {
                Main()
            } else {
                ContentView()
            }
        }
    }
}