2017-02-06 26 views
5

広告と閲覧の両方のデバイス。 接続を確立しようとすると問題が発生します。接続しようとするとiOSとXcodeのマルチ接続性

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

は働いていますが、数秒後に、それはMCSessionState == .notConnectedで再び呼び出しされています。

は、追加したばかりのWiFi、BT、およびその間のすべての組み合わせとの両方...

をしようとしました:

<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) 

(広告主は、アプリの名前です) 9.2と10.2 & iPhone 6とiPhone 6Sを使用します。 Xcode 8.2.1(Swift3)のMacOS ProでmacOS Sierra v10.12.2を実行しています。

答えて

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) 
} 
関連する問題