2014-07-13 3 views
3

게임 센터를 통해 플레이어를 인증해야합니다. 나는 그럭저럭 할 수 있었다. 그러나 그것은 일하는 것을 그만 뒀다. 이제는 항상 "viewController = nil"을 얻었고 localPlayer가 인증되었는지 검사 할 때 항상 false를 반환합니다.GameCenter를 통해 플레이어를 인증하는 방법

-(void)authenticateLocalPlayer{ 
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 

    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){ 
     if (viewController != nil) { 
      [_spriteViewController presentViewController:viewController animated:YES completion:nil]; 
     } else { 
      if ([GKLocalPlayer localPlayer].authenticated) { 
       NSLog(@"authenticated"); 
       _gameCenterEnabled = YES; 

       // Get the default leaderboard identifier. 
       [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) { 

        if (error != nil) { 
         NSLog(@"%@", [error localizedDescription]); 
        } else { 
         _leaderboardIdentifier = leaderboardIdentifier; 
        } 
       }]; 
      } else { 
       NSLog(@"not authenticated"); // This is always triggered 
       _gameCenterEnabled = NO; 
      } 
     } 
    }; 
} 

내가 뭔가 잘못하고 있는가 :

이것은 내가 뭘 무엇인가? 어떤 일을해야합니까/먼저 이것이 작동하는지 확인하십시오.

+0

여기에서 토론을 읽었습니까? https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKLocalPlayer_Ref/Reference/Reference.html#//apple_ref/occ/instp/GKLocalPlayer/authenticateHandler? 플레이어가 Game Center를 통해 인증 할 수 있도록 처리기로 전달 된보기 컨트롤러를 제시해야합니다. –

+0

이유가 무엇인지 알려지지 않았습니다. 방금 수정했지만 viewController는 nil입니다. 왜 이것이 일어날 수 있습니까? – lisovaccaro

+0

메인 스레드에서이 모든 것을 호출하는지 확인 했습니까? – lukaswelte

답변

0

동일한 장치에서 여러 번 테스트 한 경우 먼저 전화 설정을 재설정하십시오. this link

이 코드가 도움이됩니다.

 if ([GKLocalPlayer localPlayer].authenticated == NO) { 
      GKLocalPlayer* localPlayer = [GKLocalPlayer localPlayer]; 

      localPlayer.authenticateHandler = ^(UIViewController *gcvc,NSError *error) { 

       if(gcvc) { 

        [self presentViewController:gcvc animated:YES completion:nil]; 
       } 
       else { 
        _gameCenterEnabled = NO; 

       } 
      }; 
     } 

     else if ([GKLocalPlayer localPlayer].authenticated == YES){ 
      _gameCenterEnabled = YES; 


     } 

그리고 리더 보드 식별자에 대해 이미 아이튠에서 가져온 코드에서 정적으로 정의 할 수 있습니다. 그것은 잘 작동합니다. 하지만 게임 센터에 필요한 모든 설정을 재설정하기 전에 여러 시간 게임 센터 인증이 실패한 경우 해당 앱에 대한 게임 센터 사용이 중지됩니다. 모든 설정을 다시 설정해야합니다. 만약 당신이 아이폰 시뮬레이터에서 시도해보십시오. iphone 시뮬레이터를 재설정하고이 코드를 실행하십시오. 그것은 작동합니다.

관련 문제