Nel nostro gioco iOS, utilizziamo Game Center per identificare i giocatori e sincronizzare i loro dati su dispositivi utilizzando i nostri server. Poiché Game Center identifica i giocatori, dobbiamo sapere se sono autenticati o se hanno cambiato l'autenticazione, ecc. Abbiamo una schermata del titolo che mostra "Inizializzazione Game Center ..." finché la chiamata di autenticazione non ritorna, e solo una volta sappiamo chi sono autenticati come (se qualcuno) entriamo nel gioco.Talvolta il gestore di autenticazione del Game Center non viene mai chiamato
Tuttavia, una quantità molto piccola di tempo (in effetti, non riesco a riprodurlo da solo), il gestore di autenticazione non viene mai chiamato, mai. Neanche dopo minuti di attesa. Il banner di benvenuto di Game Center non viene mai visualizzato, quindi non è che solo il nostro gestore non viene mai chiamato, ma in realtà non esiste uno stato di autenticazione, a quanto pare.
Finora abbiamo implementato un timeout di 30 secondi in cui, se non sentiamo nulla da Game Center, assumiamo che lo stato di autenticazione non sia cambiato e utilizziamo i dati salvati. Il timeout di 30 secondi non è l'ideale, quindi mi chiedo se ci sia qualche rima o motivo per cui GC non risponde.
Qui è il codice che viene chiamato da nostro metodo di App delegato application: didFinishLaunchingWithOptions:
:
PlayerModel *playerModel = [PlayerModel sharedPlayerModel];
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if ([localPlayer respondsToSelector:@selector(setAuthenticateHandler:)])
{
localPlayer.authenticateHandler = ^(UIViewController *gkViewController, NSError *error)
{
if (localPlayer.authenticated)
{
[playerModel loadFromGameCenter];
playerModel.hasGCStatus = TRUE;
[playerModel sync];
}
else if (gkViewController)
{
[viewController presentViewController:gkViewController animated:TRUE completion:nil];
}
else
{
NSLog(@"Could not authenticate with Game Center");
[playerModel unloadFromGameCenter];
playerModel.hasGCStatus = TRUE;
[playerModel sync];
}
};
}
else
{
[localPlayer authenticateWithCompletionHandler:^(NSError *error) {
if (localPlayer.authenticated)
{
[playerModel loadFromGameCenter];
playerModel.hasGCStatus = TRUE;
[playerModel sync];
}
else
{
NSLog(@"Could not authenticate with Game Center");
[playerModel unloadFromGameCenter];
playerModel.hasGCStatus = TRUE;
[playerModel sync];
}
}];
}
Sei sicuro che localPlayer non sia zero? Avete qualche ipotesi con la versione iOS che il gestore non viene chiamato? È la versione finale o beta? Se iOS 7 beta, inserisci una segnalazione di bug su Apple. Sei sicuro di non impostare il gestore di completamento su nil otherwhere? – Gougou
Cosa succede? Registra l'errore o nulla? Sarebbe bene sapere qual è l'output, quando il centro del gioco non ha funzionato. – Binarian
@Gougou questo è successo su iOS 6 in base alle mie conoscenze, non alle versioni beta. –