Ios5 重复播放游戏中心欢迎横幅
如何防止每次应用程序从睡眠中醒来时显示Game Center“欢迎回来”消息?有些应用程序(如Scramble CE、Jetpack Joyride和Bubblin)能够正确处理(仅在发布时发送一条欢迎信息),而其他应用程序(如Backgamon NJ)则不能正确处理(每次设备唤醒时发送欢迎信息) 正在运行的块代码不再在我的控制中(发送到authenticateWithCompletionHandler),并且即使块仍然为空,也会显示欢迎消息 这种行为从iOS5.0开始发生(在4.x中还可以),在模拟器和真实设备中都会发生,在沙箱中,而不是Ios5 重复播放游戏中心欢迎横幅,ios5,game-center,Ios5,Game Center,如何防止每次应用程序从睡眠中醒来时显示Game Center“欢迎回来”消息?有些应用程序(如Scramble CE、Jetpack Joyride和Bubblin)能够正确处理(仅在发布时发送一条欢迎信息),而其他应用程序(如Backgamon NJ)则不能正确处理(每次设备唤醒时发送欢迎信息) 正在运行的块代码不再在我的控制中(发送到authenticateWithCompletionHandler),并且即使块仍然为空,也会显示欢迎消息 这种行为从iOS5.0开始发生(在4.x中还可以),
谢谢 在《游戏工具包编程指南》中,我找到了以下文档: 所有支持Game Center的游戏都必须对本地玩家进行身份验证 在使用游戏中心的任何功能之前。你的游戏应该 启动后尽早对播放器进行身份验证。理想的, 身份验证应该在您的游戏向用户呈现时立即进行 与播放器的接口。当您的游戏验证玩家时,游戏 Kit首先检查是否已经有经过身份验证的 设备上的播放器如果有经过身份验证的玩家,游戏套件 向玩家简要显示欢迎横幅。
您似乎无法使用公共API更改此行为。我来自BivisSoft。我们开发了泡泡糖 我们有一个控制游戏中心的单人游戏 这是我们的代码。。。 这是基于雅各布·冈德森的教程- 你可以试试
#pragma mark Singleton
static BSGameCenterManager *sharedHelper = nil;
+ (BSGameCenterManager *) sharedInstance {
if (!sharedHelper) {
sharedHelper = [[BSGameCenterManager alloc] init];
}
return sharedHelper;
}
#pragma mark Initializers
- (id)init {
if ((self = [super init])) {
gameCenterAvailable = [self isGameCenterAvailable];
if (gameCenterAvailable) {
self.localPlayerId = @"";
NSNotificationCenter *nc =
[NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(authenticationChanged)
name:GKPlayerAuthenticationDidChangeNotificationName
object:nil];
}
}
return self;
}
// Check if GameCenter is Avaiable
- (BOOL)isGameCenterAvailable {
// check for presence of GKLocalPlayer API
Class gcClass = (NSClassFromString(@"GKLocalPlayer"));
// check if the device is running iOS 4.1 or later
NSString *reqSysVer = @"4.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
BOOL osVersionSupported = ([currSysVer compare:reqSysVer
options:NSNumericSearch] != NSOrderedAscending);
return (gcClass && osVersionSupported);
}
#pragma mark Authentication
- (void)authenticationChanged {
if ([GKLocalPlayer localPlayer].isAuthenticated &&
!self.userAuthenticated) {
NSLog(@"GameCenter authentication changed: player authenticated.");
self.userAuthenticated = TRUE;
self.localPlayerId = [[GKLocalPlayer localPlayer] playerID];
[[NSNotificationCenter defaultCenter] postNotificationName: @"gameCenterPlayerAuthenticated" object: nil userInfo: nil];
[self checkNotSentScores];
} else if (![GKLocalPlayer localPlayer].isAuthenticated &&
self.userAuthenticated) {
NSLog(@"GameCenter authentication changed: player not authenticated");
self.userAuthenticated = FALSE;
self.localPlayerId = @"";
}
}
- (void)authenticateLocalUser {
if (!gameCenterAvailable) return;
NSLog(@"GameCenter authenticating local user...");
if ([GKLocalPlayer localPlayer].authenticated == NO) {
[[GKLocalPlayer localPlayer]
authenticateWithCompletionHandler:nil];
} else {
NSLog(@"GameCenter already authenticated!");
}
}
谢谢,我知道。我只知道App Store中的应用程序正在解决这个问题,我也想解决这个问题!您需要使用一些未记录的API调用来实现它,或者在不需要时以某种方式绕过GK身份验证检查。谢谢!我现在看到的唯一不同之处是单身部分,但我肯定会尝试一下。