2011-12-09 20 views
8

¿GameKit te permite invitar a un amigo específico de Game Center a un partido, programáticamente, es decir, sin presentar el GC ViewController? La siguiente documentación handleInviteFromGameCenter parece dar a entender que se puede rellenar GKMatchRequest.playersToInvite y utilizarlo con [findMatchForRequest GKTurnBasedMatch]:Invitar a un amigo de Game Center programmentmatically

Cuando su delegado recibe este mensaje, su aplicación debe crear un nuevo objeto GKMatchRequest y asignar el parámetro playersToInvite a la propiedad playersToInvite de la solicitud de coincidencia. Luego, su aplicación puede llamar al método de clase GKTurnBasedMatch findMatchForRequest: withCompletionHandler: para encontrar una coincidencia programáticamente o puede usar la solicitud para instanciar un nuevo GKTurnBasedMatchmakerViewController para mostrar una interfaz de usuario para el reproductor.

Pero estoy descubriendo que cuando findMatchForRequest llama a mi bloque de finalización con la coincidencia poblada, el ID de GameCenter que le transmití no está configurado como el segundo jugador. En cambio, está vacío y el estado es "coincidente". Y por lo tanto, cuando llamo a endTurnWithNextParticipant, tiene éxito, pero la invitación no se recibe en mi segundo dispositivo. Esto ilustra lo que estoy haciendo:

GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease]; 
request.minPlayers = 2; 
request.maxPlayers = 2; 
request.playersToInvite = [NSArray arrayWithObjects: otherPlayerGCID,nil ]; 

[GKTurnBasedMatch findMatchForRequest:request 
        withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error) 
{ 
    if (error) 
     NSLog(@"returned from fimdmatch but with error"); 
    else if (match != nil) { 
     NSLog(@"match returned success and match populated"); 
     NSArray* otherPlayers = [match participants]; 
     if (otherPlayers.count>1) { 
      NSData* placeholder = [@"no data" dataUsingEncoding:NSUTF8StringEncoding]; 
      [match endTurnWithNextParticipant:[otherPlayers objectAtIndex:1] 
        matchData:placeholder 
        completionHandler:^(NSError *error) 
      { 
       if (error) 
       NSLog(@"returned from END TURN but with error"); 
       else 
       NSLog(@"returned from END TURN successfully"); 
      }];  

     } 
    } 
    else 
     System::log("match returned success but match NOT populated"); 
}]; 

Y al igual que la persona que parece estar teniendo un problema similar aquí Game Center inviting friends progammatically, si inserto una llamada al controlador de vista, en mi caso GKTurnBasedMatchmakerViewController, todo parece funcionar.

Gracias.

Actualizado: vi en la presentación de una de Apple Developer en GC por turnos, una mención de algo como: "Si quieres invitar a un amigo GC, le pedimos que pasar por el controlador de vista GC

.

Cualquier idea apreció Gracias de nuevo

+0

¿Esto todavía funciona en iOS9? Acabo de hacer una pregunta similar: http://stackoverflow.com/questions/36728503/gkmatchmaker-findmatchforrequest-invite-never-received – mark

Respuesta

7

quería compartir lo que he aprendido en este:.. a partir de iOS 5 no hay una manera de invitar a un amigo centro de juego para jugar un juego sin pasar por el flujo GKTurnBasedMatchmakerViewController predefinido , que está optimizado para iniciar una partida en tiempo real, guiando al usuario a través de tres pantallas diferentes.

Después de que el soporte de apple dev me pidiera que lo hiciera, envié una solicitud de función para poder invocar un controlador simple de vista de una página que permitiera al usuario enviar un mensaje de invitación/"recomendar juego" a través del centro de juegos .

ACTUALIZACIÓN PARA iOS 6: feliz de informar que se parezca a esto se ha abordado en iOS 6. Mi programática (no-IU) ejemplo original anterior ahora trabaja como se esperaba en un principio.

+0

¡Drat! Estoy en la misma situación, y esperaba que este no fuera el caso. –

+1

Gracias por la actualización, acabo de tropezar con la poca falta de documentación sobre GKTurnBasedMatch :(Aunque es extraño porque tengo la aplicación YatzyAddict y esto parece no utilizar un controlador de vista estándar para el reproductor múltiple. Primero pensé que era solo una Limitación de la caja de arena – Peter

+0

Si no está usando un controlador de vista estándar, probablemente no use GKMatchmaker para buscar coincidencias. De hecho, contacté al equipo de desarrollo para Carcassonne y me confirmaron que están usando su propio sistema. –

Cuestiones relacionadas