6

如何读取RSSI附近 Wi-Fi 网络的值?

4

1 回答 1

3

TL;博士

这绝对不是在进入 AppStore 的生产应用程序上实现的目标,但您可以使用私有 API 为自己实现一些概念验证。

详细版本

在 iOS 上,有用于读取RSSI附近 Wi-Fi 网络值和其他此类操作的 API,但最遗憾的是,它们不公开。

Apple 将 API 分为公共 API 和私有 API。developer.apple.com 记录了开发人员可以使用(公共)并将应用程序与 AppStore 一起发布的应用程序。

Apple 未公开记录其他 API(私有 API)。这样做的原因主要归结为 Apple 希望以更全面的方式控制 iOS 的各个方面:

  • 一些 API 还没有,所以它们只是用于 Apple 自己的内部开发和测试,
  • Apple 不希望 iOS 的某些方面被滥用并随着时间的推移而成熟开发(例如,用于操作照片拍摄方面的相机 API),
  • 当然,Apple 有一个赚钱的议程,他们根据自己的需要使用这些 API。

该怎么办

如上所述,如果您知道自己在做什么,仍然可以访问私有 API 。

基本思想是,由于 iOS 中使用了公共和私有 API(一般开发人员或 Apple),它们都应该在runtime. 您所需要的只是一个将它们捞出的工具。这个工具是RunTimeBrowser。该项目的维护者 Nicolas Seriot 也在 GitHub 存储库中发布了他的发现

如果您查看这些发现,您将能够找到合适的 API 来检索RSSI附近 Wi-Fi 网络的值。

但是,我应该提前警告您,这并不像听起来那么容易。一旦你找到了合适的 API,它并没有就此结束:

  • 首先,在 iOS 上,某些框架需要某些权利。因此,当您为所需的 API 找到必要的私有框架时,您还需要弄清楚它的权利并将其注入到您的项目中。哪个/不容易获得,
  • 将私有框架集成到一个项目中并不像集成一个公共框架那么简单,比如说CoreLocation,因为它们没有记录在案,你会盲目地行走,
  • 一旦你集成了一个私有框架,它的使用也将变得困难,因为上述原因以及Apple对这些私有API进行更改的可能性。当然,每个 API 都会不时更改,但 Apple 可以按照自己的意愿使用私有 API 将其分解,因为它从一开始就不允许您使用它们。所以,你花了很长时间做的事情在未来可能一文不值。

尽管所有这些都是作为警告说的(我真的不想让您气馁,但您应该看到自己的发展方向),出于个人使用或其他原因,关于私有 API 的工作仍在进行中。

您可以查看 Michael Dorner 的BeeTee,他在其中演示了如何使用BluetoothManager,这是一个用于在 iOS 上控制蓝牙的私有框架。

从该项目中学习,您可以将这些知识应用于读取RSSI附近 Wi-Fi 网络的值。请记住,您无法在 AppStore 上获得批准。

玩得开心!

于 2018-05-11T19:46:44.177 回答