Ios 与GKPeerPickerController的连接故障

Ios 与GKPeerPickerController的连接故障,ios,iphone,gamekit,gksession,gkpeerpickercontroller,Ios,Iphone,Gamekit,Gksession,Gkpeerpickercontroller,我正在用GKSession和GKPeerPickerController开发一款iOS游戏。我发现连接两台iOS设备的过程既慢又不可靠,即使它们紧挨在一起。让我们将我的设备称为“设备A”和“设备B” 以下是通常发生的情况: 在每台设备上,我都会点击应用程序的连接按钮。然后,每个设备都会显示“iPad、iPhone或iPod Touchs”窗口 通常很快,两台设备都会注意到另一台设备的存在 然后我告诉其中一个设备(比如设备A)连接到另一个 很快,设备B的窗口显示设备A不可用 这就是让人讨厌的地方。

我正在用GKSession和GKPeerPickerController开发一款iOS游戏。我发现连接两台iOS设备的过程既慢又不可靠,即使它们紧挨在一起。让我们将我的设备称为“设备A”和“设备B”

以下是通常发生的情况:

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

  • 通常很快,两台设备都会注意到另一台设备的存在

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

  • 很快,设备B的窗口显示设备A不可用

  • 这就是让人讨厌的地方。经过大约1秒到从不的一段时间后,设备B上会弹出一个窗口,说明设备a想要连接,并询问设备B是否想要接受连接

  • 如果上述窗口确实弹出,则一切正常进行。但这有时需要很长时间,有时根本不会发生

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

    我能做些什么吗

    我的连接方法非常简单:

    -(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被接受并断开除B以外的所有设备的连接(通过发送断开连接)
    -设备C断开2次连接,并将A和B从其大厅中移除


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

    我完全放弃了peerPickerController。查看苹果的GKRocket示例代码使用对等方的会话和表视图。现在我的设备上有点问题,原因我不清楚,但我使用了基本类:GameLobble和SessionManager,让设备连接得很好。还有一个优点,就是不把你限制在同一个人身上