Offline Game Center iOS Erfolge

8

Versuche im Offline-Modus (z. B. Flugmodus aktiviert) herauszufinden, wie man am besten mit Achievements im Game Center arbeitet.

Soweit ich weiß, kümmert sich Game Center in iOS 5+ um offline übermittelte Erfolge und Punkte. Es verhält sich wie ein Proxy-Cache und sendet sie beim nächsten Mal, wenn der Benutzer online ist, an das Online Game Center. In Anbetracht dessen hier ist was ich tue:

Beim Erfolg der Benutzerauthentifizierung lade ich Erfolge und speichere sie in einem Wörterbuch.

%Vor%

später, wenn ich eine neue Leistung einreiche Ich überprüfe die Leistung in einem Wörterbuch und reiche nicht ein, wenn die Leistung bereits abgeschlossen ist. Wenn ich Leistung sende, füge ich sie auch zu achievments dictionary (in-memory) hinzu, um sofort zu replizieren, dass diese Leistung bereits übergeben wurde.

%Vor%

Dieser Ansatz ermöglicht es mir, die Einreichung im Spielecode auszulösen, ohne dabei zu vergessen, dass ich die Leistung zweimal einsenden oder das Benachrichtigungsbanner zweimal anzeigen werde.

Alles funktioniert, wenn Game Center online ist. Aber wenn ich offline bin, habe ich 2 Probleme.

  1. Ladecode gibt Fehler zurück und das ursprüngliche Wörterbuch von achievments ist nicht mit bereits abgeschlossenen Errungenschaften gefüllt, dh jedes Mal, wenn der Benutzer das Spiel startet, erhält er ein Benachrichtigungsbanner für jede Errungenschaft, auch wenn es bereits vergeben wurde . Dann, nachdem es ins Wörterbuch gestellt wurde, wird es nicht angezeigt, aber ich möchte die Erfolge nicht einmal für jeden Spielstart zeigen.

  2. Ich bin mir nicht sicher, ob offline übermittelte Leistungen zu Game Center gelangen, wenn der Nutzer online geht. Ich kann Problem # 1 mithilfe von persistentem Speicher (wie Datenbank) lösen, um den Leistungsstatus zwischen den Spielstarts zu speichern, aber sollte ich sie erneut einreichen, wenn Game Center online ist und wie ich finde, ob Game Center tatsächlich online ist, da sogar offline reportAchievementWithCompletionHandler abgeschlossen ist ohne Fehler, so kann ich nicht feststellen, ob es nicht eingereicht wurde. Hier ist, wie ich teste, ich habe den Flugmodus eingeschaltet, wenige Erfolge freigeschaltet und dann den Flugmodus ausgeschaltet, Erfolge kommen nicht ins Game Center, obwohl dies ein "Sandbox" -Problem sein könnte.

Kirill Muzykov 08.01.2013, 20:04
quelle

1 Antwort

4

Fügen Sie den permanenten Speicher für "Leistung freigeschaltet", den Sie erwähnen, hinzu und speichern Sie für jede Errungenschaft eine Flagge "erfolgreich eingereicht an Game Center". Dann, wenn online, überprüfe die Ergebnisse von loadAchievementsWithCompletionHandler beim Start und regelmäßig, um zu sehen, ob jeder Erfolg, der unlocked && !submitted ist, tatsächlich Game Center erreicht hat und wenn nicht erneut einreicht.

    
johngirvin 20.02.2013, 08:54
quelle