2012-11-22 160 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