Есть ли способ захвата события, когда пользователь подключается к определенной сети WiFi в приложении iOS. Это прекрасно, даже если это может быть достигнуто с использованием любой частной библиотеки, которая не требует привилегий суперпользователя (перерыв в тюрьме). Я просто хочу захватить событие изменения подключенного SSID.
Захват события изменения сети Wi-Fi в iOS
Ответ 1
Я бы рекомендовал просто использовать то, что опубликовал Larme, и настроить NSTimer для проверки каждую секунду или около того, что SSID вашей текущей сети, если вы обнаружите изменение, просто делайте все, что вам нужно. Имейте в виду, что изменение сетей Wi-Fi не является чем-то, что происходит мгновенно, поэтому с 1-секундным разрешением неплохо
В applicationDidFinishLoading
NSTimer *ssidTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(fetchSSIDInfo) userInfo:nil repeats:YES];
В AppDelegate
- (id)fetchSSIDInfo {
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
NSLog(@"Supported interfaces: %@", ifs);
id info = nil;
NSString *ifnam = @"";
for (ifnam in ifs) {
info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
NSLog(@"%@ => %@", ifnam, info);
if (info && [info count]) { break; }
}
if ([info count] >= 1 && [ifnam caseInsensitiveCompare:prevSSID] != NSOrderedSame) {
// Trigger some event
prevSSID = ifnam;
}
return info;
}
Что-то вроде этого. Я не могу проверить, свободен ли код, поскольку у меня нет макроса, но он не должен быть слишком разным
Ответ 2
Вы можете получить информацию из своего Wi-Fi соединения:
- (NSDictionary *)getConnectionDetails
{
NSDictionary *connectionDetails = [NSDictionary dictionary];
CFArrayRef myArray = CNCopySupportedInterfaces();
if (myArray) {
CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
connectionDetails = (__bridge_transfer NSDictionary*)myDict;
}
return connectionDetails;
}
И тогда, если вы проверите [connectionDetails valueForKey:@"BSSID"]
, вы получите BSSID.
Также обратите внимание, что вы должны импортировать #import <SystemConfiguration/CaptiveNetwork.h>
Ответ 3
Вы хотите SystemConfiguration, которая имеет средства для просмотра уведомлений о всех видах сетевых изменений. В частности, вы захотите использовать SCDynamicStoreSetNotificationKeys для прослушивания изменений в устройствах и SCNetworkConfiguration для получения информации о доступных интерфейсах.