如何解决SwiftUI Game Center身份验证不会提示用户登录
我有以下代码在我的SwiftUI应用中的Game Center中对本地玩家进行身份验证。我希望Game Center提示用户登录(如果玩家尚未登录,但这不会发生)。
class AppSettings: UINavigationController {
func authenticateUser() {
let localPlayer = GKLocalPlayer.local
localPlayer.authenticateHandler = { vc,error in
guard error == nil else {
print(error?.localizedDescription ?? "")
return
}
}
}
}
可能是什么问题?我还阅读了在类的某个地方使用UIViewControllerRepresentable将UIKit的ViewController集成到SwiftUI中的知识,但是我不知道如何使用它。 有人可以帮我吗?
解决方法
我没有人能正确回答我的问题,经过几天的挖掘,我找到了解决方案。因此,我不得不使用如下所示的UIKit实现,并使用GameCenterManager Struct中的UIViewControllerRepresentable在其周围创建包装。之后,我要做的就是在ZStack的SwiftUI视图中调用GameCenterManager()并完成工作!
import SwiftUI
import UIKit
import GameKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
authenticateUser()
}
let localPlayer = GKLocalPlayer.local
func authenticateUser() {
localPlayer.authenticateHandler = { vc,error in
guard error == nil else {
print(error?.localizedDescription ?? "")
return
}
if vc != nil {
self.present(vc!,animated: true,completion: nil)
}
if #available(iOS 14.0,*) {
GKAccessPoint.shared.location = .bottomLeading
GKAccessPoint.shared.showHighlights = true
GKAccessPoint.shared.isActive = self.localPlayer.isAuthenticated
// Fallback on earlier versions
}
}
}
}
struct GameCenterManager: UIViewControllerRepresentable {
func makeUIViewController(context: UIViewControllerRepresentableContext<GameCenterManager>) -> ViewController {
let viewController = ViewController()
return viewController
}
func updateUIViewController(_ uiViewController: ViewController,context: UIViewControllerRepresentableContext<GameCenterManager>) {
}
}
,
authenticateHandler
也会返回一个UIViewController
,而您没有使用它:
@available(iOS 6.0,*)
open var authenticateHandler: ((UIViewController?,Error?) -> Void)?
您需要出示它:
class AppSettings: UINavigationController {
func authenticateUser() {
let localPlayer = GKLocalPlayer.local
localPlayer.authenticateHandler = { vc,error in
guard error == nil else {
print(error?.localizedDescription ?? "")
return
}
if let vc = vc {
self.present(vc,completion: nil)
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。