最近公司项目增加了一个需求,就是做一个类似于钉钉的打卡功能,通过判断员工手机所连接的wifi是不是公司内网从而判断员工是否在办公室内打卡,并且同归不同的权限,管理员是可以设置APP的WiFi mac地址的。刚开始拿到这个需求的时候就想,苹果公司对于个人隐私这一块要求这么严格,能拿到用户手机所连接WiFi列表么。。。。。。通过各种实验之后,果然 这是个坑啊。。。。。
刚开始写demo的时候,在网上查了很多资料,说是ios拿到WiFi名字的方法自从ios9出来以后就被苹果屏蔽,如果需要使用这个框架的方法需要向苹果申请资料!但是但是 其实苹果屏蔽的是属于NetworkExtension框架中的关于VPN开发的方法 如果仅仅手机使用简单的拿到WiFi的方法是可以不用申请的!
详见代码 以下代码是完全可用的
这份代码就是之前写demo的时候看到网上几乎所有人都说这个NetworkExtension 的方法被屏蔽了 需要申请权限才能用 不然上传代码会被拒,于是乎我开始了申请权限的漫长之路。。。。步骤详情可见“http://www.jianshu.com/p/ee038189f373”。。。。 然后大概过了两三天后苹果给回复 说我的申请被拒了 。。。。。被拒的原因就是我这个需求所用的方法并没有被屏蔽 详见下图
被拒的时候急的我呀。。。。 我刚开始也以为会影响开发进度之类的。。。。后来仔细研究以后发现网络消息也不可全信啊。。。。 为什么 请看下图
其实在第一张代码图片中我们可以看到如果要拿到WiFi 名字和WiFi 的 mac 地址我们只需要用到CNCopySupportedInterfaces CNCopyCurrentNetworkInfo 这两个大类 而在上图中(xcode8的class详情)我们可以看到这两个类没有常见的被画上红色横线 更没有红色字体提示该方法或该类目已经被替换不可使用的 而在xcode7中同样如此 不信大家可以试试 那么为什么网上几乎所有的帖子都说这个方法被屏蔽了呢 包括我之前在QQ群里问了很多人 都说需要向苹果申请权限 不然会被拒 我在想 之所以说这话的人应该是用了以下方法来获得WiFi名字 见下图
大家可以看到在上面这个方法里面是通过 NEHotspotHelper 这个类来拿到WiFi名字的 ,而这个类就是VPN开发的必要类,并且被禁止使用了!!!如下图:
大家可以看到 在这个类目的使用下面有两个注意点 1、plist文件必须包括一个UIBackgroundModes数组,里面含有“网络身份验证”信息 2、应用程序必须设置“com.apple.developer.networking.HotspotHelper”*作为其权利之一。而这两点 就是提醒我们如果要使用这个类 必须向苹果申请开发权限 否则不可使用该类 。 其实,如果我们只是做简单的拿到手机所连接的WiFi名字和mac地址 是可以用另外的方法的,也就不需要想苹果申请权限 ,而苹果公司给我的被拒的邮件中也充分说明了这一点 ,我估计是因为网上很多人都以为只要是使用NetworExtension这个类的方法就一定要申请开发权限 ,其实不是的 ,苹果只是禁止了部分权限而已,大家还是以官方文档作为唯一参考吧!!!