ios – 重新连接到断开的对等体

我在我的应用程序中使用iOS 7 Multipeer框架,但我遇到了设备断开连接的问题。如果我在两个设备中打开应用程序:设备A和设备B,两个设备自动相互连接。然而,几秒钟后,设备A与设备B断开连接。即,首先连接如下:

A ---> B
A <--- B

几秒钟后:

A ---> B
A      B

设备A保持它的连接,但设备B得到一个MCSessionStateNotConnected。

这意味着A可以向B发送数据,但B不能回复。我试图通过检查设备是否连接,如果没有,重新启动连接使用:

[browser invitePeer:peerID toSession:_session withContext:Nil timeout:10];

但didChangeState回调只是得到用MCSessionStateNotConnected调用。

奇怪的是,如果我发送应用程序A的背景,然后重新打开它,B重新连接到它,并保持连接。

Multipeer API(和文档)似乎有点稀疏,所以我假设它只是工作。在这种情况下,我应该如何重新连接设备?

我有同样的问题,它似乎已经与我的应用程序浏览和广告,同时,两个邀请发送/接受相关。当我停止这样做,让一个同行推迟到另一个邀请的设备保持连接。

在我的浏览器委托中,我检查发现的对等体的displayName的哈希值,并且只有当我的对等体具有较高的哈希值时才发送邀请:

编辑

正如@Masa所指出的,32位和64位设备上的NSString的哈希值会不同,因此在displayName上使用compare:method会更加安全。

- (void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info {

    NSLog(@"Browser found peer ID %@",peerID.displayName);       

    //displayName is created with [[NSUUID UUID] UUIDString]

    BOOL shouldInvite = ([_myPeerID.displayName compare:peerID.displayName]==NSOrderedDescending);

    if (shouldInvite)
        [browser invitePeer:peerID toSession:_session withContext:nil timeout:1.0];
    else
        NSLog(@"Not inviting");
}

正如你所说,文档很稀疏,所以谁知道苹果真正想要我们做什么,但我已经尝试使用单个会话发送和接受邀请,还为接受/发送的每个邀请创建一个新会话,但这个特别的做事方式给了我最成功的。

http://stackoverflow.com/questions/19469984/reconnecting-to-disconnected-peers

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ios – 重新连接到断开的对等体