1

何らかの理由で、リアルタイムの試合(メッセージ、アラームなど)中にiOSアラートスタイルの通知がポップアップすると、試合は対戦相手からのデータの受信を停止します。アプリ自体は機能しますが、プレーヤー間のデータ転送はありません。

match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)stateデリゲートはまたはからのコールバックを受信しないためauthenticationChanged、プレーヤーは両方ともまだ試合に接続しているようです。

この問題は、ユーザーがアラートスタイルの通知を閉じるか、開くかに関係なく発生します。

なぜ/どのようにこれが起こっているのか、そしてどのようにそれを防ぐ/回復することができるのかについての考えはありますか?

4

1 に答える 1

1

何時間ものデバッグ、調査、フラストレーションの後、私の問題に遭遇しました。

モバイル デバイスと Game Center では切断とアクティブな辞退が発生する可能性が高いため、データ キューを使用してメッセージを送信しています。現在のメッセージをキューにスタックし (メッセージが唯一のメッセージである場合はメッセージを送信し)、次のデータ送信手順を実行します: 1) キュー内の最も古いメッセージを送信する、2) 対戦相手の受信確認を待つ、3) 最も古いメッセージを削除するキューからのメッセージ、4) キュー カウントがまだ > 0 の場合、キュー内の最も古いメッセージを送信...

ただし、特定のデータ タイプについては、キューをバイパスし、受信確認を求めないようにします。そのような例の 1 つは、アプリケーション通知UIApplicationWillResignActiveNotificationおよびUIApplicationDidBecomeActiveNotification. ただし、メッセージは受信確認を求めていませんでしたが、キューをバイパスするのを忘れていました。対戦相手が受信確認を返信しなかったため、UIApplicationWillResignActiveNotificationメッセージはキューを無期限にブロックしていました。

キューを適切にバイパスし、ゲームが問題なく再開されるようになりました。関連する実際のコードを見たい人がいれば、喜んで共有します。

于 2013-03-03T04:47:56.550 に答える