comment détecter l'iphone connectivité VPN?
J'ai besoin de détecter si l'iphone est connecté à un VPN ou pas, en programmant. Je développe une application qui tentent de charger l'URL, cette page ne s'ouvrent que lorsque l'appareil est connecté à un VPN. Avant de charger cette URL que j'ai besoin de vérifier la connectivité VPN. J'ai essayé le suivant . Mais cela ne fonctionne pas comme prévu.
- (BOOL)checkForVPNConnectivity {
NSDictionary *dict = (__bridge NSDictionary *)(CFNetworkCopySystemProxySettings());
//NSLog(@"cfnetwork proxy setting : %@", dict);
return [dict count] > 0;
}
Qu'est-ce que
Lorsque nous sommes connectés au VPN CFNetworkCopySystemProxySettings devrait revenir plus que zéro des objets.
J'ai vu des messages suggérant
CFNetworkCopySystemProxySettings
de retour lorsque le VPN est connecté vs quand le VPN n'est pas connecté? Vous dites que c'est "ne fonctionne pas comme prévu", mais vous ne dites pas ce qu'il fait.Lorsque nous sommes connectés au VPN CFNetworkCopySystemProxySettings devrait revenir plus que zéro des objets.
J'ai vu des messages suggérant
CFNetworkCopySystemProxySettings
, ainsi. Mais pour moi, je vois zéro des entrées sur les réseaux cellulaires, mais un couple d'entrées à chaque fois que je suis sur mon wifi à la maison (mais pas de VPN que soit le scénario). Ligne de fond, la présence ou l'absence d'entrées, à lui seul, n'est clairement pas un moyen valable de détection de VPN. J'espère que la SystemConfiguration.framework
suggestion, ci-dessous, sera la plus prometteuse.OriginalL'auteur Kashyap | 2013-04-29
Vous devez vous connecter pour publier un commentaire.
Je ne crois pas qu'il convient de déterminer la connectivité VPN en vérifiant pour un non-zéro le nombre d'éléments dans la
CFNetworkCopySystemProxySettings()
. (Par exemple, je vois des entrées sur un réseau WiFi, mais pas sur un VPN.)Donc, deux observations:
Je voudrais envisager l'utilisation de la
SystemConfiguration.framework
et utiliser le code suivant avec le nom d'hôte de quelque chose sur votre VPN:En supposant que
success
est non-zéro, vous pourriez avoir à faire un peu de recherches empiriques sur le réglage de ces bits deflags
. Voir SCNetworkReachability De Référence pour les définitions techniques de ces drapeaux. J'ai entendu des allégations qu'ils obtiennentkSCNetworkReachabilityFlagsReachable | kSCNetworkReachabilityFlagsTransientConnection
lorsque le VPN est connecté, mais je n'ai pas de VPN, donc je ne peux pas tester cette revendication. Je vous suggère de l'essayer avec et sans le VPN et voir si vous obtenez différentsflags
retourné.Sans rapport avec le problème à portée de main, votre exemple de code fuite. Si vous utilisez un ARC, n'oubliez pas d'utiliser
CFBridgingRelease
ou__bridge_transfer
. Ou peu importe de savoir si, en ARC ou pas, appeler explicitementCFRelease
avant votre retour.Si vous exécutez l'analyseur statique (appuyez sur maj+commande+B ou cliquez sur "Analyser" à partir du "Produit" menu) dans les dernières versions de Xcode, il devrait vous avertir de la gestion de la mémoire de Base de la Fondation des appels.
De toute façon, c'est la façon dont je serais enclin à le gérer dans l'ARC:
D'accord. Comme vous le voyez dans mes commentaires à la question initiale, je vois le même comportement. Je ne crois pas qu'il convient de déterminer la connectivité VPN en vérifiant pour un non-zéro le nombre d'éléments dans la
CFNetworkCopySystemProxySettings()
. J'ai été tout simplement la fixation de la fuite de mémoire dans le cas des OP de code de l'échantillon. J'ai tenté de clarifier ma réponse.Thx. J'ai été en mesure de vérifier l'état VPN dans tous les cas, en combinant les deux solutions.
Je suis aussi à la combinaison de ces solutions, mais je suis toujours inquiet au sujet de cette vérification pour
CFNetworkCopySystemProxySettings()
en cas de réseau Cellulaire. Est-il une source fiable pour cette solution? Pourquoi serait-il toujours en revenir à zéro entrées lorsqu'il est connecté via le réseau Cellulaire + VPN?OriginalL'auteur Rob
Vous pouvez utiliser simple solution de contournement pour le problème mentionné ci-dessus.
Suffit d'utiliser apple accessibilité pour vérifier wherther appareil ios est connecté à internet ou pas. Si pas jeter de l'internet n'est pas une erreur de connexion.Si oui,essayez d'accéder à votre VPN personne à charge URL à l'aide de NSURLConnection.Si vous obtenez le succès de 200 comme ça,j'.e vous êtes connecté au VPN.Si cette requête renvoie hôte non trouvé ou toute erreur de ce type -1001 signifie que vous n'êtes pas connecté à un VPN.Ensuite, vous pouvez jeter correspondant de la connectivité VPN erreur à l'utilisateur.Heureux de codage.... Arun kumar
Pour plus d'informations, veuillez consulter mon blog
http://aruntheiphonedeveloper.blogspot.in
OriginalL'auteur arun kumar
Où la charge de la préférence
Alors dans l'état que vous obtenez l'état vpn qui est déconnecté ,invalides et connecté, etc vous pouvez lire à ce sujet à partir de ce lien https://developer.apple.com/documentation/networkextension/nevpnstatus
espérons que cela vous aidera
amusez-vous bien:)
OriginalL'auteur Rana Asad