如果您的应用程序每次从睡眠状态唤醒,您如何阻止游戏中心“欢迎回来”消息显示?一些应用程序(如Scramble CE,Jetpack Joyride和Bubblin)正确处理(启动时只有一条欢迎消息),而其他应用程序(如Backgammon NJ)则不会(每次设备唤醒时都欢迎消息)。
正在运行的块代码不再在我的控制之下(发送到authenticateWithCompletionHandler),即使块无论如何都会显示欢迎消息。
这种行为在iOS 5.0中开始发生(在4.x中很好),并且发生在模拟器和真实设备中,而不是沙盒中。
谢谢!
答案 0 :(得分:1)
我来自BivisSoft。我们开发了Bubblin。
我们有一个控制GameCenter的Singleton。
这是我们的代码...... 它基于Jacob Gundersen的教程 - http://www.raywenderlich.com/5480/beginning-turn-based-gaming-with-ios-5-part-1。
你可以尝试一下!
#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!");
}
}
答案 1 :(得分:0)
在Game Kit编程指南中,我找到了一些文档:
所有支持Game Center的游戏都必须验证本地播放器 在使用Game Center的任何功能之前。你的游戏应该 启动后尽早验证播放器。理想的情况下, 只要您的游戏能够呈现用户,就应该进行身份验证 与播放器的接口。当您的游戏验证玩家时,游戏 套件首先检查是否已经过验证 设备上的播放器。 如果有经过身份验证的播放器,Game Kit 向玩家简要显示欢迎横幅。
似乎您不能使用公共API更改此行为。