Las invitaciones de Game Center no se muestran

He estado desarrollando un juego que permite partidas multijugador. Anteriormente había probado las invitaciones multijugador y todos habían funcionado. El envío de una request desde un dispositivo mostró un banner en el otro y si la invitación fue aceptada, el juego comenzó.

Justo antes de enviar la aplicación, hace dos noches, volví a probar esta funcionalidad solo para descubrir que había dejado de funcionar.

- (void)authenticateLocalUser:(UIViewController *)viewController :(id<GCHelperDelegate>)theDelegate { delegate = theDelegate; self.presentingViewController = viewController; if (!gameCenterAvailable) { // Game Center is not available. userAuthenticated = FALSE; } else{ GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; /* The authenticateWithCompletionHandler method is like all completion handler methods and runs a block of code after completing its task. The difference with this method is that it does not release the completion handler after calling it. Whenever your application returns to the foreground after running in the background, Game Kit re-authenticates the user and calls the retained completion handler. This means the authenticateWithCompletionHandler: method only needs to be called once each time your application is launched. This is the reason the sample authenticates in the application delegate's application:didFinishLaunchingWithOptions: method instead of in the view controller's viewDidLoad method. Remember this call returns immediately, before the user is authenticated. This is because it uses Grand Central Dispatch to call the block asynchronously once authentication completes. */ //ios 6 [localPlayer setAuthenticateHandler:(^(UIViewController* viewcontroller, NSError *error) { if (viewcontroller != nil){ userAuthenticated = FALSE; [self.presentingViewController presentViewController: viewcontroller animated: YES completion:nil]; } else if (localPlayer.isAuthenticated){ // Enable Game Center Functionality userAuthenticated = TRUE; [self checkForInvite:self.presentingViewController :delegate]; if (! self.currentPlayerID || ! [self.currentPlayerID isEqualToString:localPlayer.playerID]) { // Current playerID has changed. Create/Load a game state around the new user. self.currentPlayerID = localPlayer.playerID; // get friends of local player [localPlayer loadFriendsWithCompletionHandler:^(NSArray *friends, NSError *error) { if (friends != nil) { [self loadPlayerData: friends]; } }]; } } else{ userAuthenticated = FALSE; } [scoreHandler setGameCentreAvailable:userAuthenticated]; })]; } } - (void)checkForInvite :(UIViewController *)viewController :(id<GCHelperDelegate>)theDelegate { delegate = theDelegate; self.presentingViewController = viewController; NSLog(@"Invite handler installed"); [GKMatchmaker shanetworkingMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) { // Insert application-specific code here to clean up any games in progress. if (acceptedInvite){ NSLog(@"Accepted"); GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite] autorelease]; mmvc.matchmakerDelegate = self; [viewController presentViewController: mmvc animated: YES completion:nil]; } else if (playersToInvite) { NSLog(@"Match Request"); GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease]; request.minPlayers = 2; request.maxPlayers = 2; request.playersToInvite = playersToInvite; GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease]; mmvc.matchmakerDelegate = self; [viewController presentViewController: mmvc animated: YES completion:nil]; } }; } 

La window de debugging en xcode muestra lo siguiente:

 2013-03-27 18:06:20.112 MyApp[791:907] Authentication changed: player authenticated. 2013-03-27 18:06:21.219 MyApp[791:907] Invite handler installed Mar 27 18:06:21 Neils-iPhone MyApp[791] <Notice>: 18:06:21.356712 com.apple.GameKitServices: -[GKDiscoveryManager startAdvertisingLocalPlayer:discoveryInfo:]: I am [<nil>] [7989F444CF2BDA83] discoveryInfo [{ e = 2; h = A42FD7FD; }] 

¿Es significativo el "Yo soy [] …" en las líneas anteriores?

Incluso he descargado y ejecutado el tutorial del sitio de Ray Wenderlich para crear un juego multijugador y he intentado eso. Eso muestra los mismos problemas, a less que se esté ejecutando en primer plano en ambos dispositivos. Mi aplicación no muestra requestes de invitación incluso si se ejecuta en primer plano.

¿Alguien más ha experimentado este problema o tiene alguna idea de lo que está sucediendo? authenticateLocalUser se llama desde applicationDidFinishLaunching

La única forma en que puedo hacer un trabajo de invitación por nombre es ir a Settings/Notifications/Game Center y hacer que Game Center muestre Alertas , no Banners.

Si tiene alertas de pantalla de GC, obtendrá un cuadro emergente como este:

introduzca la descripción de la imagen aquí

Este dialog actúa como un gran padre. Si el usuario golpea Accept , su [GKMatchmaker shanetworkingMatchmaker].inviteHandler invocado.

Si el usuario toca Decline , tu juego nunca sabe que fue invitado a una fiesta alguna vez . El usuario que pulsa Decline significa que el padre interrumpe la invitación y nunca le dice a su hijo que fue invitado a un juego.

Esta es la única forma en que pude invitar por nombre a trabajar.