İçeriğe geç

İOS ile Internet connection control işlemi

İOS 10

Merhabalar bu yazımda İOS uygulamalarınızda nasıl hızlı bir şekilde internet bağlantısı var mı ? kontrolunu yapabiliriz ve bu işlemi veri tüketimi minimal olarak gerçekleştiririz buna örnek vereceğim.

Sunucu ile sürekli iletişim içinde olan veya internet kullanan uygulamaların hepsinde mecburen bu kontrolü yapıp buna göre olaylar yaratmalıyız. Kullanıcıya interneti var mı yok mu bağlantı kesildi gibi bilgiler vermemiz gerekli. Aksi halde kullanıcı bu veri iletim veya alma durumlarında hatanın uygulamadan kaynaklı olduğunu sanıp size kötü bir geri bildirim yapmış olacaktır.

Bu işlemi farklı yollardan yapabiliriz ancak size vereceğim fonksiyon hızlı ve veri tüketimi olmadan yapmakta. Normalde herhangi bir web servise veri paketi gönderip geri alınan http response değerine göre internet var yada yok cevabı alabilmekteyiz. Ancak aşağıdaki kod internet var mı yok mu işlemini 8 bitlik veri paketi göndererek yapmakta ve bu işlemi İOS‘un yardımcı internet protokol fonksiyonları bulunan SystemConfiguration kütüphanesi ile yapmakta.

Aşağıdaki verdiğim kod örneğini çoğu geliştirici kullanmakta, bende yeni yazdığım sınıfta kullanmaktayım. Bu arada çok yakında yardımcı Firebase sınıfımıda sizlerle paylaşmış olacağım.

func isOnline() -> Bool {
        
            var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
            zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
            zeroAddress.sin_family = sa_family_t(AF_INET)
            
            let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
                $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
                    SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
                }
            }
            
            var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
            if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
                return false
            }
            
            let isReachable = flags == .reachable
            let needsConnection = flags == .connectionRequired
            
            return isReachable && !needsConnection

    }

 

Tarih:iOS

Bu yazı yorumlara kapalı.

Copyright © 2021 Kenan Atmaca