ios - iOS 中的多点连接框架问题

标签 ios swift multipeer-connectivity

我正在 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) {

    }
}

但是,当我在连接到同一 wifi 网络的两台 iPad (iOS 9) 上运行它时,它们不会发现彼此。我做错了什么?

最佳答案

正如评论中提到的,首先您需要确保浏览器和广告商的“实例”不会通过保持对它们的强引用而丢失。您可以通过声明实例变量来做到这一点。与局部变量不同。

此外,您需要确保设备位于同一 Wi-Fi 网络上或者同时打开蓝牙和 Wi-Fi。

多点连接仅在 iOS 之间有效,我相信有一个评估者复杂的 api..

发现之后,您仍然需要处理大量有关内容交换的逻辑。另外,如果您希望您的应用程序能够与 Android 配合使用,这是不可能的。

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

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

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

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

关于ios - iOS 中的多点连接框架问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36963151/

相关文章:

ios - 如何以编程方式更改 statusBarStyle?

ios - 在 Swift 中将 NSURLSession 与 IOS 上的 HTTP REST API 结合使用

iphone - 应用大小增加

ios - UIView 在呈现其他 View Controller 后重置为初始值

ios - 如何快速循环保存在后台

animation - Swift:找不到接受提供的参数的 ' ' 的重载

ios - 延迟 20 秒调用 multipeer 方法中的代码

ios - Multipeer Connectivity Framework - Lost Peer 留在 session 中

android - 多人连接与玩游戏服务

ios - Appcelerator 应用程序在 iOS 设备上的 Barcode.capture() 行崩溃