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) 上运行它时,它们不会发现彼此。我做错了什么?
【问题讨论】:
您应该将browser
和advertiser
保存在属性中而不是局部变量中,因为一旦函数退出它们就会被释放
@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 中的多点连接框架问题的主要内容,如果未能解决你的问题,请参考以下文章