美文网首页小知识点iOSiOS
关于IOS获取WiFi名字和mac地址一点心得(CNCopySu

关于IOS获取WiFi名字和mac地址一点心得(CNCopySu

作者: hanyu1992823 | 来源:发表于2016-12-02 17:48 被阅读5934次

最近公司项目增加了一个需求,就是做一个类似于钉钉的打卡功能,通过判断员工手机所连接的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这个类的方法就一定要申请开发权限 ,其实不是的 ,苹果只是禁止了部分权限而已,大家还是以官方文档作为唯一参考吧!!!

相关文章

网友评论

  • 慧业:正好新项目有类似的需求,多谢楼主分享经验
  • stoicer:楼主有没有遇到iOS获取到的bssid跟Android获取到的bssid不一样的情况呢?我们现在是在后台配置的WiFi的信息的,这样的话,两种手机系统内就不能统一了。
  • archyly:楼遇到过获取的WiFi的Mac地址,跟实际的Mac地址不一致的情况吗?
  • 浮动跳跃:我只想说一件事。
    上代码,上代码,上代码,不要上图片:unamused:
  • 指尖的世界:没讲获取mac的事
  • techsqin:你好,你的这个获取mac地址,如果mac地址第一位是0的话就不显示,请问你解决了吗?望回复
    宋鸿康iOS:- (NSString *)autoCompleteWIFIInfor:(NSString *)infor
    {
    NSMutableString *completeStr = [[NSMutableString alloc] init];
    NSArray *array = [infor componentsSeparatedByString:@":"];

    for (int i = 0 ; i<array.count; i++) {
    if ([array[i] length] != 2 && !(i == (array.count - 1))) {
    [completeStr appendString:[NSString stringWithFormat:@"0%@:",array[i]]];
    }else if ([array[i] length] != 2 && (i == (array.count - 1))){
    [completeStr appendString:[NSString stringWithFormat:@"0%@",array[i]]];
    }else{
    [completeStr appendString:[NSString stringWithFormat:@"%@:",array[i]]];
    }
    }
    return completeStr;
    }
  • 凯文Kevin21:你这个是获取手机已经连接上的wifi名以及mac地址,,, 别人的需求是获取手机的wifi列表,
    hanyu1992823: @浪子未归_ 这个框架只是用来做vpn的不是用来拿wifi列表的 vpn软件拿到当前连接的wifi信息 并将其流量转换成墙外流量
    凯文Kevin21:@hanyu1992823 苹果开放的这个NetworkExtension框架就可以啊,不过需要申请使用权限, 一般都会被拒的 。
    hanyu1992823: @浪子未归_ 你去看看苹果有哪个对外开放api让你能获取到手机的wifi列表
  • free如歌:还有个问题,如果不连wifi,如何获取手机的mac地址呢
    hanyu1992823:@离磐 直接比对字符串不就好了
    b12217fcb3f4:楼主你好 我拿到的mac地址格式是这样的xx:xx:xx:xx 但是公司设置的wifi mac地址 1. xx:xx:xx:xx
    2. xx-xx-xx-xx 可能是这两种格式,你是怎样比较当前链接的wifi是不是公司设置的wifi呢?
    Liusr:你好手机mac地址获取到没
  • 古子林:你好,我的需求是需要获取当前连接的WiFi的信号强度,请问不申请权限可以做到吗?
    hanyu1992823:@古子林 详情得看官方文档
  • ben_y:楼主根据以下方法获取wifi的mac地址,是完全可行,上线不会被拒的是吗
    - (NSDictionary *)SSIDInfo {
    NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfaces();
    NSDictionary *info = nil;
    for (NSString *ifnam in ifs) {
    info = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
    if (info && [info count]) {
    break;
    }
    }
    return info;
    }
  • 空白少侠:实践出真知
  • Dreamhai:这个mac地址有的时候获取的不完整是怎么回事呢 有遇到的吗 中间会少一位
    free如歌:@Dreamhai 确实有这种,我也遇到了
    Dreamhai:@hanyu1992823 就像这种的MAC地址: 60 : b : 3 : 5c : 63 : 0 这种少了几位
    hanyu1992823:@Dreamhai 没遇到过这种。。
  • cedd20c13559:获取到的mac地址,和关于显示的不一样。而且隔一天获取的mac地址也会变!!!
    hanyu1992823:@浮尘星期天 mac 地址是不可能变的。。。
  • sunmumu1222:我也在做公司员工打卡软件,在提交用户基本信息时,要提交一个ID(这个ID对于该唯一iphone设备),防止员工登录别人的账号帮别人替打卡.
    我查了下,好像获取iphone的mac地址最适合做这个ID.
    你那获取mac地址的工具类文件可以发我吗?
    邮箱:335089101@qq.com
    hanyu1992823:@SGP1222 visionId 和UUID 你网上搜一下 大把
    sunmumu1222:@hanyu1992823 vison是什么?
    hanyu1992823:@SGP1222 直接获取他手机的vison 就好了 百度大把的
  • yadong:我照你的代码打出来的,运行时报错了
    hanyu1992823:@a814eb05f210 你看看报什么错把 这些代码我都已经验证过还上线了的
  • minjing_lin:楼主完成了吗?这方面
    hanyu1992823:@MinJing_Lin 没有测过8的喔 我只拿WiFi 本身苹果限制的不是WiFi 而是VPN 那一块 所以我觉得9一下是没问题的
    minjing_lin:@hanyu1992823 获取MAc地址有系统限制吗?现在测得ios9.3.5 和 10.1.1是可以用的,ios9以下楼主试过可以吗
    hanyu1992823:@MinJing_Lin 需求完成 就是连接WiFi实现内部打卡功能

本文标题:关于IOS获取WiFi名字和mac地址一点心得(CNCopySu

本文链接:https://www.haomeiwen.com/subject/bsrehttx.html