iPhone получает SSID без частной библиотеки

Я думаю лучшее, это возможно в перекрестном браузере, который JavaScript window.print(), который (в Firefox 3, для меня) поднимает диалоговое окно 'печати' а не диалоговое окно предварительного просмотра.

153
задан TheNeil 17 April 2019 в 20:04
поделиться

1 ответ

Для iOS 13

Как от iOS 13 для Вашего приложения также нужен Базовый доступ Местоположения для использования CNCopyCurrentNetworkInfo функция , если это не настроило текущую сеть или имеет конфигурации VPN:
excerpt from https://developer.apple.com/documentation/systemconfiguration/1614126-cncopycurrentnetworkinfo?language=objc

, Таким образом, это - то, в чем Вы нуждаетесь (см. документация яблока ):
- Ссылка CoreLocation.framework библиотека
- Добавляет location-services как UIRequiredDeviceCapabilities Ключ/Значение в [1 115], Info.plist
- Добавляет NSLocationWhenInUseUsageDescription Ключ/Значение в [1 116] Info.plist, описывающий, почему Ваше приложение требует, чтобы Базовое Местоположение
- Добавило "Доступ право" информации о WiFi для Вашего приложения

Теперь как пример Objective C, сначала проверило, был ли доступ местоположения принят прежде, чем считать информацию о сети с помощью CNCopyCurrentNetworkInfo:

- (void)fetchSSIDInfo {
    NSString *ssid = NSLocalizedString(@"not_found", nil);

    if (@available(iOS 13.0, *)) {
        if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) {
            NSLog(@"User has explicitly denied authorization for this application, or location services are disabled in Settings.");
        } else {
            CLLocationManager* cllocation = [[CLLocationManager alloc] init];
            if(![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined){
                [cllocation requestWhenInUseAuthorization];
                usleep(500);
                return [self fetchSSIDInfo];
            }
        }
    }

    NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
    id info = nil;
    for (NSString *ifnam in ifs) {
        info = (__bridge_transfer id)CNCopyCurrentNetworkInfo(
            (__bridge CFStringRef)ifnam);

        NSDictionary *infoDict = (NSDictionary *)info;
        for (NSString *key in infoDict.allKeys) {
            if ([key isEqualToString:@"SSID"]) {
                ssid = [infoDict objectForKey:key];
            }
        }
    }        
        ...
    ...
}
2
ответ дан 23 November 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: