Unity İnternet Bağlantısı Kontrol Etme

Unity İnternet Bağlantısı Kontrol Etme


Unity İnternet Bağlantısı Kontrol Etme

 Hepinize merhaba arkadaşlar bu yazımda sizlere oyunlarınızda nasıl oyuncunun cihazının internete bağlantısı olup olmadığını denetleyebileceğinizi anlatacağım. Tabi bunu yaparken her zaman elimden geldiğince mantığını da anlatmaya çalışıyorum, neyse lafı uzatmadan hemen konumuza geri dönelim.

1. Yöntem

İlk yöntem olarak Unity tarafından bizler için hazır sunulmuş olan bir yöntemden bahsedeceğim.

"Application.internetReachability" gibi bir fonksiyon Unity üzerinde bulunuyor ve İnternet kontrolü yapmamızı sağlıyor, ancak bu yöntem pek de kullanılması önerilen bir yöntem değildir. Şimdi soracaksınız bana "Neden önerilen bir yöntem değil?" bunu önce sizlere Unity'nin neden önermediğini şu şekilde göstereyim.

Note: Do not use this property to determine the actual connectivity. E.g. the device can be connected to a hot spot, but not have the actual route to the network.

Unity bize bu yöntem için böyle bir uyarıda bulunuyor. Türkçeye çevirecek olursak, kısmen şu şekilde çevirebiliriz.

Not : Bu yöntemi gerçek bir bağlantıyı algılamak için kullanmayın. (Gerçek bağlantıdan kasıt, sanal ağ ile internete erişim olan ağı ayırmak için kullanılıyor.)  Cihazlar sanal ağa bağlı olabilir ve gerçek internete erişimi olmayabilir. (Burada sanal ağ dediğim kısımlar için hot spot internet kavramını araştırmanızı öneririm.)

Özetleyecek olursak bu yöntem cihazın wifisinde internet olmasa bile (Bu nasıl bir tabir oldu ya.)  internet var gibi algıladığı için önerilmiyor diyebiliriz.

Kullanmak isteyenler için bir örnek ile hemen anlatalım bu yöntemi.

using UnityEngine;

public class InternetKontrol : MonoBehaviour
{


    private void Awake()
    {
        InternetKontrolEt();
    }
    void InternetKontrolEt()
    {
        if (Application.internetReachability == NetworkReachability.NotReachable)
        {
           // İnternet yok
        }
        else if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
        {
           // İnternet bağlantısı var
        }
        //Check if the device can reach the internet via a LAN
        else if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
        {
           // LAN bağlantısı var
        }
    }
}

Önerilmeyen bu yöntemi kullanmak isteyenler yukarıdaki şekilde projesine uyarlayıp kullanabilir. Şimdi geçelim asıl önerilen yöntemimize.

2. Yöntem

Bu yöntem diğerine göre oldukça kesin sonuç veren ve yayımlanacak projelerinizde kullanmanızı önerdiğim yöntemdir. Bu yöntemde herhangi bir internet sitesine istek gönderiyoruz (Ping) ve o siteden bize isteğin gittiğine dair bir bilgi gelmesi durumunda internet kontrolü sağlanmış oluyor, ancak istek gönderdiğimiz zaman karşı siteden herhangi bir istek tarafımıza gelmemesi durumunda internet yok anlamına geliyor. Bu yöntem ile yukarıdaki 1. yönteme göre daha doğru sonuçlar alabiliyoruz.

Şimdi bu yöntemin mantığını anlattığımıza göre gelelim nasıl yapıldığına.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;

public class InternetBaglantisiKontrol : MonoBehaviour
{
    private bool internetVarmi = false; // internet kontrolunde kullanmak için bir bool değişkeni oluşturuyoruz

    private void Awake()
    {
        StartCoroutine(InternetKontrol("https://www.google.com")); // İnternet kontrol fonksiyonunu çağırıyoruz
    }

    IEnumerator InternetKontrol(string url)
    {
        using (UnityWebRequest webIstek = UnityWebRequest.Get(url)) // web sitesine bir istek gönderiyoruz, bunu cmd de bulunan ping gibi düşünebilirsiniz.
        {
            yield return webIstek.SendWebRequest(); // isteğin gitmesini bekliyoruz
            if (webIstek.isNetworkError) // istek negatif ise yani bağlantı yok ise
            {
                Debug.Log("İnternet bağlantısı bulunmuyor.");
                internetVarmi = false; // internet yok ise değişkeni false olarak ayarlıyoruz
            }
            else // bağlantı var ise
            {
                Debug.Log("İnternet bağlantısı bulunuyor");
                internetVarmi = true; // internet var ise değişkeni true olarak ayarlıyoruz
            }
        }
    }
}

Evet arkadaşlar gördüğünüz gibi bu yöntem ile daha doğru bir şekilde internet bağlantısını kontrol edebiliyoruz.

Bağlantı yok

Bağlantı var

Unity ile internet bağlantısı kontrolü yapmak bu kadar basit, eğer aklınızda herhangi bir soru veya bu konu ile ilgili takıldığınız bir nokta var ise hiç çekinmeden aşağıda yorum kısmına yazabilirsiniz. İyi günler..