【问题标题】:Multipeerconnectivity on iOS with Xcode使用 Xcode 在 iOS 上实现多点连接
【发布时间】:2017-06-23 11:35:41
【问题描述】:

设备广告和浏览。 尝试建立连接时出现问题。

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)

(Advertiser 是应用的名称) 使用带有 10.2 的 iPhone 6S 和带有 9.2 的 iPhone 6。 使用 Xcode 8.2.1 (Swift3) 的 macOS Sierra v10.12.2 在 Macbook Pro 上运行代码。

【问题讨论】:

    标签: ios iphone swift xcode multipeer-connectivity


    【解决方案1】:

    您是否为广告商和浏览器保留了对 MCSession 对象的引用?如果一个正在使用的 MCSession 对象被释放,那些BINDING_REQUEST 失败消息确实会发生。

    【讨论】:

      【解决方案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)
      }
      

      【讨论】:

      • 是的,这也对我有用。谢谢男人
      【解决方案3】:

      如果两个设备在建立连接后继续做广告和浏览,它们可能会在重新发现对方时断开连接。建立连接后,立即通过调用关闭浏览:

      MCNearbyServiceBrowser.stopBrowsingForPeers()
      

      如果设备继续做广告,其他设备仍然可以连接到它们。

      【讨论】:

        猜你喜欢
        • 2020-06-30
        • 1970-01-01
        • 2015-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-01
        • 1970-01-01
        相关资源
        最近更新 更多