獲取iPhone手機(jī)當(dāng)前連接的WiFi信息

第一步:獲取WiFi信息需要在Target—>Capabilities—>Access wifi information 點(diǎn)擊允許


image.png

下面是獲取WiFi信息的類方法及實(shí)現(xiàn)已使用WiFi信息的本地持久化儲存,使用中記得更改存儲主鍵值[[NSUserDefaults standardUserDefaults] objectForKey:kDefaultUserID]

//
//  YFWifiItem.h
//  SmartAlarm
//
//  Created by 晴天 on 2018/12/16.
//  Copyright ? 2018年 Huang Shan. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface YFWifiItem : NSObject <NSCoding>
/** userUUID */
@property (nonatomic, copy)NSString *userUUID;
/** ssid */
@property (nonatomic, copy)NSString *wifiSsid;
/** password */
@property (nonatomic, copy)NSString *wifiPassword;
/** wifiBssid, 網(wǎng)絡(luò)的IPMac */
@property (nonatomic, copy) NSString *wifiBssid;

// 1.存儲或更新WiFi信息
+ (YFWifiItem *)updateOrSavewWithSsid:(NSString *)wifiSsid bssid:(NSString *)bssid wifipassword:(NSString *)password;
// 2.根據(jù)SSId拿當(dāng)前用戶存儲過的WiFi數(shù)據(jù)
+ (YFWifiItem *)getWifiItemWithSSID:(NSString *)ssid;

#pragma mark - 獲取當(dāng)前鏈接的WiFi基本信息
// 獲取IP地址
+ (NSString *)deviceIPAdress;
// 獲取WiFi的ssid
+ (NSString *)getWifiSSID;
// 獲取WiFi的Bssid
+ (NSString *)getWifiBSSID;


@end

NS_ASSUME_NONNULL_END
//
//  YFWifiItem.m
//  SmartAlarm
//
//  Created by 晴天 on 2018/12/16.
//  Copyright ? 2018年 Huang Shan. All rights reserved.
//

#import "YFWifiItem.h"
#import <SystemConfiguration/CaptiveNetwork.h>
#import <ifaddrs.h>
#import <arpa/inet.h>

@implementation YFWifiItem

- (instancetype)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
        _userUUID = [aDecoder decodeObjectForKey:@"userUUID"];
        _wifiSsid = [aDecoder decodeObjectForKey:@"wifiSsid"];
        _wifiPassword = [aDecoder decodeObjectForKey:@"wifiPassword"];
        _wifiBssid = [aDecoder decodeObjectForKey:@"wifiBssid"];
    }
    return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:self.userUUID forKey:@"userUUID"];
    [aCoder encodeObject:self.wifiSsid forKey:@"wifiSsid"];
    [aCoder encodeObject:self.wifiPassword forKey:@"wifiPassword"];
    [aCoder encodeObject:self.userUUID forKey:@"wifiBssid"];
}

// 1.存儲或更新WiFi信息
+ (YFWifiItem *)updateOrSavewWithSsid:(NSString *)wifiSsid bssid:(NSString *)bssid wifipassword:(NSString *)password {
    //查看當(dāng)前是否已經(jīng)有
    YFWifiItem *wifiItem = [[YFWifiItem alloc] init];
    wifiItem.userUUID = [[NSUserDefaults standardUserDefaults] objectForKey:kDefaultUserID];
    wifiItem.wifiSsid = wifiSsid;
    wifiItem.wifiPassword = password;
    wifiItem.wifiBssid = bssid;
    if (wifiSsid.length > 0) {
        NSString *path = [self getSaveUserWifiPath];
        NSArray *oldDataArr = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
        NSMutableArray *arrM = [NSMutableArray arrayWithArray:oldDataArr];
        if (oldDataArr.count > 0) {
            NSArray *results = [oldDataArr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"wifiSsid=%@",wifiSsid]];
            [arrM removeObjectsInArray:results];
        }
        [arrM addObject:wifiItem];
        [NSKeyedArchiver archiveRootObject:arrM.copy toFile:path];
    }
    return wifiItem;
}

// 獲取當(dāng)前用戶WiFi的存儲路徑
+ (NSString *)getSaveUserWifiPath {
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:[NSString stringWithFormat:@"UserIdWifi-%@",[[NSUserDefaults standardUserDefaults] objectForKey:kDefaultUserID]]];
    return path;
}

// 2.根據(jù)SSId拿當(dāng)前用戶存儲過的WiFi數(shù)據(jù)
+ (YFWifiItem *)getWifiItemWithSSID:(NSString *)ssid {
    if (!ssid.length) {
        return nil;
    }
    NSString *path = [self getSaveUserWifiPath];
    NSArray *oldDataArr = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    NSArray *results = [oldDataArr filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"wifiSsid=%@",ssid]];
    if (results.count > 0) {
        return results.lastObject;
    }else {
        return nil;
    }
}

#pragma mark -獲取WiFi基本信息
+ (NSString *)deviceIPAdress {
    //出處: http://www.itdecent.cn/p/c3499d8e9a72
    NSString *address = @"an error occurred when obtaining ip address";
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0;
    
    success = getifaddrs(&interfaces);
    
    if (success == 0) { // 0 表示獲取成功
        
        temp_addr = interfaces;
        while (temp_addr != NULL) {
            if( temp_addr->ifa_addr->sa_family == AF_INET) {
                // Check if interface is en0 which is the wifi connection on the iPhone
                if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
                    // Get NSString from C String
                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                }
            }
            
            temp_addr = temp_addr->ifa_next;
        }
    }
    freeifaddrs(interfaces);
    
    return address;
}

/// 獲取wifi名稱
+ (NSString *)getWifiSSID {
    NSString *ssid = nil;//NSLocalizedString(@"未連接WiFi", nil);
    NSDictionary *info = [self getWifiInfo];
    if (info != nil) {
        ssid = [info objectForKey:@"SSID"];
    }
    return ssid;
}
/// 獲取WiFi的Bssid
+ (NSString *)getWifiBSSID {
    NSString *bSsid = nil;//NSLocalizedString(@"未連接WiFi", nil);
    NSDictionary *bssidInfo = [self getWifiInfo];
    if (bssidInfo != nil) {
        bSsid = [bssidInfo objectForKey:@"BSSID"];
    }
    return bSsid;
}

+ (NSDictionary *)getWifiInfo
{
    NSArray *interfaceNames = CFBridgingRelease(CNCopySupportedInterfaces());
    
    NSDictionary *SSIDInfo;
    for (NSString *interfaceName in interfaceNames) {
        SSIDInfo = CFBridgingRelease(
                                     CNCopyCurrentNetworkInfo((__bridge CFStringRef)interfaceName));
        
        BOOL isNotEmpty = (SSIDInfo.count > 0);
        if (isNotEmpty) {
            break;
        }
    }
    return SSIDInfo;
}

@end

獲取WiFi列表實(shí)現(xiàn)可參考:
獲取WiFi列表信息https://group.cnblogs.com/topic/78158.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵勝奧閱讀 5,175評論 0 1
  • 不知是否是吃了藥的緣故,最近心情很穩(wěn)定,朋友圈也不發(fā)了,基本沒有波動,感覺也不那么敏感,這樣多好,鈍感比敏感要幸福。
    遠(yuǎn)芳2018閱讀 205評論 0 0
  • “遇見”這個(gè)詞,總能勾起很多人無盡的瑕想,一不留神就穿越回十幾二十年前的初戀,每當(dāng)看到這兩個(gè)字,我也總是衍生一種暖...
    桃之夭夭116閱讀 544評論 0 3
  • 我的方向在哪里?我仿佛已經(jīng)丟失你。
    旖睿睿閱讀 136評論 0 0
  • 陌生的 熟悉的 兩個(gè)人 心動的 沉默的 兩種心情 堅(jiān)持的 放棄的 兩種聲音 主動的 被動的 都是我們 回憶...
    梓伊的心雨閱讀 300評論 0 0

友情鏈接更多精彩內(nèi)容