11获取wifi列表 ios_ios 获取wifi列表 - CSDN
精华内容
参与话题
  • iOS Wifi 列表获取

    千次阅读 2020-02-11 17:33:05
    iOS 上获取 Wifi 列表其实有很大限制,在 iOS 9 以前是不能获取Wifi列表的,只能获取当前连接的 Wifi 信息,也就表示只有连接了 Wifi 才能定位。 Apple 在 iOS 9 以后,提供了获取Wifi列表的API,但是获取Wifi列表是...

    iOS 上获取 Wifi 列表其实有很大限制,在 iOS 9 以前是不能获取Wifi列表的,只能获取当前连接的 Wifi 信息,也就表示只有连接了 Wifi 才能确定位置。
    Apple 在 iOS 9 以后,提供了获取Wifi列表的API,但是获取Wifi列表是有门槛的,主要步骤有:


    1. 向 Apple 申请开发 Network Extension 权限
    2. 申请包含 Network Extension 的描述文件
    3. 配置 Info.plist
    4. 配置 entitlements
    5. iOS 获取 Wifi 列表代码实现
    6. 获取Wifi列表回调

    向 Apple 申请开发 Network Extension 权限

    首先要先写封邮件给 networkextension@apple.com ,问苹果要开发 Network Extension 的权限。 苹果收到邮件后会自动回复邮件,在 https://developer.apple.com/contact/network-extension/ 里面填写申请表格,内容包括:

    Organization:               
    
    Company / Product URL:             
    
    What's your product's target market?              
    
    What's your company's primary function?             
    
    Describe your application and how it will use the Network Extension framework.            
    
    What type of entitlement are you requesting?                     
    
    ...
    

    申请后大概两周左右能收到 Aplle的 确认信,如:

    Hi, 
    
    Thanks for your interest in the Network Extension APIs.
    
    We added a new template containing the Network Extension entitlements to your team.
    
    ......
    

    申请包含 Network Extension 的描述文件

    选择包含 Network Extension 的描述文件,后点击下载,下载完成双击描述文件。

    xcode中开启Network Extensions权限

    在这里插入图片描述

    配置 entitlements

    xxx.entitlements(xxx是项目名称) 里添加 Key-Value: com.apple.developer.networking.HotspotHelper -> YES,没有此文件需要先创建一个:
    在这里插入图片描述

    iOS 获取 Wifi 列表代码实现

    #import <NetworkExtension/NetworkExtension.h>
    - (void)getWifiList {
    
        if (![[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) {return;}
        dispatch_queue_t queue = dispatch_queue_create("com.leopardpan.HotspotHelper", 0);
        [NEHotspotHelper registerWithOptions:nil queue:queue handler: ^(NEHotspotHelperCommand * cmd) {
            if(cmd.commandType == kNEHotspotHelperCommandTypeFilterScanList) {
                for (NEHotspotNetwork* network  in cmd.networkList) {
                    NSLog(@"network.SSID = %@",network.SSID);
                }
            }
        }];
    }
    

    kNEHotspotHelperCommandTypeFilterScanList: 表示扫描到 Wifi 列表信息。

    NEHotspotNetwork 里有如下信息


    SSID:Wifi 名称
    BSSID:站点的 MAC 地址
    signalStrength: Wifi信号强度,该值在0.0-1.0之间
    secure:网络是否安全 (不需要密码的 Wifi,该值为 false)
    autoJoined: 设备是否自动连接该 Wifi,目前测试自动连接以前连过的 Wifi 的也为 false 。
    justJoined:网络是否刚刚加入
    chosenHelper:HotspotHelper是否为网络的所选助手


    获取Wifi列表回调

    当你把上面的代码写完,并成功运行项目后,发现并没有Wifi列表的回调。因为你还没刷新Wifi列表,你需要:

    打开手机系统设置 -> WLAN -> 系统 Wifi 列表加载出来时,上面代码部分才会回调,才能获取到 Wifi 列表。
    这个时候你就能看到控制台源源不断的Log。

    注意事项

    1、获取Wifi列表功能由于是需要申请后台权限,所以能后台激活App(应用程序),而且激活后App的进程能存活几个小时。
    2、整个获取Wifi列表不需要App用户授权,也就是在App用户无感知下获取设备的Wifi列表信息,使用时请正当使用。
    3、Wifi列表获取 NetworkExtension 是 iOS 9以后才出的,目前 iOS 9 已经覆盖很广了。

    展开全文
  • 就是之前设置的获取手机连接WiFi名称的方法不起作用了,后来经查发现是因为新系统需要申请开启相对应的权限才能获取到手机连接的WiFi名称等信息,本章就来讲一下iOS12.0以上系统获取WiFi名称的方法。 一、iOS12.0...

    前段时间在开发过程中遇到一个问题,就是之前设置的获取手机连接WiFi名称的方法不起作用了,后来经查发现是因为新系统需要申请开启相对应的权限才能获取到手机连接的WiFi名称等信息,本章就来讲一下iOS12.0以上系统获取WiFi名称的方法。

    一、iOS12.0以下系统获取WiFi名字和mac地址信息的方法

    在iOS有关WiFi开发中,苹果官方提供了NetworkExtension框架让iOS开发者实现VPN以及WiFi热点相应的功能,虽然在iOS9.0系统以后,这个框架的很多功能都被苹果官方屏蔽,想要使用这些被屏蔽的功能,需要开发者去申请权限才能用,但是简单的获取WiFi名字和WiFi的mac地址信息等方法还是可以正常使用的。

    1、获取WiFi相关信息的时候需要引入一下头文件

    #import <SystemConfiguration/CaptiveNetwork.h>

    #import <NetworkExtension/NetworkExtension.h>

    想要获取iPhone手机连接到的WiFi名字和WiFi的mac地址,需要用到CNCopySupportedInterfaces和CNCopyCurrentNetworkInfo两个类,具体的实现方法如下所示:

    ①获取SSID(Service Set Identifier):服务集标识,即WiFi网络的名称。

    + (NSString *)wiFiName {

        NSArray *wiFiName = CFBridgingRelease(CNCopySupportedInterfaces());

        id info1 = nil;

        for (NSString *wfName in wiFiName) {

            info1 = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef) wfName);

            if (info1 && [info1 count]) {

                break;

            }

        }

        NSDictionary *dic = (NSDictionary *)info1;

        NSString *ssidName = [[dic objectForKey:@"SSID"] lowercaseString];

        return ssidName;

    }

     

    ②获取BSSID,即WiFi的mac地址。

    + (NSString *)wifiMac {

        NSArray *wfMac = CFBridgingRelease(CNCopySupportedInterfaces());

        id info1 = nil;

        for (NSString *macName in wfMac) {

            info1 = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef) macName);

            if (info1 && [info1 count]) {

                break;

            }

        }

        NSDictionary *dic = (NSDictionary *)info1;

        NSString *wifiMac = [dic objectForKey:@"BSSID"];

        return wifiMac;

    }

     

     

    二、iOS12.0以上系统获取WiFi信息的方法

    1、苹果开发者官网官方的解释如下:

    Important

    To use this function in iOS 12 and later, enable the Access WiFi Information capability for your app in Xcode. When you enable this capability, Xcode automatically adds the Access WiFi Information entitlement to your entitlements file and App ID.

    重要提示

    要在iOS 12及以后系统中使用此功能,请在Xcode中为应用程序启用WiFi信息访问功能。当您启用此功能时,Xcode会自动将访问WiFi信息权限添加到您的权限文件和应用程序App ID中。

     

    2、步骤

    通过上面的苹果的官方解释可以知道,要想在iOS12.0及以上系统中继续使用该方法,就需要申请获取授权。若使用的是自动签名,授权之后Xcode会自动在App ID和应用的权限列表中增加WiFi使用的权限。若使用的是手动签名,则还需要去App ID中配置一下权限,并生成新的profile文件。具体的操作步骤如下所示:

    设置Xcode里面Capabilities的步骤:Target —> Capabilities —> Access WiFi Information —> ON

     

    若项目使用的是手动签名,则在上面打开Access WiFi Information选项之后,会造成Add the Access WiFi Information feature to your App ID这一项会报错,需要开发者手动去App ID账号中操作设置。具体操作步骤如下所示:

    打开添加Access WiFi Information之后,项目会在.entitlements文件中添加Access WiFi Information信息,如果创建的时候没有.entitlements文件,会同时创建该文件。

    操作以上步骤之后,在iOS12.0及以上系统中获取WiFi名字和WiFi的mac信息的方法就可以正常获使用了。若采用的是手动签名,需要在开发者账号中找到App IDs,并配置Access WiFi Information,编辑App ID,勾选相应的选项,然后保存即可。具体操作步骤如下所示:

     

    最后再重新生成项目的Provisioning Profiles文件,包括Distribution的和Development两个不同的模式,下载双击打开,项目就可正常签名,就可以正常的获取到手机连接的WiFi的相关信息了。

    3、使用场景实例

    以下实例是按照实际使用场景来说明的,具体如下所示:

     

    以上就是本章全部内容,欢迎关注三掌柜的微信公众号、微博,欢迎关注!

    三掌柜的微信公众号:

    三掌柜的新浪微博:

     

    展开全文
  • iOS开发中,手机连接wifi,怎么获取wifi或网关的路由器的地址
  • iOS13 无法获取WiFi名称(SSID)问题

    千次阅读 2019-08-05 10:11:00
    升级到iOS13以后,发现之前获取WiFi名称的接口失效了,返回的都是固定值"WLAN"。这里可能是因为苹果对用户隐私保护问题,因为通过wifi信息可以定位到用户地理位置。所以iOS13以后如果想要继续获取WiFi名称,需要在...

    升级到iOS13以后,发现之前获取WiFi名称的接口失效了,返回的都是固定值"WLAN"。这里可能是因为苹果对用户隐私保护问题,因为通过wifi信息可以定位到用户地理位置。所以iOS13以后如果想要继续获取WiFi名称,需要在调用接口前判断用户是否同意app使用地理位置信息。

    我这里只在第一次使用时提示:

    NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];
        CGFloat version = [phoneVersion floatValue];
        // 如果是iOS13 未开启地理位置权限 需要提示一下
        if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined && version >= 13) {
           self.locationManager = [[CLLocationManager alloc] init];
           [self.locationManager requestWhenInUseAuthorization];
        }

     

    展开全文
  • iOS获取当前所连接的WIFI名称

    千次阅读 2016-04-15 14:45:52
    由于苹果是闭源的,所以我们不能像安卓那样对一些东西进行操作,比如WIFI,通过使用一些私有的API并在越狱的iPhone上面或许你能够实现那些功能,但是这样做有很大的局限性:1.私有API苹果审核不会让你通过,2.现在很...

    由于苹果是闭源的,所以我们不能像安卓那样对一些东西进行操作,比如WIFI,通过使用一些私有的API并在越狱的iPhone上面或许你能够实现那些功能,但是这样做有很大的局限性:1.私有API苹果审核不会让你通过,2.现在很多iPhone用户都不再选择越狱,但是如果我们仅仅想要知道自己现在所连接的WiFi叫啥名我们还是可以通过苹果提供的共有API去实现的。这就要用到SystemConfiguration.framework这个框架了。废话不多说,直接上代码:

    //导入框架头文件
    #import <SystemConfiguration/CaptiveNetwork.h>
    @interface ViewController ()
    //定义一个label用于显示当前所连WiFi名称
    @property (weak, nonatomic) IBOutlet UILabel *l1;
    @property (weak, nonatomic) IBOutlet UILabel *l2;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
         id info = nil;
           NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
            for (NSString *ifnam in ifs) {
                info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
                NSString *str = info[@"SSID"];
                NSString *str2 = info[@"BSSID"];
                NSString *str3 = [[ NSString alloc] initWithData:info[@"SSIDDATA"] encoding:NSUTF8StringEncoding];
                _l1.text = str;
                _l2.text = str2;
    
       }
    }
    
    @end
    

    这样我们就获取到了当前你所连接的WiFi名称啦!效果图如下:

    效果图

    展开全文
  • 链接: 解决iOS13 无法获取WiFi名称(SSID)问题 链接: 6.iOS13 获取不到WiFi ssid 的问题 链接: 关于 iOS 13 CNCopyCurrentNetworkInfo 不再返回Wi-Fi SSID and BSSID
  • iOS12获得WiFi的ssid时,需要添加权限

    千次阅读 2018-10-04 16:56:05
    1、appid中勾选Access WiFi Infomation     2、xCode中Capabilities中,激活Access WiFi Infomation项。                          
  • 前段时间在开发蓝牙功能,蓝牙功能开发结束之后最近又在开发WiFi功能。WiFi功能也算简单,主需要导入使用苹果系统自带的框架即可,仅仅... 苹果在iOS9.0以后提供了获取WiFi列表的API,但是需要开发人员主动发邮件...
  • iOS 获取wifi信号强度

    千次阅读 2016-10-28 17:43:15
    虽然各种直接获取信号强度的api都被封杀了。但是还有一个另类的黑魔法可以获取到。那就是遍历UIStatusBar了- (void)getSignalStrength{ UIApplication *app = [UIApplication sharedApplication]; NSArray *...
  • DEMO地址(看代码,什么就都有了):https://github.com/SimpleBraver/test_wifi.git1、获取当前手机WIFI名称信息#import &...//iOS获取当前手机WIFI名称信息 -(NSString *)fetchSSIDInfo { NSString *curre...
  • 获取当前网络权限和网络状态 ios

    万次阅读 2017-07-26 11:32:45
    获取网络权限比较简单 7.0以后都可以的。 获取iOS网络状态,我目前知道的有两种办法。第一种能实时监控 通知状态变化 第二种能随时在非全屏下看到具体的状态。
  • 大家知道如何获取wifi的信息吗?比如速度等,有没有什么wifi API之类的,如何查看当前网络链接状态,比如3G,WIFI,等,这个网上都有,但是wifi速度,如何或许,求大家帮帮忙
  • iOS 获取连接的WiFi和Mac地址

    千次阅读 2019-05-15 15:19:56
    最近做了一个WiFi的硬件APP,需要用到当前手机链接的WiFi名字和Mac地址,这种场景使用,其实,在打卡软件中,应该比较常用,比如打卡需要连接到公司的WiFi,就是保证你在办公室打的卡。 刚开始使用的时候,以为就像...
  • 以下列举出iOS获取IP地址的常用的两种方式: 第一种适合在WiFi情况下使用,但是如果切换到蜂窝数据下,则返回数据@“error” #import #import // Get IP Address - (NSString *)getIPAddress { ...
  • 最近公司社区项目中要用到或者社区周围WiFi列表以及信号强度,好多网友说实现不了讨论区相关资源:APP跳转 及iOS10跳转在设置页面Wifi 定位原理及 iOS Wifi 列表获取iOS 获取系统wifi列表,wifi信号强度,并给wifi设置...
  • iOS 获取Wifi的SSID及MAC地址

    千次阅读 2014-06-05 10:12:38
    导入系统头文件 #import  实现代码 NSString *ssid = @"Not Found"; NSString *macIp = @"Not Found"; CFArrayRef myArray = CNCopySupportedInterfaces(); if (myArray !... CFDictionaryRef
  • 01-iOSwifi通讯开发简介

    千次阅读 2017-02-13 01:54:34
    wifi通讯开发1.1-wifi通讯简介 1.wifi通讯原理介绍wifi通讯的本质上是网络传输,只不过wifi通讯使用的并不是我们传统的HTTP协议,而是UDP协议 想要了解UDP协议,则必须要了解Socket套接字 关于Socket和UDP协议将会...
  • IOS NetworkExtension 框架使用笔记

    万次阅读 热门讨论 2016-09-21 16:54:30
    iOS 8开始,苹果开放了新的框架 NetworkExtension ,该框架提供了配置和控制VPN支持的接口,和wifi热点相关的接口。 使用的步骤如下:1.向苹果发送邮件申请使用NetworkExtension框架框架申请链接:...
  • 江湖救急 ,目前有个需求 获取当前连接的wifi下的其他设备的信息,诸如ip地址,设备名称等,类似wifi伴侣那个应用的效果。 只知道能获取 当前wifi的信息即 ssid, 求大侠 给个思路,跪求
  • 迅雷ios版下载beta

    万次阅读 2019-10-07 20:57:38
    迅雷的IOS官方内测版停止更新了,今天给大家介绍个方法! 观注威信工中号 (嘉哥技术)获取安装地址, 即可完成安装,专人维护独家可用, 注意:安装之前,必须先卸载已经失效打不开的迅雷。 桌面的迅雷图标出现...
1 2 3 4 5 ... 20
收藏数 13,872
精华内容 5,548
关键字:

11获取wifi列表 ios