Saya ingin memeriksa untuk melihat apakah saya memiliki koneksi Internet di iOS menggunakan perpustakaan Cocoa Touch atau pada macOS menggunakan perpustakaan Cocoa .
Saya datang dengan cara untuk melakukan ini menggunakan NSURL
. Cara saya melakukannya tampaknya agak tidak dapat diandalkan (karena bahkan suatu hari Google bisa turun dan mengandalkan pihak ketiga tampak buruk), dan sementara saya bisa memeriksa untuk melihat tanggapan dari beberapa situs web lain jika Google tidak merespons, itu memang tampak boros dan overhead yang tidak perlu pada aplikasi saya.
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
Apakah yang saya lakukan buruk, (belum lagi stringWithContentsOfURL
ditinggalkan di iOS 3.0 dan macOS 10.4) dan jika demikian, apa cara yang lebih baik untuk mencapai ini?
ios
macos
cocoa
cocoa-touch
reachability
Brock Woolf
sumber
sumber
return (BOOL)URLString;
, atau bahkan lebih baik,return !!URLString
ataureturn URLString != nil
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://twitter.com/getibox"] encoding:NSUTF8StringEncoding error:nil];
Untuk menyingkirkan peringatan yang mengganggu.Jawaban:
Penting : Pemeriksaan ini harus selalu dilakukan secara tidak sinkron. Sebagian besar jawaban di bawah ini sinkron jadi berhati-hatilah karena jika tidak Anda akan membekukan aplikasi Anda.
Cepat
1) Pasang melalui CocoaPods atau Carthage: https://github.com/ashleymills/Reachability.swift
2) Uji kemampuan jangkau melalui penutupan
Objektif-C
1) Tambahkan
SystemConfiguration
kerangka kerja ke proyek tetapi jangan khawatir tentang memasukkannya ke mana saja2) Tambahkan versi Tony Million
Reachability.h
danReachability.m
ke proyek (ditemukan di sini: https://github.com/tonymillion/Reachability )3) Perbarui bagian antarmuka
4) Kemudian implementasikan metode ini dalam file .m dari view controller Anda yang dapat Anda panggil
Catatan Penting: The
Reachability
class adalah salah satu yang paling kelas digunakan dalam proyek-proyek sehingga Anda mungkin mengalami konflik penamaan dengan proyek-proyek lainnya. Jika ini terjadi, Anda harus mengganti nama salah satu dari pasanganReachability.h
danReachability.m
file ke sesuatu yang lain untuk menyelesaikan masalah.Catatan: Domain yang Anda gunakan tidak masalah. Itu hanya menguji gateway ke domain apa saja.
sumber
SystemConfiguration.framework
ke proyek juga (untuk metode 1).Saya suka menjaga hal-hal sederhana. Cara saya melakukan ini adalah:
Lalu, saya menggunakan ini kapan pun saya ingin melihat apakah saya memiliki koneksi:
Metode ini tidak menunggu perubahan status jaringan untuk melakukan hal-hal. Itu hanya menguji status ketika Anda memintanya.
sumber
Menggunakan kode Reachability Apple, saya membuat fungsi yang akan memeriksa ini dengan benar tanpa Anda harus menyertakan kelas apa pun.
Sertakan SystemConfiguration.framework dalam proyek Anda.
Buat impor:
Sekarang panggil saja fungsi ini:
Dan iOS 5 diuji untuk Anda.
sumber
Ini digunakan untuk menjadi jawaban yang benar, tetapi sekarang sudah usang karena Anda harus berlangganan notifikasi untuk dapat dijangkau. Metode ini memeriksa secara sinkron:
Anda dapat menggunakan kelas Reachability Apple. Ini juga akan memungkinkan Anda untuk memeriksa apakah Wi-Fi diaktifkan:
Kelas Reachability tidak dikirimkan bersama SDK, melainkan bagian dari aplikasi sampel Apple ini . Cukup unduh, dan salin Reachability.h / m ke proyek Anda. Anda juga harus menambahkan kerangka kerja SystemConfiguration ke proyek Anda.
sumber
Inilah jawaban yang sangat sederhana:
URL harus mengarah ke situs web yang sangat kecil. Saya menggunakan situs web seluler Google di sini, tetapi jika saya memiliki server web yang andal, saya akan mengunggah file kecil dengan hanya satu karakter di dalamnya untuk kecepatan maksimum.
Jika memeriksa apakah perangkat entah bagaimana terhubung ke Internet adalah segala sesuatu yang Anda ingin lakukan, saya pasti akan merekomendasikan menggunakan solusi sederhana ini. Jika Anda perlu tahu bagaimana pengguna terhubung, menggunakan Reachability adalah cara yang harus dilakukan.
Hati-hati: Ini secara singkat akan memblokir utas Anda saat memuat situs web. Dalam kasus saya, ini bukan masalah, tetapi Anda harus mempertimbangkan ini (memuji Brad karena menunjukkan ini).
sumber
Inilah cara saya melakukannya di aplikasi saya: Walaupun 200 kode respons status tidak menjamin apa pun, itu cukup stabil untuk saya. Ini tidak memerlukan pemuatan sebanyak jawaban NSData yang diposting di sini, karena saya hanya memeriksa respons HEAD.
Tukar Kode
Kode Objektif-C
sumber
Apple memasok kode sampel untuk memeriksa berbagai jenis ketersediaan jaringan. Atau ada contoh dalam buku masak pengembang iPhone.
Catatan: Silakan lihat komentar @ KHG pada jawaban ini mengenai penggunaan kode keterjangkauan Apple.
sumber
Anda dapat menggunakan
Reachability
dengan ( tersedia di sini ).sumber
Apple menyediakan contoh aplikasi yang melakukan hal ini:
Tingkat keterjangkauan
sumber
Hanya kelas Reachability yang diperbarui. Anda sekarang dapat menggunakan:
sumber
Versi tentang Reachability untuk iOS 5 adalah darkseed / Reachability.h . Itu bukan milikku! =)
sumber
Ada modernisasi Reachability menggunakan ARC dan GCD yang terlihat bagus di sini:
Tingkat keterjangkauan
sumber
Jika Anda menggunakan,
AFNetworking
Anda dapat menggunakan implementasinya sendiri untuk status jangkauan internet.Cara terbaik untuk digunakan
AFNetworking
adalah dengan subklasAFHTTPClient
kelas dan menggunakan kelas ini untuk melakukan koneksi jaringan Anda.Salah satu keuntungan menggunakan pendekatan ini adalah Anda dapat menggunakan
blocks
untuk mengatur perilaku yang diinginkan ketika status jangkauan dapat berubah. Andaikan saya membuat subclass singletonAFHTTPClient
(seperti yang dikatakan pada "Subclassing notes" pada dokumen AFNetworking ) bernamaBKHTTPClient
, saya akan melakukan sesuatu seperti:Anda juga dapat memeriksa koneksi Wi-Fi atau WLAN secara khusus menggunakan
AFNetworkReachabilityStatusReachableViaWWAN
danAFNetworkReachabilityStatusReachableViaWiFi
enum ( selengkapnya di sini ).sumber
Saya telah menggunakan kode dalam diskusi ini , dan sepertinya berfungsi dengan baik (baca keseluruhannya utasnya!).
Saya belum mengujinya secara mendalam dengan segala jenis koneksi yang mungkin (seperti Wi-Fi ad hoc).
sumber
Sangat sederhana .... Coba langkah-langkah ini:
Langkah 1: Tambahkan
SystemConfiguration
kerangka kerja ke dalam proyek Anda.Langkah 2: Impor kode berikut ke
header
file Anda .Langkah 3: Gunakan metode berikut
Tipe 1:
Tipe 2:
Impor header :
#import "Reachability.h"
Langkah 4: Cara menggunakan:
sumber
sumber
Atau gunakan kelas Reachability .
Ada dua cara untuk memeriksa ketersediaan Internet menggunakan iPhone SDK:
1. Periksa halaman Google dibuka atau tidak.
2. Kelas Jangkauan
Untuk informasi lebih lanjut, silakan merujuk ke Reachability (Pengembang Apple).
sumber
Gunakan http://huytd.github.io/datatify/ . Lebih mudah daripada menambahkan perpustakaan dan menulis kode sendiri.
sumber
Pertama : Tambahkan
CFNetwork.framework
kerangka kerjaKode :
ViewController.m
sumber
Pertama-tama unduh kelas reachability dan letakkan file reachability.h dan reachabilty.m di Xcode Anda .
Cara terbaik adalah membuat kelas Fungsi umum (NSObject) sehingga Anda dapat menggunakannya di kelas mana saja. Ini adalah dua metode untuk pemeriksaan jangkauan jangkauan koneksi jaringan:
Sekarang Anda dapat memeriksa koneksi jaringan di kelas mana pun dengan memanggil metode kelas ini.
sumber
Ada juga metode lain untuk memeriksa koneksi Internet menggunakan iPhone SDK.
Cobalah untuk menerapkan kode berikut untuk koneksi jaringan.
sumber
Saya menemukan itu sederhana dan mudah digunakan perpustakaan SimplePingHelper .
Kode contoh: chrishulbert / SimplePingHelper ( GitHub )
sumber
Unduh file Reachability, https://gist.github.com/darkseed/1182373
Dan tambahkan
CFNetwork.framework
dan 'SystemConfiguration.framework' dalam frameworkLakukan # impor "Reachability.h"
Pertama : Tambah
CFNetwork.framework
kerangka kerjaKode :
ViewController.m
sumber
Swift 3 / Swift 4
Anda harus terlebih dahulu mengimpor
Anda dapat memeriksa koneksi internet dengan metode berikut
sumber
Kelas Reachability OK untuk mengetahui apakah koneksi Internet tersedia untuk perangkat atau tidak ...
Tetapi dalam hal mengakses sumber daya intranet :
Ping server intranet dengan kelas reachability selalu mengembalikan true.
Jadi solusi cepat dalam skenario ini adalah membuat metode web yang disebut
pingme
bersama dengan metode web lainnya pada layanan. Thepingme
harus kembali sesuatu.Jadi saya menulis metode berikut pada fungsi-fungsi umum
Metode di atas sangat berguna bagi saya, jadi setiap kali saya mencoba mengirim beberapa data ke server, saya selalu memeriksa keterjangkauan sumber daya intranet saya menggunakan URLRequest timeout rendah ini.
sumber
Untuk melakukan ini sendiri sangat sederhana. Metode berikut akan berhasil. Pastikan untuk tidak mengizinkan protokol nama host seperti HTTP, HTTPS, dll. Diteruskan dengan namanya.
Cepat dan tidak menyakitkan.
sumber
Selain dapat dijangkau Anda juga dapat menggunakan perpustakaan pembantu Ping Sederhana . Ini berfungsi sangat bagus dan mudah diintegrasikan.
sumber
Saya pikir ini adalah jawaban terbaik.
"Ya" berarti terhubung. "Tidak" berarti terputus.
sumber
Impor
Reachable.h
kelas di AndaViewController
, dan gunakan kode berikut untuk memeriksa konektivitas :sumber
Langkah 3: Buat fungsi di bawah ini
Langkah 4: Panggil fungsi seperti di bawah ini:
sumber