iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)

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

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

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

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

#import

#import

想要获取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

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第1张图片

 

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第2张图片

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

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第3张图片

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

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

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第4张图片

 

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第5张图片

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第6张图片

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第7张图片

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第8张图片

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第9张图片

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第10张图片

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第11张图片

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

3、使用场景实例

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

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第12张图片

 

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

三掌柜的微信公众号:

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第13张图片

三掌柜的新浪微博:

iOS开发:获取WiFi名称(解决iOS12.0以上系统不能正常获取WiFi名称的方法)_第14张图片

 

你可能感兴趣的:(iOS开发遇到的坑,iOS开发)