2016-07-11 7 views
1

Ist a gültig, auch im Falle eines Authentifizierungsfehlers?Ist localPlayer immer noch authentifiziert, auch wenn die Authentifizierung fehlschlägt

GKLocalPlayer.localPlayer.authenticateHandler = 
    ^(UIViewController *viewController, NSError *error) 
{ 
    if (error) 
    { 
    bool a = GKLocalPlayer.localPlayer.authenticated; 
    } 
    else 
    { 

Dies geschieht zum Beispiel, wenn ich einen authentifizierten Spieler haben, bewegt sich die App in den Hintergrund, deaktiviert das WiFi, und dann die App wieder in den Vordergrund bewegen. Ich hoffe, dass GameCenter nur mit einem zwischengespeicherten Account fortfährt?

Ich finde das Handbuch ein wenig mehrdeutig. Von https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Users/Users.html#//apple_ref/doc/uid/TP40008304-CH8-SW11.

„Sobald Ihr Spiel in den Hintergrund bewegt, wird der Wert des lokalen Spielerobjekts der authentifizierten Eigentums und bleibt ungültig, bis das Spiel in den Vordergrund bewegt sich zurück Sie können nicht den Wert lesen, um zu bestimmen, ob Der Spieler wird immer noch authentifiziert, bis Game Kit den Spieler erneut authentifiziert und den Authentifizierungshandler aufruft.Ihr Spiel muss so tun, als ob es keinen authentifizierten Spieler gibt, bis Ihr Beendigungshandler aufgerufen wird.Nachdem Ihr Handler aufgerufen wurde, ist der in der authentifizierten Eigenschaft gespeicherte Wert gültig nochmal."

Ist der Wert gültig, obwohl die Authentifizierung fehlgeschlagen ist?

Antwort

1

Ich habe einen lang laufenden Bug mit Apple auf diesem. Es wurde während des laufenden Dialogs geschlossen und wieder geöffnet. Die Frage, ob .authenticated gültig ist, scheint von Ihrer Perspektive zu hängen

Apple betrachtet dies als beabsichtigt, da Sie Informationen zwischengespeichert haben, von denen Apple glaubt, dass Sie weitermachen und Ihr Spiel spielen können. usw. Apple sagt, dass .authenticated in diesem Zustand tatsächlich gültig ist. Ich habe einige Entwickler in diesem Forum gesehen, die dieser Perspektive zustimmen, obwohl ich keine Links zu ihren Posts habe.

In der Praxis jedoch, wenn Sie versuchen, eine nachfolgende Game Center-Operation in diesem Zustand zu tun, wird es fehlschlagen, weil Sie nicht wirklich authentifiziert sind. Sie können keine Spiele speichern, keine Übereinstimmungen laden usw. Jede angezeigte Bestenliste wird veraltete, zwischengespeicherte Daten sein.

Es scheint mir, dass Apple es verabscheut, dass Spieler jemals ein Problem sehen, das von ihrer Infrastruktur herrührt. Mit diesem Mechanismus versuchen Sie also, vorwärts zu treiben, indem Sie den Zustand vortäuschen, in der Hoffnung, dass sich das Problem später herausbildet. In meinen Spielen geht diese Strategie nie aus und erreicht schließlich eine nicht wiederherstellbare Situation nach Benutzer haben Zeit/Aufwand in das Spiel investiert. Also, wie dein Code oben, verlasse ich mich darauf, was der NSError sagt. Wenn "Fehler" angezeigt wird, behandle ich den Player als nicht authentifiziert und erhalte UI-Anweisungen, um die Situation zu korrigieren.

Ich habe mehr Details hier auf meinem Ansatz dokumentiert: https://stackoverflow.com/a/37216566/1641444

+0

In einer mobilen Umgebung nicht Konnektivität garantieren kann, vielleicht Äpfel Ansatz der richtige Weg ist? Das authentifizierte Attribut gibt den Authentifizierungsstatus an, und zwar bei Bedarf mithilfe zwischengespeicherter Informationen. Es garantiert nicht, dass der nächste Netzwerkvorgang erfolgreich sein wird. Wie könnte es sein? –

+0

Messepunkt. Mein Mecker ist, wenn es bereits weiß, dass es keine Verbindung herstellen kann, wie im Flugmodus, und trotzdem authentifiziert gemeldet wird. Oder über die Zwischenspeicherung von Ergebnissen im Cache *, ohne dass es mir mitgeteilt wird. Ich schlug in meinem Fehler vor, es zu einem 3-stage-Wert zu machen: authentifiziert, nicht authentifiziert und zwischengespeichert. Dann werde ich den Zustand, in dem ich mich befinde, vollständig verstehen und entscheiden, wie ich vorgehen soll. Es ist wahrscheinlich ein strittiger Punkt. Ich bezweifle ernsthaft, dass sie etwas verändern werden. – Thunk