iOS获取所有WiFi网络列表

19

这不是与其他类似问题(太多了无法列举)的重复,因为我有证据证明发布一个显示wifi网络列表的应用程序是可行的。

所以,广泛接受和理解的是,您不能获得所有wifi网络的列表,而不使用私人API。使用私人API将导致一个应用被拒绝从应用商店审核中通过。

然而,谷歌最近在他们的Google Home应用程序中做到了这一点,该应用程序于2016年10月26日发布,所以现在肯定是可能的了。怎么做?

注意-他们的App Store列表说该应用程序支持iOS 8.0或更高版本。 我需要进一步测试是否只存在于应用程序的iOS 10版本上的此功能,还是实际上也存在于iOS 8和9上。
(我在图像中将我的wifi名称和mac地址变灰了)

输入图像描述

我正在使用Objective-C,如果您提交Swift的解决方案,请同时提交ObjC的解决方案!


5
使用私有API将会导致您的 应用被拒绝。这并不意味着所有 使用私有API的应用都会被拒绝。 - woz
8
你有没有想到,Google应用可以通过蓝牙连接到Google Home设备,然后该设备会响应并列出可用的WiFi网络? - OliverD
2
我们非常希望在我们的应用程序中实现这一点,但大约一年前还不可能。我相信谷歌正在通过蓝牙实现这一点。我们已经向苹果提交了工单,并被告知这是不可用的。 - Dave S
可能是重复的问题:iPhone获取所有SSID列表而不使用私有库 - Senseful
@Senseful,这不是重复问题,因为我的问题明确说明了“现在是否可能...”(在发布时)基于新的证据。 - jungledev
显示剩余3条评论
1个回答

10
这可能是通过 NetworkExtension 实现的(自iOS 8以来可用)。但您需要在应用程序中拥有 com.apple.developer.networking.HotspotHelper 权限才能使用这些API。要获取此权限,您需要联系苹果公司并说明为什么需要它。
我没有找到任何代码示例,但也许 NetworkExtension 的文档可以帮助您。

我已经因为申请这些权限两次被苹果网络扩展人员拒绝了。现在,我将再次申请一次。您能否建议我如何解释我的应用程序用途,以便他们同意我的申请? - Johnny
你找到任何解决方案了吗? - Nupur Gupta
只有当用户在设置中导航到Wi-Fi页面时,NEHotspotNetwork才会返回网络列表。有关更多详细信息,请参见此答案 - Senseful
@VictorJohn 你成功了吗?我正在使用以下代码:NEHotspotConfigurationManager.shared.getConfiguredSSIDs { (ssidsArray) in print("ssidsArray.count==(ssidsArray.count)") for ssid in ssidsArray { print(" 连接的ssid = ",ssid) } }但它只返回已连接的Wifi。 - guru
嗨@guru,试试这个。当输入错误的SSID和密码时,Wifi无法连接,同时我们在闭包中也没有收到任何错误提示。 - Kudos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接