【问题标题】:Issue with Multipeer Connectivity Framework in iOSiOS 中的多点连接框架问题
【发布时间】:2016-05-01 04:45:17
【问题描述】:

我正在 iOS 中尝试使用 Multipeer Connectivity Framework。我想制作一个简单的应用程序来宣传设备并浏览其他设备。这是我的代码:

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) 上运行它时,它们不会发现彼此。我做错了什么?

【问题讨论】:

  • 您应该将browseradvertiser 保存在属性中而不是局部变量中,因为一旦函数退出它们就会被释放
  • @Paulw11 我修好了,但还是不行:(
  • @Paulw11 问题已解决,非常感谢)

标签: ios swift multipeer-connectivity


【解决方案1】:

如 cmets 中所述,首先您需要确保浏览器和广告商的“实例”不会丢失,并保持对它们的强引用。你可以通过声明一个实例变量来做到这一点。与局部变量相对。

另外,您需要确保设备在同一个 wifi 网络上,或者同时打开蓝牙和 wifi。

Multipeer Connectivity 只能在 iOS 之间工作,我相信有一个复杂的 api..

在发现之后,您仍然需要处理很多关于内容交换的逻辑。此外,如果您希望您的应用在 Android 上运行,这是不可能的。

如果可以的话,我建议您使用可以为您进行点对点通信的 SDK,因为这样可以节省大量的开发和维护时间。

例如尝试:http://www.p2pkit.iohttp://www.intromi.cohttp://www.underdark.io 或附近的谷歌

我希望这会有所帮助...

免责声明:我在 Uepaa 工作,为 Android 和 iOS 开发 p2pkit.io。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多