【问题标题】:Android <-> iOS direct communication (Bluetooth). Is it possible? [duplicate]Android <-> iOS 直接通信(蓝牙)。可能吗? [复制]
【发布时间】:2024-01-14 19:40:01
【问题描述】:

首先我是一名 Android 开发者,所以这个问题要问所有 iOS 开发者。

是否可以实现Android iPhone/iPad 直接通信
有些人声称这是不可能的,有些人声称这是不可能的。

我猜想两种可能的技术蓝牙和/或 Wi-Fi Direct。
不推荐使用 Wi-Fi Direct,因为它不是Gingerbread 支持,据我所知,iPhone 也不支持它(可能是 iPhone 6,正如我从谣言中听到的那样)

众所周知,iOS设备之间使用GameKit实现蓝牙通信,这里是reference

我不明白与 GameKit 交流时有什么特别??
消息是否以某种方式包装,在消息的开头和结尾有额外的字节?好的,我们可以在 Android 中以同样的方式包装消息!
消息是否加密?!!如果是这样,我们能否在 Android 设备中收到它们时解密它们?

欢迎任何想法、变通方法或其他黑客解决方案!

【问题讨论】:

  • 好吧,您提到的重复问题是一年多以前提出的。有人会期待有关此事的最新更新。但是感谢您链接问题
  • 此链接中的一些相关信息:is.gd/i2UbhE 但仍然找不到一个好的答案,因为我猜 android 蓝牙 api 是一个更高级别(就像使用输入输出流一样简单)并且对于iOS 解决方案你必须更深入地了解我所知道的..
  • 可能稍有延迟,但技术已经发展:目前的状态是 iOS 和 Android 之间可以通过 BLE 连接,但是仍然有许多 Android 不支持 BLE 外设模式,以及 Android BLE 堆栈非常不稳定。此外,Android 支持 WiFi Direct,但在 iOS 上尚未公开。如果可以的话,我会建议您查看可以为您执行跨平台 p2p 的框架,这样您就无需花费时间编写网络代码。这样的框架可能是我正在开发的名为p2pkit.io 或附近的谷歌。

标签: android iphone ios bluetooth wifi-direct


【解决方案1】:

iOS 中提供了三个框架,您可以使用它们来开发蓝牙应用程序:

1. GameKit:这是公开可用的框架。但是使用这个你只能在两个 iOS 设备之间建立和通信。所以这个框架有它自己的局限性。

2。 BluetoothManager: 这是私有框架。我使用这个框架来发现非 iOS 设备。我也建立了连接。但不能进行数据交换。我认为它仍在开发中。参考可以参考this link

3. CoreBluetooth:这也是公共框架。这只能发现BLE 启用的设备。我已成功使用它在支持 BLE 的设备之间传输数据。

【讨论】:

  • 您说您通过 CoreBluetooth 在支持 BLE 的设备之间成功传输数据。您在使用哪种 BLE 设备?您能否向我/我们确认您确实成功地将数据传输到了三星 Galaxy S4 或 Nexus 4 等 Android 设备?还是只是一个 BLE 引脚? @V-Xtreme
  • @kl94:对于数据传输,您只需要两个支持 BLE 的设备,无论它们是 iOS 设备、Android 设备还是 BLE 调制解调器。如果您能够渲染外围、服务和特征等级别,您可以根据特征的属性对特征进行任何操作,即读/写/通知
  • 仅供参考,供大家使用 CoreBluetooth,以下是 Apple 提供的一些示例源代码的链接:developer.apple.com/library/ios/samplecode/TemperatureSensor/…
  • 我有一个设备 "socketMobile" 条码传感器。当我实现 CoreBluetooth 选项时,此设备未出现在列表中。我怎么知道设备是 BLE 还是通用蓝牙?后来我实现了 BluetoothManager.framework 并且它工作正常,但是当我尝试编译时,xcode(或 itunnes connect)显示问题,因为这是一个私有库。我需要其他解决方案。谢谢
  • @V-Xtreme,我可以连接到启用了 BLE 的云台吗?并发送命令以从 iOS 应用程序更改其动作?您有此类交流的示例链接吗?
【解决方案2】:

iOS 没有实现任何允许它与其他操作系统通信的标准蓝牙协议。 GameKit 是专有的,如果很容易破解它,那么人们早就这样做了(Apple 会堵住这个漏洞)。

只有少数 Android 设备支持蓝牙 LE(它还没有在 AOSP 中),所以它还不是真的有用,即使它支持点对点。

我听说可以通过 Wi-Fi 直连来做你想做的事,例如使用这个库: https://www.alljoyn.org/ 它说它同时支持 Android 和 iOS - 我自己没有尝试过,但它似乎可以满足您的需求。

【讨论】:

    【解决方案3】:

    对于同一本地网络上的设备,Bonjour(又名 zeroconf)可能是不同机器/设备上的进程发现彼此并进行交互的好方法。

    请参阅 apple bonjour for android,了解一些指向 Bonjour 的 Android 实现的指针。

    【讨论】:

    • 同一个本地网络?不!设备不属于本地网络。事实上,没有网络,也没有互联网。这就是为什么我提到 wifi-direct 而不是简单的 wifi,这也是为什么蓝牙很重要的原因
    • 嗨@Caleb,我需要创建自己的应用程序来进行这种交流,这可能吗?
    • 虽然我无法发现从我的 iPhone 运行的 bounjour 服务(CocoaHTTP 库),但我能够硬编码 iPhone 热点的 IP 地址(默认为 170.20.10.1)和端口并连接到它在 Android 上并检索托管在 iPhone 上的网页。
    • 我认为问题是p2p直接通信。在这种情况下,iOS 上的 Bonjour C 库没有任何帮助,因为:它使用封闭源代码实现通过经典蓝牙连接检测 p2p 设备,Android 不支持。