測試GameCenter的登陸authencitate,登陸方法如下:
[cpp]
-(void) authenticateLocalPlayer {
GKLocalPlayer* localPlayer =
[GKLocalPlayer localPlayer];
localPlayer.authenticateHandler =
^(UIViewController *viewController,
NSError *error) {
[self setLastError:error];
if (CCDirector::sharedDirector()->isPaused()) {
CCDirector::sharedDirector()->resume();
}
// Player already authenticated
if (localPlayer.authenticated) {
_gameCenterFeaturesEnabled = YES;
} else if(viewController) {
CCDirector::sharedDirector()->pause();
[self presentViewController:viewController];
} else {
_gameCenterFeaturesEnabled = NO;
}
};
}
-(void) authenticateLocalPlayer {
GKLocalPlayer* localPlayer =
[GKLocalPlayer localPlayer];
localPlayer.authenticateHandler =
^(UIViewController *viewController,
NSError *error) {
[self setLastError:error];
if (CCDirector::sharedDirector()->isPaused()) {
CCDirector::sharedDirector()->resume();
}
// Player already authenticated
if (localPlayer.authenticated) {
_gameCenterFeaturesEnabled = YES;
} else if(viewController) {
CCDirector::sharedDirector()->pause();
[self presentViewController:viewController];
} else {
_gameCenterFeaturesEnabled = NO;
}
};
}
使用GameCenter在模擬器上運行沒有問題,在真機上第一次登陸運行就遇到了NSError錯誤提示:
[cpp]
GKErrorDomain Code=2 "The requested operation has been cancelled."
GKErrorDomain Code=2 "The requested operation has been cancelled."
正常情況下登陸,如果你的Apple ID默認已經登陸過,會彈出歡迎XX界面
第一次登陸,會彈出GameCenter登陸AppleID的提示框
localPlayer.authenticated值為false 表示登陸失敗,但是我的AppleID已經登陸過了,正常情況下是不應該失敗的
最後在stackoverflow上的一哥們的方法解決了 問題可能是由於登陸函數和模擬器上的函數綁定了。。。原因不太重要,重要的解決辦法
在View加載的地方調用一下如下函數:
[cpp]
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"gamecenter:"]];
把你的APPID登陸進去 然後點log out 再把上面的代碼從程序中刪除掉
再重新在真機上調試你的程序即可
解決辦法參考:stackoverflow
GameCenter登陸需要注意:
1.ios6.0後需要手動設置authenticateHandler,authenticateWithCompletionHandler: 已經在6.0中丟棄不用了
2.authenticationHandler第一個參數viewController在AppleID沒有登陸的時候 需要手動顯示“登陸GameCenter"界面,還要需要注意暫停邏輯
[cpp]
localPlayer.authenticateHandler =
^(UIViewController *viewController,
NSError *error)
localPlayer.authenticateHandler =
^(UIViewController *viewController,
NSError *error)3.這個登陸block函數在三種情況下會被調用:
當你設置了authenticationHandler並發出了驗證玩家的請求。
當app進入foreground(前台)。
在登錄時,例如玩家在進入游戲前沒有登錄,進入時會彈出登錄界面,在這個界面中的任何交互都會調用authenticationHandler。