-->

Detect the name of wireless network

2020-07-18 02:43发布

问题:

Is it possible to run a method that will return the name of the wireless network that the user is connected to? Inside of my app I want to be able to return the name of the wireless network that the user is connected to.

回答1:

This worked perfect for me:

#import <SystemConfiguration/CaptiveNetwork.h>

CFArrayRef myArray = CNCopySupportedInterfaces();
CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
//    NSLog(@"SSID: %@",CFDictionaryGetValue(myDict, kCNNetworkInfoKeySSID));
NSString *networkName = CFDictionaryGetValue(myDict, kCNNetworkInfoKeySSID);

if ([networkName isEqualToString:@"Hot Dog"])
{
    self.storeNameController = [[StoreDataController alloc] init];
    [self.storeNameController addStoreNamesObject];
}
else {
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @"Connection Failed"
                                                   message: @"Please connect to the Hot Dog network and try again"
                                                  delegate: self
                                         cancelButtonTitle: @"Close"
                                         otherButtonTitles: nil];

    [alert show];


回答2:

From Developer.apple , you can use CNCopyCurrentNetworkInfo

It Returns the current network info for a given network interface.

CFDictionaryRef CNCopyCurrentNetworkInfo (
   CFStringRef interfaceName
);

It contains a dictionary that containing the interface’s current network info. Ownership follows the Create Rule.

Note:Available in iOS 4.1 and later.

EXAMPLE:

This example will work fine in real device, It may crash in simulator.

Add SystemConfiguration.framework

Import CaptiveNetwork header same as below

#import <SystemConfiguration/CaptiveNetwork.h>

Then write the below code.

    CFArrayRef myArray = CNCopySupportedInterfaces();
    // Get the dictionary containing the captive network infomation
    CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));    
    NSLog(@"Information of the network we're connected to: %@", captiveNtwrkDict);    
    NSDictionary *dict = (__bridge NSDictionary*) captiveNtwrkDict;
    NSString* ssid = [dict objectForKey:@"SSID"];
    NSLog(@"network name: %@",ssid);

or

Using Bonjour, the application both advertises itself on the local network and displays a list of other instances of this application on the network

See the sample Witap application



回答3:

The BAD NEWS: 'CNCopyCurrentNetworkInfo' is deprecated: first deprecated in iOS 9.0 - For captive network applications, this has been completely replaced by <NetworkExtension/NEHotspotHelper.h>. For other applications, there is no direct replacement. Please file a bug describing your use of this API to that we can consider your requirements as this situation evolves.

The GOOD NEWS: although deprecated, it still works in iOS 9, AND it has been un-deprecated in iOS 10.

It still works in iOS 13, but only if the app implements Location Services and the user authorizes their usage.



标签: iphone ios xcode