2016-05-01 4 views
0

Я экспериментирую с Framework Multiber Connectivity Framework в iOS. Я хочу создать простое приложение, которое рекламирует устройство, а также просматривает другие устройства. Вот мой код:Проблема с инфраструктурой соединений Multipeer в iOS

class ViewController: UIViewController { 

    static let serviceType = "mult-demo" 
    let localPeerID = MCPeerID(displayName: UIDevice.currentDevice().name) 

    func startAdvertising() { 
     let advertiser = MCNearbyServiceAdvertiser(peer: localPeerID, discoveryInfo: nil, serviceType: ViewController.serviceType) 
    advertiser.delegate = self 
    advertiser.startAdvertisingPeer() 
    print("advertising") 
    } 

    func startBrowsing() { 
     let browser = MCNearbyServiceBrowser(peer: localPeerID, serviceType: ViewController.serviceType) 
     browser.delegate = self 
     browser.startBrowsingForPeers() 
     print("browsing") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     startAdvertising() 
     startBrowsing() 
    } 

} 

extension ViewController : MCNearbyServiceAdvertiserDelegate, MCNearbyServiceBrowserDelegate { 
    func advertiser(advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext context: NSData?, invitationHandler: (Bool, MCSession) -> Void) { 

     print("received invitation") 
    } 

    func browser(browser: MCNearbyServiceBrowser, foundPeer peerID: MCPeerID, withDiscoveryInfo info: [String : String]?) { 
     print("found peer \(peerID)") 
    } 

    func browser(browser: MCNearbyServiceBrowser, lostPeer peerID: MCPeerID) { 

    } 
} 

Однако, когда я запускаю его на двух IPADS (IOS 9), подключенных к той же сети Wi-Fi, они не обнаруживают друг друга. Что я делаю не так?

+0

Вы должны сохранить свои «браузер» и «рекламодатель» в свойствах, а не локальные переменные, поскольку они будут выпущены после выхода из функций – Paulw11

+0

@ Paulw11 Я исправил его, но он все еще не работает :( – Ruslan

+0

@ Проблема с Paulw11 решена, большое спасибо) – Ruslan

ответ

0

Как уже упоминалось в комментариях, для начала вам нужно убедиться, что «экземпляр» браузера и рекламодателя не потерян, сохранив для них сильную ссылку. Это можно сделать, объявив переменную экземпляра. Как и локальная переменная.

Кроме того, вам необходимо убедиться, что либо устройства находятся в одной сети Wi-Fi, либо имеют Bluetooth и Wi-Fi.

Multipeer Связь работает между прошивкой только и я считаю, имеет сложный оценщик апи ..

После открытия вы все еще нужно обрабатывать довольно много логики в отношении обмена контентом. Также, если вы когда-нибудь захотите, чтобы ваше приложение работало с Android, это не будет возможным.

Если я могу, я бы порекомендовал собирать SDK, которые могут делать одноранговую связь для вас, поскольку это сэкономит время на разработку и техническое обслуживание.

Например, попробуйте: http://www.p2pkit.io, http://www.intromi.co и http://www.underdark.io или Google поблизости

Я надеюсь, что это помогает ...

Отказ от ответственности: Я работаю Uepaa, разработка p2pkit.io для Android и IOS.