2012-03-20 3 views
2

アプリがスリープから復帰するたびにゲームセンターの "ようこそ"メッセージが表示されないようにするにはどうすればよいですか?いくつかのアプリ(Scramble CE、Jetpack Joyride、Bubblinなど)は正常に処理します(起動時には1つのウェルカムメッセージ)、他のもの(Backgammon NJなど)では、デバイスが起動するたびにメッセージが表示されません。ゲームセンターのウェルカムバナーを繰り返す

実行中のブロックコードが(authenticateWithCompletionHandlerに送信された)自分のコントロールになくなり、とにかくブロックが空であってもウェルカムメッセージが表示されます。

この現象は、iOS 5.0(4.xで問題ありません)で発生し、シミュレータと実際のデバイスの両方、サンドボックス内で発生します。

ありがとうございます!

答えて

0

はゲームキットのプログラミングガイドでは、私はドキュメントのこのビットが見つかりました:

ゲームセンターをサポートするすべてのゲームは、ゲームセンターの機能のいずれかを使用する前に、ローカルプレーヤー を認証する必要があります。あなたのゲームは、起動後できるだけ早くプレーヤーを認証するように する必要があります。理想的には、 認証は、ゲームがユーザに インターフェイスを提示するとすぐに実行されるべきです。ゲームでプレーヤーが認証されると、ゲーム キットはまず、認証された プレーヤーがデバイスに存在するかどうかを確認します。 認証されたプレーヤーがいる場合、ゲームキット は、プレーヤーにウェルカムバナーを簡単に表示します。

パブリックAPIを使用してこの動作を変更することはできません。

+0

ありがとう、私はそれを認識しています。私はちょうどApp Storeのアプリがこれを回避していることを知っています。私もそうしたいと思います! – user1281726

+0

さて、文書化されていないAPIコールを使用して、それが起こらないようにするか、GK認証チェックをバイパスする必要があります。 –

1

私はBivisSoftからです。私たちはBubblinを開発しました。

GameCenterを制御するシングルトンがあります。

ここにコードがあります... これは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!"); 
     } 
    } 
+0

ありがとう!オフハンドで見られるのはシングルトンの部分だけですが、私は間違いなくそれを試してみます。 – user1281726

関連する問題