Javascript(Ionic)中两个移动设备之间的距离
Posted
技术标签:
【中文标题】Javascript(Ionic)中两个移动设备之间的距离【英文标题】:Distance between two mobile devices in Javasacript (Ionic) 【发布时间】:2017-08-05 11:40:54 【问题描述】:对于我的一个项目,我目前想要构建一个 Ionic 应用程序,以便为 ios 和 android 平台编写一次代码。我正在寻找一种方法来测量两个移动设备之间的距离。一个设备应放置在特定位置,而另一个设备应在进入第一个设备的范围(或更具体地,第一个设备所在的位置)时被检测到。
位于特定位置的设备 1 将连接到互联网,访问该位置的设备 2 也是如此。
我已经阅读了很多不同的实现,但大多数时候它需要 Android 或 iOS 的本机代码。
这是我已经找到的解决方案:
蓝牙:每部手机都有蓝牙,所以一旦手机靠近另一部手机应该不难检测到,但这意味着与另一台设备配对,实际上无法测量两台设备之间的距离。 iBeacons 和 BLE: 我们希望避免在发布时购买大量信标。这意味着我们想创建一个移动应用程序来充当信标,但在许多设备上的 Android 上是不可能的。此外,我们不关心微位置,这意味着我们不会以 100% 的潜力使用信标。 GPS:在安全方面不太好,无法向两台设备保证该位置是正确的。 在位置手动签到:确保设备 2 在设备 1 的位置上运行的最佳方法是在以下位置进行手动检查 地点。但这有点令人沮丧,因为在 全部。我实际上已经没有想法了。实现应该在 javascript 中编写一个快速原型,因此选项是有限的。
我在 StackExchange 上读过一篇文章:Stack,但问题是没有描述实现。
换句话说,我希望签到系统知道设备 2 在设备 1 的位置上。即使在请求我们的服务器的 API 之间进行交换,我们如何确定两个设备是由或关闭的?至少设备 2 去了一个特定的位置?
编辑和新闻
为了给可能面临同样情况的人提供更多选择,我联系了一位在 Microsoft 工作的人,他参与了一个名为 ThaliProject 的项目,您可以在 Google 上找到该项目,这是一个用于在移动设备之间进行通信的 PeerToPeer 库。但它不适合这个问题:
很遗憾,Thali 无法解决您的问题。 :( 我们依赖 Android 上的蓝牙 4.2 支持(因此我们既可以是 BLE 中心,也可以是 外围)。
如果您需要在一个 Android 和 iOS 设备,因为 Apple 使用了 蓝牙不工作。
现在 BLE 可以在 Android 和 iOS 之间运行。虽然许多 Android 手机不能是外围的,大部分都可以是中心的。
不同的人正在玩的另一种可能性是 声音。就像是 https://developers.google.com/nearby/messages/overview?hl=en。一个号码 的小组一直在尝试通过超声波进行局部发现 沟通。只需发送挑战并获得回复 超声波,您已经证明设备 1 和 2 非常接近 彼此。
我偶然发现了一个名为:SonicNet.JS 的 JavaScript 库,它能够通过超声波发送数据和字符串,但实际上我很难让它在我的计算机上运行。这可能是一种解决方案,可以避免互操作性问题。
【问题讨论】:
您是否尝试过使用 Google Maps API? link我之前曾亲自使用它来做类似的事情(也使用 Firebase 来存储设备的坐标)。 不,我没有,但我已经考虑过那个解决方案。问题是我认为它是基于用户的 GPS 坐标?这意味着它很容易被伪造者入侵? link 嗯,肯定有一些安全问题......不幸的是,我无法为您提供帮助(尽管您链接到的问题应该是一个很好的参考)。 我从昨天晚上开始尝试安装所有东西并测试他们的演示应用程序:video。我可以让两个应用程序相互通信。也许我什至可以在知道的那些设备之间找到一个范围。我猜 Cordoga 插件很容易与 Ionic 集成。它们也是视频中显示的应用程序之间的身份验证。我会尝试测试这个应用程序,看看它是如何工作的,我会尽量让主题保持最新状态,至少提供反馈。 经过几天的研究,我得到了两个不同的答案:p2pkit:付费解决方案,还有nearby:附近的 Google 是免费的,但没有与 Cordova / Ionic 集成。 【参考方案1】:wifi 设备的飞行时间怎么样?基本上,设备 A 上的应用程序需要发送一个信号轮。设备 B 将其拾取并返回带有签名的信号。设备 A 接收到它并根据时间飞行计算距离。
或者如何使用这里的 API? https://indoor.here.com/#/。这个想法是gps +高精度地图。我知道你已经考虑过gps。但高清地图为您提供了一种验证设备接收到的 GPS 信息的方法,从而解决您的安全问题。
【讨论】:
行不通,因为即使设备彼此相邻,IP 数据包也可能被路由到半个地球。例如,一台设备可能在一个蜂窝运营商上,而另一台设备在另一个运营商上。【参考方案2】:您可以使用 适用于 Cordova 的蓝牙低功耗插件 (https://github.com/evothings/cordova-ble)。它主要适用于 Android 和 iOS。
当然,这些设备应该支持 BLE,但许多新智能手机都是如此。
您可以先使用evothings.ble.startScan(success, error)
扫描您周围,然后使用RSSI
和txPower
值来获取设备之间的距离。
【讨论】:
我已经朝那个方向走了,问题就像我说的那样,用这个插件可以监听 BLE 信号,但实际上不可能在大多数手机上发出 BLE 信号。仅适用于 iOS 和部分 Android 设备。问题是新手机支持BLE扫描,但不支持发射。所以就我而言,目前这有点死胡同。但是BLE技术确实有距离好。 现在 BLE 可以在 Android 和 iOS 之间工作。虽然许多 Android 手机不能成为外围设备,但它们中的大多数都可以成为中心设备。所以这对我来说是个问题。以上是关于Javascript(Ionic)中两个移动设备之间的距离的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 angularjs/ionic 移动应用程序中运行外部 js 脚本
Ionic - $http 在移动设备中工作,但在浏览器中显示 CORS 和预检错误