web-dev-qa-db-fra.com

Vérifiez la connectivité Internet de Unity

J'ai un projet Unity que je construis pour les plateformes Android et iOS. Je souhaite vérifier la connectivité Internet sur les appareils Desktop, Android et iOS. J'ai lu trois solutions différentes:

  1. Ping quelque chose (par exemple Google) - Je n'aime pas vraiment une telle décision et j'ai lu des articles sur des erreurs sur Android.

  2. Application.internetReachability - Selon la documentation de Unity, cette fonction déterminera uniquement que je peux POSSIBILITÉ de me connecter à Internet (cela ne garantit pas une vraie connexion).

  3. Network.TestConnection() - Si je n'ai pas de connexion Internet, mon application échoue. Donc ce n'est pas correct non plus.

Comment puis-je déterminer si j'ai une connexion Internet depuis Unity?

7
Anna Kuleva

En fait, je ne crois pas que Network.TestConnection() soit le bon outil pour ce travail. Selon la documentation , il me semble qu’elle sert à vérifier si NAT fonctionne et si votre client est accessible publiquement par IP, mais vous voulez vérifier si vous avez un accès Internet général. connectivité.

Voici une solution que j'ai trouvée dans Unity Answers par utilisateur pixel_fiend , qui teste simplement un site Web pour voir si l'utilisateur dispose d'une connectivité. L'un des avantages de ce code est qu'il utilise IEnumerator pour les opérations asynchrones, de sorte que le test de connectivité ne bloque pas le reste de votre application:

IEnumerator checkInternetConnection(Action<bool> action){
     WWW www = new WWW("http://google.com");
     yield return www;
     if (www.error != null) {
         action (false);
     } else {
         action (true);
     }
 } 
 void Start(){
     StartCoroutine(checkInternetConnection((isConnected)=>{
         // handle connection status here
     }));
 }

Vous pouvez modifier le site Web à votre guise, ou même modifier le code pour obtenir de nouveaux résultats si l'un des sites est accessible. Si je comprends bien, il n’existe aucun moyen de vérifier la véritable connectivité Internet sans essayer de se connecter à un site spécifique sur Internet. Par conséquent, "interroger" un ou plusieurs sites Web comme celui-ci est probablement votre meilleur moyen de déterminer la connectivité.

7

La méthode appropriée pour tester la connectivité Internet "garantie" consiste à effectuer une détection de portail captif à l'aide d'une requête http (s) vers un lieu dont le contenu est connu. C'est ainsi que les systèmes d'exploitation testent eux-mêmes s'ils doivent présenter un écran de connexion wifi à l'utilisateur.

Un simple ping ou la vérification du statut d'erreur/de succès de la demande www n'est pas suffisant, comme par exemple. La page de connexion wifi de l'hôtel/aéroport peut être renvoyée sans code d'erreur (à la place de la page souhaitée).

En outre, par exemple sur iOS, de nouvelles limitations supplémentaires (sécurité de transport d'application autorisant http uniquement lorsqu'elles sont explicitement inscrites sur la liste blanche).

Mon actif est une solution facile, bien que non gratuite: Vérificateur d'accessibilité à Internet dans Asset Store.

2
tonic

je sais que c'est vieux, mais peut peut-être vous aider.

public bool CheckInternetConnection(){
    return !(Application.internetReachability == NetworkReachability.NotReachable)
}
0
kamiyar