2017-02-06 65 views
5

這兩種設備都可以廣告和瀏覽。 嘗試建立連接時發生問題。iOS上的多重連接與Xcode

func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {} 

是否嘗試連接,但幾秒鐘後,它被再次MCSessionState == .notConnected致電時工作。

具備WiFi,藍牙,以及兩者之間的每一個組合都嘗試...

只是說:

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <true/> 
    <key>NSTemporaryExceptionRequiresForwardSecrecy</key> 
    <false/> 
</dict> 

沒幫多少...仍然在控制檯得到(只在iOS 10.2裝置,雖然...):

2017-02-06 15:17:37.858063 Advertiser[1149:316236] [ViceroyTrace] [ICE][ERROR] ICEStopConnectivityCheck() found no ICE check with call id (1724768204) 
2017-02-06 15:17:39.727633 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:39.808822 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:39.948454 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:40.179569 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:40.591829 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:41.297454 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:42.547840 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:44.077537 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:45.601568 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:47.125030 Advertiser[1149:316295] [ViceroyTrace] [ICE][ERROR] Send BINDING_REQUEST failed(C01A0041). 
2017-02-06 15:17:48.110301 Advertiser[1149:316267] [GCKSession] Not in connected state, so giving up for participant [66CDDFCC] on channel [0]. 
2017-02-06 15:17:48.111331 Advertiser[1149:316267] [GCKSession] Not in connected state, so giving up for participant [66CDDFCC] on channel [1]. 
2017-02-06 15:17:48.111526 Advertiser[1149:316267] [ViceroyTrace] [ICE][ERROR] ICEStopConnectivityCheck() found no ICE check with call id (1724768204) 
2017-02-06 15:17:48.111705 Advertiser[1149:316267] [GCKSession] Not in connected state, so giving up for participant [66CDDFCC] on channel [2]. 
2017-02-06 15:17:48.111873 Advertiser[1149:316267] [ViceroyTrace] [ICE][ERROR] ICEStopConnectivityCheck() found no ICE check with call id (1724768204) 
2017-02-06 15:17:48.112042 Advertiser[1149:316267] [GCKSession] Not in connected state, so giving up for participant [66CDDFCC] on channel [3]. 
2017-02-06 15:17:48.113031 Advertiser[1149:316267] [ViceroyTrace] [ICE][ERROR] ICEStopConnectivityCheck() found no ICE check with call id (1724768204) 
2017-02-06 15:17:48.121016 Advertiser[1149:316267] [GCKSession] Not in connected state, so giving up for participant [66CDDFCC] on channel [4]. 
2017-02-06 15:17:48.121321 Advertiser[1149:316267] [ViceroyTrace] [ICE][ERROR] ICEStopConnectivityCheck() found no ICE check with call id (1724768204) 
2017-02-06 15:17:48.121506 Advertiser[1149:316267] [GCKSession] Not in connected state, so giving up for participant [66CDDFCC] on channel [5]. 
2017-02-06 15:17:48.121683 Advertiser[1149:316267] [ViceroyTrace] [ICE][ERROR] ICEStopConnectivityCheck() found no ICE check with call id (1724768204) 

(廣告商是應用程序的名稱) 使用iPhone 6S 10.2 & iPhone 6 9.2。 使用maccode Sierra v10.12.2從Xcode 8.2.1(Swift3)在Macbook Pro上運行代碼。

回答

0

如果兩個設備在建立連接後繼續進行廣告和瀏覽,則當它們重新發現對方時它們可能會斷開連接。建立連接後,請通過以下方式關閉瀏覽:

MCNearbyServiceBrowser.stopBrowsingForPeers() 

如果設備繼續播發,其他設備仍然可以連接到它們。

2

您是否保留對廣告客戶和瀏覽器的MCSession對象的引用?那些BINDING_REQUEST失敗的消息確實發生,如果正在使用的MCSession對象被取消分配。

2

我有同樣的問題,我找到了解決方案。它仍然顯示一些錯誤,但它適用於我。

嘗試初始化MCSession如下:

let mcSession = MCSession(peer: self.mcPeerId, securityIdentity: nil, encryptionPreference: .none) 

然後實現MCSession的證書處理程序委託方法如下:

func session(_ session: MCSession, didReceiveCertificate certificate: [Any]?, fromPeer peerID: MCPeerID, certificateHandler: @escaping (Bool) -> Void) { 
    certificateHandler(true) 
}