iOS 中的多点连接框架问题

Posted

技术标签:

【中文标题】iOS 中的多点连接框架问题【英文标题】:Issue with Multipeer Connectivity Framework in iOS 【发布时间】: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 问题已解决,非常感谢) 【参考方案1】:

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

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

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

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

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

例如尝试:http://www.p2pkit.io、http://www.intromi.co 和 http://www.underdark.io 或附近的谷歌

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

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

【讨论】:

以上是关于iOS 中的多点连接框架问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7:多点连接框架

如何禁用连接警报(ios 多点连接框架)

iOS 7:多点连接框架 - 负载测试

iOS中通过蓝牙的多点连接框架:如何确定消息是不是“旧”?

RSSI 通过多点连接框架

多点连接框架中使用的加密?