Domanda

In una partita sto sviluppando con GameCenter, voglio gestire il seguente scenario:

  1. l'utente inizia il gioco. Egli è mostrato il sistema di allarme che lo spinge per accedere GameCenter. Si ignora per il momento.
  2. dopo un po ', l'utente vuole accedere a GameCenter e fa clic su (ad esempio) la voce di menu Leaderboards. Si sceglie invece di annullare Entra, per ora.
  3. il processo si ripete più volte. Alla fine l'utente non vuole per accedere al GameCenter. Si seleziona la voce Leaderboard ancora una volta.

Nel mio test, ho trovato che il popup di allarme sollevato dalla chiamata a "authenticateWithCompletionHandler" (come richiamato dal GameCenterManager campione di Apple) che suggerisce di accedere al GameCenter appare solo un numero limitato di volte (4 o 5). L'ultima volta che appare, si dice "Game Center disabili, accedi con l'applicazione Game Center per consentire" dopo". In seguito, chiamando authenticateWithCompletionHandler non fa niente visibile -no pronta a tutti.

Gioco Fruit Ninja ho cercato di replicare questo. Tuttavia, nel loro caso, il popup che dice "Game Center Disabilitato" fa apparire ogni volta che clicco su un elemento GameCenter (Achievements, per esempio).

Quello che mi piacerebbe fare è quello di duplicare la funzionalità: che è, se non si è connessi a GameCenter, per avere l'allarme centro gioco standard appaiono tutte le volte si fa clic sulla voce di menu Leaderboard.

C'è un modo per sapere se il 'log in al centro di gioco' standard di avviso è apparso, o per costringerlo ad apparire in ogni momento (e non solo il primo paio di tentativi)?

È stato utile?

Soluzione

Il comportamento è qualcosa per l'effetto di, dopo N tentativi falliti - GameCenter disabilitare per l'applicazione. Riavviare l'app o andare login in GameCenter per sé lo otterrà di nuovo online.

non ricordo quale doc ho letto questo, ma c'è un doc di Apple là fuori che spiega questo comportamento.

Altri suggerimenti

Ecco un è un'idea per risolvere questo problema:

Non importa se un "GC authenticateWithCompletionHandler" -Richiesta viene annullato

  • dall'utente toccando "Cancel" nella finestra di dialogo

o per il fatto che

  • GC è disabilitato sul dispositivo (che avviene dopo che l'utente ha annullato l'avviso-finestra esattamente 3 volte (in iOS 5, almeno))

riceverai sempre un NSError con il codice 2 che dice "l'operazione richiesta è stata annullata.".

L'unico elemento di differenziazione che ho potuto trovare è il tempo trascorso tra l'authenticateWithCompletionHandler di richiesta e l'esecuzione del completamento-Handler.

Così, quando l'invio della richiesta sto salvando il tempo:

requestTime = [NSDate date]; 

e nel mio gestore di completamento i misurare il tempo trascorso:

NSDate* now = [NSDate date];
CFTimeInterval elapsedTimeSinceAuthenticationRequest = [now timeIntervalSinceDate:requestTime];
NSLog(@"time Elapsed: %f", elapsedTimeSinceAuthenticationRequest);

Se l'utente ha annullato la richiesta, il tempo trascorso sarà significativamente più lungo rispetto al tempo trascorso, se GC ha annullato l'operazione. Nel mio test, ci sono voluti un utente almeno un secondo per annullare la finestra di dialogo, mentre una richiesta di GC-cancellati sono voluti meno di 0,1 secondi (sul mio iPhone 4)

Naturalmente, questi valori possono variare a seconda del dispositivo piste codice avanti e avanti che altro il processore è occupato con in questo momento. Un trabocchetto ho già esaminato è il lancio dell'applicazione: Se si invia l'authenticationRequest durante applicationDidFinishLaunching come suggerito da Apple, ci sono voluti molto più tempo per GC per annullare la richiesta nel mio caso, in quanto il dispositivo è vista occupato di carico e tutto il necessario per il lancio l'applicazione.

Quindi, fatemi sapere se si è tentato questa soluzione e se ha funzionato per voi, come sarà una volta ho ho fatto ulteriori test ...

Non ho potuto trovare una buona risposta per questo neanche, così ho deciso di replicare solo il messaggio una volta che l'ho iniziare a ricevere l'errore annullare. Questo è ancora in fase di sviluppo ma cambia fondamentalmente il tasto di richiamata per visualizzare l'avviso di errore, piuttosto che di visualizzazione capo di bordo.

Solo una nota, non so se questo sarà approvata o no dal momento che sto replicando un messaggio di errore di Apple.

-(void) gcLogin: (id) sender {
    [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) {
        if(error) {
            if([[error domain] isEqualToString:GKErrorDomain] && [error code] == GKErrorCancelled) {
                [ResourceManager showAlertWithTitle:@"GameCenter Disabled" message:@"Sign in with Game Center application to enable"];
                mGameCenterCancelled = YES;
            }
            NSLog(@"%@", [error description]);
        } else { 
            [self updateMenu];
            mGameCenterCancelled = NO;
        }
    }];
}

sto giocando intorno con Game Center me stesso in questo momento ho visto lo stesso comportamento. Non c'è nulla nella documentazione dire nulla sulla finestra unica che mostra il primo paio di volte. Nel mio caso mi piacerebbe un modo per dire in anticipo se l'utente è già registrato in Game Center, in modo che possa comportarsi in modo appropriato. Ma ora non posso saperlo prima che la finestra di dialogo viene mostrato all'utente.

Dato che ci sono in esecuzione nella sandbox durante lo sviluppo questo potrebbe comportamento ovviamente essere qualcosa che si comporta in modo diverso durante la produzione, ma questo non è una cosa facile da scoprire.

sto affrontando lo stesso problema. Anche se io non sono riuscito a trovare un modo per far rispettare poping la stessa finestra di dialogo per accedere al Game Center, ho trovato un modo per implementare un messaggio di avvertimento dicendo 'GameCenter è disattivato' quando l'utente fa clic su un'icona leaderboard:

  

if ([GKLocalPlayer localPlayer] .authenticated == NO)
  {
     // Prompt un centro gioco avviso messaggio di avviso dicendo è disabilitato
  }
  altro
  {
    // Procedere con apertura leaderboard
  }

Spero che questo aiuti!

E sembra che iOS disabiliterà completamente Game Center e impedire che spingendo dopo l'utente sceglie di disattivare Game Center (l'opzione apparirà sul tuo quinto quinto Game Center Cancella Entra).

Per ripristinare il dispositivo allo stato originale in cui apparirà nuovamente il prompt di login. È sufficiente accedere utilizzando l'applicazione Game Center con un normale lavoro conto Game Center (non Tester). Una volta che siete in, Esci. Si dovrebbe iniziare che richiede ancora una volta all'interno del vostro app.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top