2013-08-23 2 views
5

iOS 게임에서 우리는 Game Center를 사용하여 플레이어를 식별하고 자체 서버를 사용하여 장치간에 데이터를 동기화합니다. Game Center는 플레이어를 식별하기 때문에 인증되었는지 또는 인증 변경 여부 등을 알아야합니다. 인증 호출이 반환 될 때까지 "게임 센터 초기화 중 ..."이라는 제목의 스크린이 있습니다. 우리는 누구에게 인증을 받았는지 알고 있습니다.간혹 Game Center 인증 처리기가 호출되지 않습니다

그러나 시간의 양이 매우 짧습니다. 사실, 인증 처리기는 절대로 호출되지 않습니다. 기다리지도 못했습니다. Game Center 환영 배너는 결코 표시되지 않으므로 우리의 처리기가 호출되지 않는다는 것이 아니라 실제로 인증 상태가없는 것으로 보입니다.

지금까지 Game Center에서 아무 것도 듣지 못하면 인증 상태가 변경되지 않았다고 가정하고 저장된 데이터를 사용합니다. 30 초 제한 시간은 이상적이지 않으므로 GC가 응답하지 않을 때 운율이나 이유가 있는지 궁금합니다. 여기

우리의 앱 위임의 application: didFinishLaunchingWithOptions: 방법에서 호출되는 코드입니다 :

PlayerModel *playerModel = [PlayerModel sharedPlayerModel]; 
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 
if ([localPlayer respondsToSelector:@selector(setAuthenticateHandler:)]) 
{ 
    localPlayer.authenticateHandler = ^(UIViewController *gkViewController, NSError *error) 
    { 
     if (localPlayer.authenticated) 
     { 
      [playerModel loadFromGameCenter]; 
      playerModel.hasGCStatus = TRUE; 
      [playerModel sync]; 
     } 
     else if (gkViewController) 
     { 
      [viewController presentViewController:gkViewController animated:TRUE completion:nil]; 
     } 
     else 
     { 
      NSLog(@"Could not authenticate with Game Center"); 
      [playerModel unloadFromGameCenter]; 
      playerModel.hasGCStatus = TRUE; 
      [playerModel sync]; 
     } 
    }; 
} 
else 
{ 
    [localPlayer authenticateWithCompletionHandler:^(NSError *error) { 
     if (localPlayer.authenticated) 
     { 
      [playerModel loadFromGameCenter]; 
      playerModel.hasGCStatus = TRUE; 
      [playerModel sync]; 
     } 
     else 
     { 
      NSLog(@"Could not authenticate with Game Center"); 
      [playerModel unloadFromGameCenter]; 
      playerModel.hasGCStatus = TRUE; 
      [playerModel sync]; 
     } 
    }]; 
} 
+0

localPlayer가 0이 아닌 것은 확실합니까? 핸들러가 호출되지 않은 iOS 버전에 대한 추측이 있습니까? 최종 버전인가, 베타 버전인가? iOS 7 베타 버전의 경우 Apple에 버그 신고서를 작성하십시오. 완성 처리기를 다른 곳으로 설정하지 않겠습니까? – Gougou

+0

무슨 일입니까? 오류를 기록합니까, 아니면 아무것도 기록하지 않습니까? 게임 센터가 작동하지 않을 때 출력물이 무엇인지 알면 좋을 것입니다. – Binarian

+0

@ Gougou 이것은 iOS 6에서 베타 버전이 아닌 내 지식을 최대한 활용하여 발생했습니다. –

답변

3

나는 샌드 박스 서버에서 우리의 게임 중 하나에서 테스트하는 동안이 경험을했다, 정말 아무런 통지 또는 인증 핸들러 호출은 없었다 때로는 30 분 후에 만 ​​작동합니다.

우리는 게임 센터 샌드 박스 밖에서이 문제가 발생하지 않았기 때문에 애플 서버 끝으로 인한 것이라고 요약했습니다.

설명이 약간 애매하고 사용자가 할 수있는 구체적인 내용이 없습니다. 하지만 그것은 당신의 코드가 아닙니다. 결국 당신은 통제 할 수 없습니다.

+0

아마도 가장 유용한 답변 일 것입니다.나는 그것을 받아들이 려하지 않는다. 거기에 다른 대답이 있기를 바란다. (현상금은 어쨌든 만료되었다.) 어쨌든 고마워. –

+0

걱정하지 마십시오. 때로는 사과의 서비스가 유동적 인 것처럼 느껴질 수 있으며 문제가 발생하는 모든 문제를 해결할 만족스러운 방법이 없습니다. –

+0

@RuddZwolinski 메인 게임 센터 서버 (예 : 샌드 박스가 아닙니다)에서이 문제가 발생합니까? 왜냐하면 나는 나의 사건에서 이것은 무작위적인 사건이 아니라는 것을 제외하고는 똑같은 문제를 가지고 있기 때문이다. 로그인 폼을 취소하고이 뷰 컨트롤러에서 이전 폼으로 팝하면 발생합니다. 그런 다음 인증을 한 번 더 호출하십시오. 두 번째로 나는 어떤 응답도받지 못한다. 나는 무엇을 해야할지 모르겠다 =/나는 샌드 박스 게임 센터에있다. –

0

인증 후 알려야하는 GKPlayerAuthenticationDidChangeNotificationName을 청취 해보십시오. 적어도 누락 된 메시지를 추측 할 수 있습니다.

문제는 Apple 서버에있을 수 있습니다. 당신은 당신의 iPhone이 사용하는 네트워크 프록시에서 wireshark 추적을 실행함으로써이를 제거 할 수 있습니다. 다른 사람들의 전화기에서만 볼 수 있다면 네트워크 연결 및 도달 가능성에 대한 로그를 남기면 특정 네트워크 이벤트가 발생하면 상호 연관됩니다.

간과되고있는 내용을 알려주는 경우에는 코드의 일부로 NSErrors을 로깅 할 가치가 있습니다.

0

우리는 우리가 와이파이상에서 일부 사람들에게만 일어난 것과 같은 문제를 경험했습니다. 게임 센터는 방화벽 수작업이 우연히 필요하다는 것을 알게되었습니다. https://support.apple.com/en-us/HT202944 일부 네트워크는 이러한 포트를 차단하여 통화가 응답하지 않게하는 것이 문제라고 생각합니다.