2016-07-11 8 views
1

aは有効ですか?認証エラーの場合でも有効ですか?認証が失敗した場合でも、localPlayerはまだ認証されていますか?

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

これは私が認証されたプレーヤーを持っている場合、たとえば起こる背景にアプリを移動し、無線LANを無効にし、再度前面にアプリを移動します。私の希望は、GameCenterはキャッシュされたアカウントで継続しているということですか?

マニュアルが少し曖昧です。 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Users/Users.html#//apple_ref/doc/uid/TP40008304-CH8-SW11から :

は「できるだけ早く背景にあなたのゲームが動くなど、地元の選手オブジェクトの認証されたプロパティの値になると、あなたのゲームが戻ってフォアグラウンドに移動するまで無効のままかどうかを判断するための値を読み取ることができません。 Game Kitがプレイヤーを再認証して認証ハンドラを呼び出すまで、プレーヤはまだ認証されています完了ハンドラが呼び出されるまで、認証されたプレーヤが存在しないかのように動作しなければなりません。再び。"

認証に失敗しても値は有効ですか?

答えて

1

私はこれにAppleと長続きするバグを持っています。進行中のダイアログで閉じられ、再開されました。 .authenticatedが有効かどうかの疑問は、あなたの見解に依存するようです。

AppleはAppleがあなたのゲームをプレイすることができると信じている情報をキャッシュしているので、 Appleは.authenticatedが本当にこの状態で有効であると言います。私はこのフォーラムのいくつかの開発者がその視点に同意しているのを見ましたが、私は自分の投稿に便利なリンクを持っていません。

実際には、実際には、この状態で次のゲームセンター操作を実行しようとすると、実際に認証されていないために失敗します。ゲームを保存したり、マッチを読み込んだりすることはできません。あなたが表示するリーダーボードは古いキャッシュデータです。

Appleは、プレイヤーがインフラに起因する問題を見るのを嫌に思う。したがって、このメカニズムでは、問題を後で解決することを期待して、状態を偽装することによって前方に進もうとします。私のゲームでは、その戦略は決して手を伸ばして、最終的には回復することができません。のユーザーが時間と労力をゲームに費やした後です。上記のコードのように、私はNSErrorの言うことに依存しています。 「エラー」と表示された場合は、プレイヤーを認証されていないものとして扱い、状況を修正するためのUIプロンプトを表示します。

私はここに私のアプローチの詳細を文書化しました:https://stackoverflow.com/a/37216566/1641444

+0

あなたは接続性を保証することはできませんモバイル環境では、ので、多分リンゴのアプローチが移動するための方法ですか?認証された属性は認証状態を示し、必要に応じてキャッシュされた情報を使用します。次のネットワーク操作が成功することを保証するものではありません。どうした? –

+0

フェアポイント。私の不満は、Airplaneモードのように、まだ接続できないことをすでに知っていても、依然として認証済みのレポートです。または、キャッシュされた結果を*通知せずに報告する。バグでは、認証済み、認証なし、キャッシュ済みの3つの状態の値にすることを提案しました。それから私は自分が在籍している状態を完全に理解し、進める方法を選ぶことができます。それはおそらく疑問点です。私は真剣に彼らが何かを変えるだろうと疑う。 – Thunk

関連する問題