2017-02-06 10 views
5

Оба устройства рекламируют и просматривают. Проблема возникает при попытке установить соединение.Multipeerconnectivity на iOS с Xcode

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

ли работает при попытке подключения, но через несколько секунд, он звонил снова MCSessionState == .notConnected.

Пробовал как с Wi-Fi, BT, и каждую комбинацией между ними ...

Просто добавили:

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

Не помог много ... Тем не менее получить в консоли (только на прошивке 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) 

(Рекламодатель это имя приложения) Использование картинки 6S с 10,2 & iPhone 6 с 9.2. Запуск кода на Macbook Pro с macOS Sierra v10.12.2 из Xcode 8.2.1 (Swift3).

ответ

0

Если оба устройства продолжают рекламировать и просматривать после установления соединения, они могут отключиться, когда они вновь обнаружат друг друга. Сразу после подключения отключите просмотр по телефону:

MCNearbyServiceBrowser.stopBrowsingForPeers() 

Если устройства продолжают рекламироваться, к ним могут подключаться другие устройства.

2

Вы сохранили ссылку на объект MCSession как для рекламодателя, так и для браузера? Те сообщения BINDING_REQUEST произошли, если объект использования MCSession будет освобожден.

2

У меня была такая же проблема, и я нашел решение. Он по-прежнему показывает некоторые ошибки, но он работает для меня.

Try инициализация 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) 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^