与GKPeerPickerController的连接问题

我正在使用GKSession和GKPeerPickerController开发iOS游戏。 我发现连接两个iOS设备的过程很慢且不可靠,即使它们彼此相邻也是如此。 我们将我的设备称为“设备A”和“设备B”。

通常会发生以下情况:

  1. 在每台设备上,我点击应用程序的连接按钮。 然后,每个设备都会显示“iPad,iPhone或iPod touch”窗口。

  2. 通常很快,两个设备都注意到另一个存在。

  3. 然后我告诉其中一个设备(比如设备A)连接到另一个设备。

  4. 很快,设备B的窗口显示设备A不可用。

  5. 这是令人讨厌的地方。 在从大约1秒到从不的一段时间之后,在设备B上弹出一个窗口,表示设备A想要连接,并询问设备B是否想要接受该连接。

  6. 如果弹出上面的窗口,一切都会正常进行。 但这有时需要很长时间,有时根本不会发生。

我有三个设备,无论我使用哪两个,我都有类似的问题。

我能做些什么吗?

我的连接方法非常简单:

-(void) findPeerPickerOpponents { GKPeerPickerController *picker; picker = [[GKPeerPickerController alloc] init]; picker.delegate = self; [picker show]; [self.connectionDelegate disableIdleTimer]; } 

好的,你应该做什么:
– 假设您有设备A,B和C.
– 设备A正在扫描,设备B刚刚开始扫描
– 设备A将设备B视为新对等设备 – 它将邀请发送给B
– 设备B获得邀请 – 它自动批准它,两个设备都连接,没有通知给用户,除了设备出现在大厅
– 设备C出现
– 设备A和B尝试连接到它,它们自动连接并出现在大厅
– 玩家触摸设备A上的设备B.
– 设备A向B发送WANNAPLAY数据包
– B弹出询问玩家是否想玩A – 玩家回答是
– 设备B向A发送ACCEPTED并断开除A之外的所有人(通过发送DISCONNECT)
– 设备A获得ACCEPTED并断开除B之外的所有人(通过发送DISCONNECT)
– 设备C获得2x DISCONNECT并从其大厅中移除A和B.

它比标准方法工作得更好,即使它比10倍更多的工作 – 我做到了两种方式,这是一个非常好的解决方案。

我完全放弃了peerPickerController。 查看Apple的GKRocket示例代码。 – 使用GKSession和同行的表格视图。 我现在的设备上有点儿麻烦,原因我不清楚,但是我使用了基本的类:GameLobby和SessionManager让设备很好地连接起来。 还有一个优点是不限制你到一个同伴。