ios13无法获取wifi名(SSID)(亲测有效)

ios13之前获取怎样获取wifi名

iOS 怎样获取wifi名(无法获取wifi名)(亲测有效)

ios13后

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

1.添加定位库

在这里插入图片描述

2.在Info.plist文件中配置,我把关于定位的4个都配上了

在这里插入图片描述

3.在控制中引入头文件,遵守代理

在这里插入图片描述

4.实现代理弹出框获取用户的定位授权

#pragma mark - 定位授权代理方法
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    if (status == kCLAuthorizationStatusAuthorizedWhenInUse ||
        status == kCLAuthorizationStatusAuthorizedAlways) {
        //再重新获取ssid
        [self getSSID];
    }
}

- (void)getLocation
{
    if (!self.locManager) {
        self.locManager = [[CLLocationManager alloc] init];
        
    }
    
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        //这句代码会在app的设置中开启位置授权的选项,只有用户选择了允许一次,下次用户调用这个方法才会弹出询问框,选择不允许或是使用期间允许,下次调用这个方法都不会弹出询问框
        [self.locManager requestAlwaysAuthorization];
        
    }
    
    self.locManager.delegate = self;
    //如果用户第一次拒绝了,弹出提示框,跳到设置界面,要用户打开位置权限
    //如果用户跳到设置界面选择了下次询问,再回到app,[CLLocationManager authorizationStatus]的值会是nil,所以要||后面的判断
    if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied || ![CLLocationManager authorizationStatus]) {
        [self alertMy];
    }
}

- (void)alertMy{
       //1.创建UIAlertControler
       UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"app需要获取您的位置权限,以获取wifi信息,给机器人配网" preferredStyle:UIAlertControllerStyleAlert];
     
       UIAlertAction *conform = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
           //使用下面接口可以打开当前应用的设置页面
           [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
           NSLog(@"点击了确认按钮");
       }];
       //2.2 取消按钮
       UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
           NSLog(@"点击了取消按钮");
       }];
    
       //3.将动作按钮 添加到控制器中
       [alert addAction:conform];
       [alert addAction:cancel];
       
       //4.显示弹框
       [self presentViewController:alert animated:YES completion:nil];
}

4.获取wifi信息

- (void)getSSID{
    ssidStr = [JMAirKissShareTools fetchSSIDInfo][@"SSID"];
    
    if ([StringHelper isNilOrEmpty:ssidStr]) {
        [self showHint:@"请加入Wi-Fi网络后搜索"];
        ssidStr = @"未连接到WiFi";
    }
    _wifiLab.text = ssidStr;

}
#import "JMAirKissShareTools.h"

#import <SystemConfiguration/SystemConfiguration.h>
#import <SystemConfiguration/CaptiveNetwork.h>

#include <inttypes.h>

#define CRC8INIT 0x00
#define CRC8POLY 0x31 // = X^8+X^5+X^4+X^0

@implementation JMAirKissShareTools
/**
 *  获取SSID信息
 *
 *  @return id
 */
+ (id)fetchSSIDInfo {
    
    
    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
    id info = nil;
    for (NSString *ifnam in ifs) {
        info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
        
        if (info && [info count]) {
            break;
        }
    }
    return info;
}

@end

参考博客:
链接: 6.iOS13 获取不到WiFi ssid 的问题
链接: OC 源生获取当前位置经纬度
链接: 解决iOS13 无法获取WiFi名称(SSID)问题

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页