gpt4 book ai didi

ios - iOS GameCenter GKErrorCanceled

转载 作者:行者123 更新时间:2023-12-01 19:15:09 24 4
gpt4 key购买 nike

我处于沙盒模式,在应用程序中实现游戏中心。问题出在我登录gameCenter时,在某些设备上运行正常,而在另一些设备上运行良好,即使没有显示界面,我也会遇到GKErrorCanceled问题。

此设备没有在gameCenter中登录任何用户,因此与登录非沙箱帐户无关。我的代码是:

       GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

//First we try the new iOS6 authentification method for gamekit, if it's not implemented we will use the deprecated one
if ([localPlayer respondsToSelector:@selector(setAuthenticateHandler:)]) {
if (localPlayer.isAuthenticated) {
this->setState(connectionLoged);
this->getDelegate().socialConnectionDidSucceedLogin(*this);
return;
}
else if(!localPlayer.isAuthenticated && localPlayer.authenticateHandler){
this->setState(connectionClosed);
this->getDelegate().socialConnectionDidFailToLogin(*this, std::string("The user already resign to login"));
return;
}

else{
localPlayer.authenticateHandler = ^(UIViewController* viewController, NSError* error){
if (localPlayer.isAuthenticated)
{
_name = [localPlayer.displayName UTF8String];
_userId = [localPlayer.playerID UTF8String];

[GKPlayer loadPlayersForIdentifiers:localPlayer.friends withCompletionHandler:^(NSArray *players, NSError *error) {
for (GKPlayer* player in players) {
if ([player isFriend]) {
NSDictionary* dict =
@{@"displayName" : player.displayName,
@"alias" : player.alias,
@"playerID" : player.playerID};

AttrDictionary* playerInfo = [dict hydraAttrDictionary];
SocialFriend* socialfriend = this->getNewFriendInstance(*playerInfo);

this->addFriend(socialfriend);

delete playerInfo;
}
}

this->getDelegate().socialConnectionDidSucceedLogin(*this);
this->setState(connectionLoged);

}];
}
else if(viewController){
UIViewController* rootViewController = (UIViewController*) [UIApplication sharedApplication].keyWindow.rootViewController ;
[rootViewController presentModalViewController:viewController animated:YES];
}
else{
if(error){
this->getDelegate().socialConnectionDidFailToLogin(*this, std::string([error.description UTF8String]));
}
else{
this->getDelegate().socialConnectionDidFailToLogin(*this, std::string("User cancelled login"));
}
}

};
}
}
//deprecated at IOs 6 authentification method
else
[localPlayer authenticateWithCompletionHandler:^(NSError *error) {
if (localPlayer.isAuthenticated)
{
_name = [localPlayer.displayName UTF8String];
_userId = [localPlayer.playerID UTF8String];

[GKPlayer loadPlayersForIdentifiers:localPlayer.friends withCompletionHandler:^(NSArray *players, NSError *error) {
for (GKPlayer* player in players) {
if ([player isFriend]) {
NSDictionary* dict =
@{@"displayName" : player.displayName,
@"alias" : player.alias,
@"playerID" : player.playerID};

AttrDictionary* playerInfo = [dict hydraAttrDictionary];
SocialFriend* socialfriend = this->getNewFriendInstance(*playerInfo);

this->addFriend(socialfriend);

delete playerInfo;
}
}

this->getDelegate().socialConnectionDidSucceedLogin(*this);
this->setState(connectionLoged);

}];


}
else{
NSString* errorString = [error localizedDescription];

this->getDelegate().socialConnectionDidFailToLogin(*this, std::string([errorString UTF8String]));
this->setState(connectionClosed);
}
}];

我需要与iOS 6和iOS 5兼容的代码,因此您将看到我有两个实现。对于iOS 6,完成处理程序返回一个UIViewController null和我所说的错误。恐怕在生产中也会发生同样的情况。在模拟器中一切正常。

PS-您会发现一些c ++代码,这是因为我的游戏是用cocos2dx编写的,因此我为GameCenter实现了c ++包装器...

最佳答案

当有人取消退出界面以登录游戏中心时,它将给您GKErrorCanceled。他们连续第三次取消游戏,它将警告他们将禁用游戏中心。

如果他们确实选择禁用游戏中心,则它将不再显示界面,而只会显示GKErrorCanceled。

禁用游戏中心后,登录的唯一方法是进入实际的游戏中心应用程序。

连续3次可以出现在使用游戏中心的任何应用程序或应用程序的任何组合中,并且所有使用游戏中心的应用程序都将禁用游戏中心。每次登录游戏中心,连续3次重新启动。

这既适用于沙箱,也适用于非沙箱。

这适用于ios 5和ios 6。

关于ios - iOS GameCenter GKErrorCanceled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13825386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com