puedo internet ilimitado compartir como iphone objective-c cocoa-touch wifi

iphone - internet - ¿Cómo uso CaptiveNetwork para obtener el nombre actual de Hotspot WiFi?



hotspot internet ilimitado (3)

Necesito obtener el nombre del punto de conexión Wi-Fi actualmente conectado, por ejemplo, "BT OpenZone"

Me han dicho que se puede hacer con CaptiveNetwork específicamente CNCopyCurrentNetworkInfo

Mi código hasta ahora:

#import <SystemConfiguration/CaptiveNetwork.h> ... // Get the dictionary containing the captive network infomation CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(kCNNetworkInfoKeySSID); // Get the count of the key value pairs to test if it has worked int count = CFDictionaryGetCount(captiveNtwrkDict); NSLog(@"Count of dict:%d",count);

Cuando el código se ejecuta en un dispositivo en un punto de acceso WiFi, captiveNtwrkDict es nulo.

¿Alguien ha logrado que funcione? No encuentro mucha documentación o ejemplos de código de ejemplo en CaptiveNetworks ... cualquier ayuda sería muy apreciada.


ACTUALIZACIÓN PARA iOS 10

CNCopySupportedInterfaces ya no está en desuso en iOS 10. ( Referencia de API )

Debe importar SystemConfiguration / CaptiveNetwork.h y agregar SystemConfiguration.framework a las bibliotecas vinculadas de su destino (en las fases de compilación).

Aquí hay un fragmento de código en swift (Respuesta de RikiRiocma) :

import Foundation import SystemConfiguration.CaptiveNetwork public class SSID { class func fetchSSIDInfo() -> String { var currentSSID = "" if let interfaces:CFArray! = CNCopySupportedInterfaces() { for i in 0..<CFArrayGetCount(interfaces){ let interfaceName: UnsafePointer<Void> = CFArrayGetValueAtIndex(interfaces, i) let rec = unsafeBitCast(interfaceName, AnyObject.self) let unsafeInterfaceData = CNCopyCurrentNetworkInfo("/(rec)") if unsafeInterfaceData != nil { let interfaceData = unsafeInterfaceData! as Dictionary! currentSSID = interfaceData["SSID"] as! String } } } return currentSSID } }

( Importante: CNCopySupportedInterfaces devuelve nil en el simulador).

Para Objective-c, consulte la respuesta de Esad aquí y debajo

+ (NSString *)GetCurrentWifiHotSpotName { NSString *wifiName = nil; NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces(); for (NSString *ifnam in ifs) { NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam); if (info[@"SSID"]) { wifiName = info[@"SSID"]; } } return wifiName; }

ACTUALIZACIÓN PARA iOS 9

A partir de iOS 9, la red cautiva está en desuso *. ( source )

* Ya no está en desuso en iOS 10, ver arriba.

Se recomienda utilizar NEHotspotHelper ( source )

Tendrá que enviar un correo electrónico a apple a [email protected] y solicitar derechos. ( source )

Código de muestra ( no es mi código. Consulte la respuesta de Pablo A ):

for(NEHotspotNetwork *hotspotNetwork in [NEHotspotHelper supportedNetworkInterfaces]) { NSString *ssid = hotspotNetwork.SSID; NSString *bssid = hotspotNetwork.BSSID; BOOL secure = hotspotNetwork.secure; BOOL autoJoined = hotspotNetwork.autoJoined; double signalStrength = hotspotNetwork.signalStrength; }

Nota al pie: Sí, desaprobaron CNCopySupportedInterfaces en iOS 9 e invirtieron su posición en iOS 10. Hablé con un ingeniero de redes de Apple y la revocación se produjo después de que mucha gente archivara radares y hablara sobre el tema en los foros de desarrolladores de Apple.


Fragmento de código fácil de usar (método):

  • Agregar SystemConfiguration.framework

  • import <SystemConfiguration / CaptiveNetwork.h>

  • usa el siguiente método

    + (NSString *)GetCurrentWifiHotSpotName { NSString *wifiName = nil; NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces(); for (NSString *ifnam in ifs) { NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam); NSLog(@"info:%@",info); if (info[@"SSID"]) { wifiName = info[@"SSID"]; } } return wifiName; }


Debe averiguar qué redes están disponibles y luego pasarlas a CNCopyCurrentNetworkInfo. Por ejemplo:

CFArrayRef myArray = CNCopySupportedInterfaces(); CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));

... y luego puede usar el kCNNetworkInfoKeySSID en el diccionario que recibió (myDict) para averiguar el SSID. No te olvides de liberar / administrar la memoria de manera apropiada.