Closed torch-ray closed 3 years ago
private func setupAppleGameCenterLogin() {
GKLocalPlayer.local.authenticateHandler = { [unowned self] _, error in
// 오프라인 로그인시도 error발생
guard error == nil, GKLocalPlayer.local.isAuthenticated else {
self.loadOffline()
return
}
// 온라인 로그인시도 credential 없음
GameCenterAuthProvider.getCredential { credential, error in
guard error == nil, let credential = credential else {
self.loadOffline()
return
}
Auth.auth().signIn(with: credential) { [unowned self] user, error in
guard error == nil, user != nil else {
self.loadOffline()
return
}
loadOnline(user?.user.uid)
}
}
}
}
if GKLocalPlayer.local.isAuthenticated {
//네트워크 연결과 관계없이 계속 true값을 리턴하고 있음
}
여기값이 true일 때는 gcViewController는 항상 nil을 반환
else if let error = error {
// User가 Apple Game Center 로그인 3회 이상 취소했을 때 발생하는 Error
// GKLocalPlayer.local.authenticateHandler = { [unowned self] _, error in 여기에서의 Error임
}
GameCenterAuthProvider.getCredential { credential, error in
// 여기 에러는 credential을 못가져오면 발생하는 에러인 것 같음
// 에러발생할 때 credential값은 nil
}
상기까지 에러 분석은 네트워크 연결여부와 관계없이 모두 동일한 에러메시지를 반환
단, 네트워크 미연결시에는 아래와 같은 추가 에러 메시지
2021-08-25 17:24:56.358175+0900 Full Stack[15548:227231] Task
if GKLocalPlayer.local.isAuthenticated {
// 정상 로그인 시 여기 한 번 실행되고
}
if let user = user {
loadOnline(user.user.uid)
// 바로 여기로 넘어감
}
private func setupAppleGameCenterLogin() {
GKLocalPlayer.local.authenticateHandler = { [unowned self] gcViewController, error in
if let gcViewController = gcViewController {
let scene = Scene.gameCenter(gcViewController)
self.sceneCoordinator.transition(to: scene, using: .fullScreen, with: StoryboardType.main, animated: false)
} else if let error = error {
Firebase.Analytics.logEvent("CancelGameCenter", parameters: ["ErrorMessage": "\(error.localizedDescription)"])
}
GameCenterAuthProvider.getCredential { credential, error in
if let error = error {
Firebase.Analytics.logEvent("AuthError", parameters: ["ErrorMessage": "\(error.localizedDescription)"])
}
guard let credential = credential else {
self.loadOffline()
return
}
Auth.auth().signIn(with: credential) { [unowned self] user, error in
if let error = error {
Firebase.Analytics.logEvent("SignInError", parameters: ["ErrorMessage": "\(error.localizedDescription)"])
}
if let user = user {
loadOnline(user.user.uid)
}
}
}
}
}
현재 브랜치에서 수정한 메서드 상황
func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
self.sceneCoordinator.close(animated: false)
}
혹시 gcViewController 띄우는 상황있으면 뷰계층 문제 해결을 위해 close메서드 호출
애플 게임 센터 Auth 자체를 생성하게 되는 경우, Firebase database 데이터 연동까지 잘 넘어가는지 확인해볼 필요 있음
1.03 버전 기준 버그 발생 -> 1.04에서 수정 필요