SinsaStation / FullStackCodingBot

앱 스토어 출시 퍼즐 게임 프로젝트
22 stars 0 forks source link

Apple Game Center Login #183

Closed torch-ray closed 3 years ago

torch-ray commented 3 years ago

1.03 버전 기준 버그 발생 -> 1.04에서 수정 필요

torch-ray commented 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)
                }
            }
        }
    }
torch-ray commented 3 years ago
if GKLocalPlayer.local.isAuthenticated {
  //네트워크 연결과 관계없이 계속 true값을 리턴하고 있음
}

여기값이 true일 때는 gcViewController는 항상 nil을 반환

torch-ray commented 3 years ago
else if let error = error { 
  // User가 Apple Game Center 로그인 3회 이상 취소했을 때 발생하는 Error
 // GKLocalPlayer.local.authenticateHandler = { [unowned self] _, error in 여기에서의 Error임
}
torch-ray commented 3 years ago
GameCenterAuthProvider.getCredential { credential, error in 
  // 여기 에러는 credential을 못가져오면 발생하는 에러인 것 같음
  // 에러발생할 때 credential값은 nil
}
torch-ray commented 3 years ago

상기까지 에러 분석은 네트워크 연결여부와 관계없이 모두 동일한 에러메시지를 반환

단, 네트워크 미연결시에는 아래와 같은 추가 에러 메시지

2021-08-25 17:24:56.358175+0900 Full Stack[15548:227231] Task .<1> finished with error [-1009] Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo={_kCFStreamErrorCodeKey=50, NSUnderlyingError=0x600002279b30 {Error Domain=kCFErrorDomainCFNetwork Code=-1009 "(null)" UserInfo={_kCFStreamErrorCodeKey=50, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask .<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask .<1>" ), NSLocalizedDescription=The Internet connection appears to be offline., NSErrorFailingURLStringKey=https://googleads.g.doubleclick.net/mads/gma?os_version=14.5.0&ms=11&u_so=p&omid_v=1.3.3-google_20200427&adtest=on&platform=iPhone&request_origin=resize&hl=en&submodel=x86_64&ios_app_volume=1&is_nonagon=true&sys_name=iOS&binary_arch=x86_64&eid=318494274%2C318492496%2C318498757&u_sd=3&js=afma-sdk-i-v8.9.0&u_sso=p&fbs_aiid=88D6EB099C864107BEB5C65143A3D692&is_other_audio_playing=0&u_h=812&fbs_aeid=8982775892048717500&u_w=375&_c_csdk_npa_o=false&guci=0.0.0.0.0.0.0.0&attmas=not_configured&sdk_apis=7&omid_p=Google%2Fafma-sdk-i-v8.9.0&format=375x70_mb&an=1.0.3.iphone.sinsasoft.fullstack&_package_name=sinsasoft.fullstack&app_name=1.0.3.iphone.sinsasoft.fullstack&u_audio=4&swipeable=1&dtxcb=12E507&dtsdk=iphonesimulator14.5&m_os_tgt=13.0&skan=cstr6suwn9%2C4fzdc2evr5%2C2fnua5tdw4%2Cydx93a7ass%2C5a6flpkh64%2Cp78axxw29g%2Cv72qych5uu%2Cc6k4g5qg8m%2Cs39g8k73mm%2C3qy4746246%2C3sh42y64q3%2Cf38h382jlk%2Chs6bdukanm%2Cprcb7njmu6%2Cv4nxqhlyqp%2Cwzmmz9fp6w%2Cyclnxrl5pm%2Ct38b2kh725%2C7ug5zh24hu%2C9rd848q2bz%2Cn6fk4nfna4%2Ckbd757ywx3%2C9t245vhmpl%2C4468km3ulz%2C2u9pt9hc89%2C8s468mfl3y%2Cav6w8kgt66%2Cklf5c3l5u5%2Cppxm28t8ap%2C424m5254lk%2Cuw77j35x4d%2C578prtvx9j%2C4dzt52r2t5%2Ce5fvkxwrpn%2C8c4e2ghe7u%2Czq492l623r%2C3qcr597p9d&adk=3949816634&preqs=0&seq_num=1&time_in_session=2062370&preqs_in_session=41&output=html&region=mobile_app&u_tz=540&client=ca-app-pub-7733628208837127&slotname=4683073470&apm_app_id=1%3A102637699078%3Aios%3Afacedd235578db2ec44387&gmp_app_id=1%3A102637699078%3Aios%3Afacedd235578db2ec44387&apm_app_type=1&app_wp_code=ca-app-pub-7733628208837127&app_code=2731059521&caps=interactiveVideo_inlineVideo_mraid1_mraid2_mraid3_th_autoplay_mediation_av_sdkAdmobApiForAds_di_transparentBackground_sdkVideo_aso_sfv_dinm_dim_nav_navc_ct_scroll_dinmo_gls_saiMacro_omidEnabled_gcache_aboi_xSeconds&is_sidewinder=0&rpv=1&blockAutoClicks=true&includeDoritos=true&includeCookies=true&paid2l=36&session_idl=20&rdidl=36&idtypel=4&blob=ABPQqLGWz3SLdySg6tC02ttG3qJqG6ZWJFWW8y3OK62tfttxr_TlBI6PSBBrh0ltmvnLlslLkHlBIM0gmaE5ZS__7dakCSbMBa_1duJV6VIzausHndPTQnACAL4jtMfRwWfjjQ5kPu7ciUKWlpYcjWwrkWvQeumRIXbE0JCjbX2qlspcYwAUzuKBh5yh2TWBAYYluy-4RQo8fI4LzM9yN3SnD_UTSDMoJC2iwLud0hQzpcJidA0fH29sQTkWp2ymYBOpWipoUyICW-vPK92AV5c5iFmySOVc7m21L20856WR4WTY61a1gqrd8flx7pYPFoUigMYaA8J60Ld7aJ42jao-_OxvQBHJIv9h2vy-k2iWQY-3IjdbY0KIaaYnKHz8_cwoFE2hkbtnkClUVx4uP_6DY3AbcvBZpRDS4v3B&et=7&tcar=18&jsv=sdk_20190107_RC02-production-sdk_20210816_RC00-resize&urll=2433#caps=interactiveVideo_inlineVideo_mraid1_mraid2_mraid3_th_autoplay_mediation_av_sdkAdmobApiForAds_di_transparentBackground_sdkVideo_aso_sfv_dinm_dim_nav_navc_ct_scroll_dinmo_gls_saiMacro_omidEnabled_gcache_aboi_xSeconds&eid=318494274%252C318492496%252C318498757&format=375x70_mb&js=afma-sdk-i-v8.9.0&preqs=0&seq_num=1, NSErrorFailingURLKey=https://googleads.g.doubleclick.net/mads/gma?os_version=14.5.0&ms=11&u_so=p&omid_v=1.3.3-google_20200427&adtest=on&platform=iPhone&request_origin=resize&hl=en&submodel=x86_64&ios_app_volume=1&is_nonagon=true&sys_name=iOS&binary_arch=x86_64&eid=318494274%2C318492496%2C318498757&u_sd=3&js=afma-sdk-i-v8.9.0&u_sso=p&fbs_aiid=88D6EB099C864107BEB5C65143A3D692&is_other_audio_playing=0&u_h=812&fbs_aeid=8982775892048717500&u_w=375&_c_csdk_npa_o=false&guci=0.0.0.0.0.0.0.0&attmas=not_configured&sdk_apis=7&omid_p=Google%2Fafma-sdk-i-v8.9.0&format=375x70_mb&an=1.0.3.iphone.sinsasoft.fullstack&_package_name=sinsasoft.fullstack&app_name=1.0.3.iphone.sinsasoft.fullstack&u_audio=4&swipeable=1&dtxcb=12E507&dtsdk=iphonesimulator14.5&m_os_tgt=13.0&skan=cstr6suwn9%2C4fzdc2evr5%2C2fnua5tdw4%2Cydx93a7ass%2C5a6flpkh64%2Cp78axxw29g%2Cv72qych5uu%2Cc6k4g5qg8m%2Cs39g8k73mm%2C3qy4746246%2C3sh42y64q3%2Cf38h382jlk%2Chs6bdukanm%2Cprcb7njmu6%2Cv4nxqhlyqp%2Cwzmmz9fp6w%2Cyclnxrl5pm%2Ct38b2kh725%2C7ug5zh24hu%2C9rd848q2bz%2Cn6fk4nfna4%2Ckbd757ywx3%2C9t245vhmpl%2C4468km3ulz%2C2u9pt9hc89%2C8s468mfl3y%2Cav6w8kgt66%2Cklf5c3l5u5%2Cppxm28t8ap%2C424m5254lk%2Cuw77j35x4d%2C578prtvx9j%2C4dzt52r2t5%2Ce5fvkxwrpn%2C8c4e2ghe7u%2Czq492l623r%2C3qcr597p9d&adk=3949816634&preqs=0&seq_num=1&time_in_session=2062370&preqs_in_session=41&output=html&region=mobile_app&u_tz=540&client=ca-app-pub-7733628208837127&slotname=4683073470&apm_app_id=1%3A102637699078%3Aios%3Afacedd235578db2ec44387&gmp_app_id=1%3A102637699078%3Aios%3Afacedd235578db2ec44387&apm_app_type=1&app_wp_code=ca-app-pub-7733628208837127&app_code=2731059521&caps=interactiveVideo_inlineVideo_mraid1_mraid2_mraid3_th_autoplay_mediation_av_sdkAdmobApiForAds_di_transparentBackground_sdkVideo_aso_sfv_dinm_dim_nav_navc_ct_scroll_dinmo_gls_saiMacro_omidEnabled_gcache_aboi_xSeconds&is_sidewinder=0&rpv=1&blockAutoClicks=true&includeDoritos=true&includeCookies=true&paid2l=36&session_idl=20&rdidl=36&idtypel=4&blob=ABPQqLGWz3SLdySg6tC02ttG3qJqG6ZWJFWW8y3OK62tfttxr_TlBI6PSBBrh0ltmvnLlslLkHlBIM0gmaE5ZS__7dakCSbMBa_1duJV6VIzausHndPTQnACAL4jtMfRwWfjjQ5kPu7ciUKWlpYcjWwrkWvQeumRIXbE0JCjbX2qlspcYwAUzuKBh5yh2TWBAYYluy-4RQo8fI4LzM9yN3SnD_UTSDMoJC2iwLud0hQzpcJidA0fH29sQTkWp2ymYBOpWipoUyICW-vPK92AV5c5iFmySOVc7m21L20856WR4WTY61a1gqrd8flx7pYPFoUigMYaA8J60Ld7aJ42jao-_OxvQBHJIv9h2vy-k2iWQY-3IjdbY0KIaaYnKHz8_cwoFE2hkbtnkClUVx4uP_6DY3AbcvBZpRDS4v3B&et=7&tcar=18&jsv=sdk_20190107_RC02-production-sdk_20210816_RC00-resize&urll=2433#caps=interactiveVideo_inlineVideo_mraid1_mraid2_mraid3_th_autoplay_mediation_av_sdkAdmobApiForAds_di_transparentBackground_sdkVideo_aso_sfv_dinm_dim_nav_navc_ct_scroll_dinmo_gls_saiMacro_omidEnabled_gcache_aboi_xSeconds&eid=318494274%252C318492496%252C318498757&format=375x70_mb&js=afma-sdk-i-v8.9.0&preqs=0&seq_num=1, _kCFStreamErrorDomainKey=1}

torch-ray commented 3 years ago
 if GKLocalPlayer.local.isAuthenticated {
  // 정상 로그인 시 여기 한 번 실행되고
 }

if let user = user {
  loadOnline(user.user.uid)
  // 바로 여기로 넘어감
}
torch-ray commented 3 years ago
    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)
                    }
                }
            }
        }
    }

현재 브랜치에서 수정한 메서드 상황

torch-ray commented 3 years ago
func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
    self.sceneCoordinator.close(animated: false)
}

혹시 gcViewController 띄우는 상황있으면 뷰계층 문제 해결을 위해 close메서드 호출

eeeesong commented 3 years ago

애플 게임 센터 Auth 자체를 생성하게 되는 경우, Firebase database 데이터 연동까지 잘 넘어가는지 확인해볼 필요 있음