Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/network_info_plus/network_info_plus/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 1.3.0

- IOS: Use `NEHotspotNetwork` on iOS 14+ to get SSID/BSSID.

## 1.2.1

- IOS: Fix issue failed to build on iOS emulator
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#import <Foundation/Foundation.h>
#import "FLTNetworkInfoProvider.h"

@interface FLTCaptiveNetworkInfoProvider : NSObject <FLTNetworkInfoProvider>
@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#import "FLTCaptiveNetworkInfoProvider.h"
#import <SystemConfiguration/CaptiveNetwork.h>

@implementation FLTCaptiveNetworkInfoProvider

- (void)fetchNetworkInfoWithCompletionHandler:(void (^)(FLTNetworkInfo *network))completionHandler {
dispatch_async(dispatch_get_main_queue(), ^{
NSArray *interfaceNames = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *interfaceName in interfaceNames) {
NSDictionary *networkInfo =
(__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)interfaceName);
if (networkInfo) {
NSString *ssid = networkInfo[(NSString *)kCNNetworkInfoKeySSID];
NSString *bssid = networkInfo[(NSString *)kCNNetworkInfoKeyBSSID];
completionHandler([[FLTNetworkInfo alloc] initWithSSID:ssid BSSID:bssid]);
return;
}
}
completionHandler(nil);
});
}

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#import <Foundation/Foundation.h>
#import "FLTNetworkInfoProvider.h"

@interface FLTHotspotNetworkInfoProvider : NSObject <FLTNetworkInfoProvider>
@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#import "FLTHotspotNetworkInfoProvider.h"
#import <NetworkExtension/NetworkExtension.h>

@implementation FLTHotspotNetworkInfoProvider

- (void)fetchNetworkInfoWithCompletionHandler:(void (^)(FLTNetworkInfo *network))completionHandler
API_AVAILABLE(ios(14)) {
[NEHotspotNetwork fetchCurrentWithCompletionHandler:^(NEHotspotNetwork *network) {
dispatch_async(dispatch_get_main_queue(), ^{
if (network) {
completionHandler([[FLTNetworkInfo alloc] initWithSSID:network.SSID BSSID:network.BSSID]);
return;
}
completionHandler(nil);
});
}];
}

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#import <Foundation/Foundation.h>

@interface FLTNetworkInfo : NSObject

@property(nonatomic, readonly) NSString *SSID;
@property(nonatomic, readonly) NSString *BSSID;

- (instancetype)initWithSSID:(NSString *)SSID BSSID:(NSString *)BSSID;

@end
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#import "FLTNetworkInfo.h"

@implementation FLTNetworkInfo

- (instancetype)initWithSSID:(NSString *)SSID BSSID:(NSString *)BSSID {
if ((self = [super init])) {
_SSID = [SSID copy];
_BSSID = [BSSID copy];
}
return self;
}

@end
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@
#import "FLTNetworkInfoPlusPlugin.h"

#import <CoreLocation/CoreLocation.h>
#import "FLTCaptiveNetworkInfoProvider.h"
#import "FLTHotspotNetworkInfoProvider.h"
#import "FLTNetworkInfo.h"
#import "FLTNetworkInfoLocationPlusHandler.h"
#import "FLTNetworkInfoProvider.h"
#import "SystemConfiguration/CaptiveNetwork.h"
#import "getgateway.h"

Expand All @@ -16,30 +20,39 @@
@interface FLTNetworkInfoPlusPlugin () <CLLocationManagerDelegate>

@property(strong, nonatomic) FLTNetworkInfoLocationPlusHandler* locationHandler;
@property(strong, nonatomic) id<FLTNetworkInfoProvider> networkInfoProvider;

- (instancetype)initWithNetworkInfoProvider:(id<FLTNetworkInfoProvider>)networkInfoProvider;

@end

@implementation FLTNetworkInfoPlusPlugin {
}

+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
FLTNetworkInfoPlusPlugin* instance = [[FLTNetworkInfoPlusPlugin alloc] init];
id<FLTNetworkInfoProvider> networkInfoProvider;
if (@available(iOS 14, *)) {
networkInfoProvider = [[FLTHotspotNetworkInfoProvider alloc] init];
} else {
networkInfoProvider = [[FLTCaptiveNetworkInfoProvider alloc] init];
}
FLTNetworkInfoPlusPlugin* instance =
[[FLTNetworkInfoPlusPlugin alloc] initWithNetworkInfoProvider:networkInfoProvider];

FlutterMethodChannel* channel =
[FlutterMethodChannel methodChannelWithName:@"dev.fluttercommunity.plus/network_info"
binaryMessenger:[registrar messenger]];
[registrar addMethodCallDelegate:instance channel:channel];
}

#pragma mark - Callbacks

- (NSString*)getWifiName {
return [self findNetworkInfo:@"SSID"];
- (instancetype)initWithNetworkInfoProvider:(id<FLTNetworkInfoProvider>)networkInfoProvider {
if ((self = [super init])) {
self.networkInfoProvider = networkInfoProvider;
}
return self;
}

- (NSString*)getBSSID {
return [self findNetworkInfo:@"BSSID"];
}
#pragma mark - Callbacks

- (NSString*)getGatewayIP {
struct in_addr gatewayAddr;
Expand Down Expand Up @@ -118,9 +131,13 @@ - (NSString*)convertCLAuthorizationStatusToString:(CLAuthorizationStatus)status

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
if ([call.method isEqualToString:@"wifiName"]) {
result([self getWifiName]);
[self.networkInfoProvider fetchNetworkInfoWithCompletionHandler:^(FLTNetworkInfo* networkInfo) {
result(networkInfo.SSID);
}];
} else if ([call.method isEqualToString:@"wifiBSSID"]) {
result([self getBSSID]);
[self.networkInfoProvider fetchNetworkInfoWithCompletionHandler:^(FLTNetworkInfo* networkInfo) {
result(networkInfo.BSSID);
}];
} else if ([call.method isEqualToString:@"wifiIPAddress"]) {
result([self getWifiIP]);
} else if ([call.method isEqualToString:@"wifiIPv6Address"]) {
Expand Down Expand Up @@ -157,19 +174,6 @@ - (FLTNetworkInfoLocationPlusHandler*)locationHandler {

#pragma mark - Utils

- (NSString*)findNetworkInfo:(NSString*)key {
NSString* info = nil;
NSArray* interfaceNames = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString* interfaceName in interfaceNames) {
NSDictionary* networkInfo =
(__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)interfaceName);
if (networkInfo[key]) {
info = networkInfo[key];
}
}
return info;
}

- (struct ifaddrs*)getWifiInterfaceIPv4 {
return [self getWifiInterface:AF_INET];
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#import <Foundation/Foundation.h>
#import "FLTNetworkInfo.h"

@protocol FLTNetworkInfoProvider <NSObject>

- (void)fetchNetworkInfoWithCompletionHandler:
(void (^)(FLTNetworkInfo *networkInfo))completionHandler;

@end
2 changes: 1 addition & 1 deletion packages/network_info_plus/network_info_plus/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: network_info_plus
description: Flutter plugin for discovering information (e.g. WiFi details) of the network.
version: 1.2.1
version: 1.3.0
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/

Expand Down