2012-11-22 118 views

回答

1

如果您使用的是iOS 6,请参阅GKLocalPlayer的文档。您会看到您将一个块分配给localPlayer的'authenticateHandler'属性。当你分配它时,如果玩家还没有登录到Game Center,那么块的一个参数(UIViewController * viewController)被填入视图控制器的地址,该视图控制器将呈现普通的Apple Game Center登录屏幕。获得该地址后,您将显示ViewController:viewController,用户将看到正常的Apple登录屏幕。当用户完成与它的交互时,你会回到'gameCenterViewControllerDidFinish'。您提供的块不止一次运行,这使得该过程非常难以遵循,但是可行。为什么它值得我在我使用的方法下面发布,似乎工作。它假定iOS5或iOS6。对于任何早于5的任何内容都不是好的.OS6是在iOS6上返回YES并且否则返回NO的方法。这不是为公共消费而编写的,所以请原谅所有的调试内容和不明原因的东西。

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

     //iOS 6 
if ([self os6]) { 
    localPlayer.authenticateHandler = ^(UIViewController *loginVC, NSError *error) { 
     NSLog(@"in authenticateHandler 1"); 
     [self setLastError:error]; 
      //... resume application responses 
     [[CCDirector sharedDirector] resume]; //if not paused does nothing 
     if ([GKLocalPlayer localPlayer].authenticated) { 
      NSLog(@"in authenticateHandler 2 - local player is authenticated"); 
     } else if (loginVC) { 
      NSLog(@"in authenticateHandler 3 - local player is not authenticated, will present VC"); 
       //... pause applications responses 
      [[CCDirector sharedDirector] pause]; 
      [self presentViewController:loginVC]; 
     } else { 
      NSLog(@"in authenticateHandler 4 - local player is NOT authenticated, no VC returned"); 
     } 
     NSLog(@"authenticateHandler error: %@", error.localizedDescription); 
    }; 

     //iOS 5 
} else { 
    if ([GKLocalPlayer localPlayer].authenticated == NO) { 
      //no completion handler because we're relying on NSNotificationCenter 
     [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil]; 
     NSLog(@"local player authentication requested"); 
    } else { 
     NSLog(@"local player was already authenticated"); 
    } 
} 

}

1

你可以做到这一点。 没有直接使用的gamecenter API。您可以显示gamecenter认证屏幕,并在认证后,您可以继续。

+0

有哪些被调用的成功验证任何委托方法? – GameFreak