Bonjour不是通过BT做广告

时间:2012-10-19 20:59:17

标签: ios ios5 bluetooth bonjour

在过去一周左右的时间里,我一直在反对这一点。我已经浏览了以下资源:

  • StackOverflow:Bonjour over bluetooth没有Gamekit? (3844189)
  • StackOverflow:Bonjour Over Bluetooth如何工作(3350094)
  • StackOverflow:使用iOS GameKit的“Bluetooth Bonjour”与其他平台(8070998)
  • 技术Q& A QA1753 - Apple开发人员
  • WiTap示例应用程序
  • SRVResolver示例应用程序
  • DNSSDObjects示例应用程序

我使用的是Mac OS 10.7,Xcode 4.5,带有iOS 6的iPhone 4和带有iOS 5.1.1的iPad 1。

我的问题是这样的:我正在修改一个当前使用GameKit的同行选择器连接iPad和iP {运动触摸}的应用程序。我们想修改它以通过蓝牙使用Bonjour,因为如果连接丢失,我们遇到了使用Gamekit重新连接设备的问题。我已经使用dns_sd.h API取得了一些成功,并获得了通过wifi进行广告和解析的服务,但即使我通过了kDNSServiceFlagsIncludeP2P,我也没有在蓝牙上取得任何成功。

我认为蓝牙Bonjour可能已经在设备之间建立了PAN,但即使将iPad与iMac配对并浏览DNS-SD服务也没有给我什么......而且iPhone无论如何都不会与iPad配对。 / p>

2 个答案:

答案 0 :(得分:3)

我刚刚在过去的24小时内在自己的应用中完成了这个问题。我使用了OS X示例应用程序DNSSDObjects中的核心类。我只需更改三行代码即可添加对蓝牙的支持。这在我的iOS应用程序中运行良好。

在DNSSDBrowser.m中,对DNSServiceBrowse的调用需要为第二个参数传入 kDNSServiceFlagsIncludeP2P

在DNSSDRegister.m中,对DNSServiceRegister的调用需要进行相同的更改。

在DNSSDService.m中,对DNSServiceResolve的调用也需要进行相同的更改。

如果你想限制自己只是蓝牙,而不是WiFi,那么应该更新相同的三行代码,所以第三个参数是 kDNSServiceInterfaceIndexP2P 而不是 kDNSServiceInterfaceIndexAny

答案 1 :(得分:0)

实际上,看起来kDNSServiceInterfaceIndexP2P标志在OSX上不起作用。

如果您在IOS上运行代码,您会注意到Bonjour将发布两个IP地址:一个用于本地WiFi网络,另一个用于蓝牙的169.xx.xx.xx地址。

OSX上的相同代码从不发布169.xx.xx.xx地址,因此只能通过WiFi找到。