如何读取RSSI
附近 Wi-Fi 网络的值?
1 回答
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 上获得批准。
玩得开心!