2016-05-01 84 views
0

我正在iOS中嘗試Multipeer連接框架。我想製作一個簡單的應用程序,通知設備並瀏覽其他設備。這裏是我的代碼:iOS中Multipeer連接框架的問題

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

    } 
} 

然而,當我在連接到相同的WiFi網絡,他們不會發現彼此的兩個臺iPad(iOS版9)運行它。我究竟做錯了什麼?

+0

您應該將'browser'和'advertiser'保存在屬性而不是局部變量中,因爲它們將在功能退出時釋放 – Paulw11

+0

@ Paulw11我修復了它但它仍然無效:(已解決 – Ruslan

+0

@ Paulw11問題,非常感謝) – Ruslan

回答

0

正如評論中所提到的,首先,您需要確保瀏覽器和廣告客戶的「實例」不會因爲強烈引用它們而丟失。你可以通過聲明一個實例變量來做到這一點。適用於本地變量。

另外,您需要確保設備在同一個wifi網絡上,或者同時啓用藍牙和wifi。

Multipeer連接只能iOS設備,我相信有一個評價者複雜的API ..

你仍然需要處理相當多的邏輯與問候內容交換後發現。此外,如果你想要你的應用程序與Android一起工作,這是不可能的。

如果我可以的話,我會建議去SDK可以做點對點通信,因爲那些會節省很多的開發和維護時間。

例如嘗試:http://www.p2pkit.iohttp://www.intromi.cohttp://www.underdark.io或者google附近

我希望這有助於...

聲明:我Uepaa工作,開發Android和iOS p2pkit.io。