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。