Я хотел бы проверить, есть ли у меня подключение к Интернету на iOS с использованием библиотек Cocoa Touch или на macOS с использованием библиотек Cocoa .
Я придумал способ сделать это, используя NSURL
. То, как я это сделал, кажется немного ненадежным (потому что даже когда-нибудь даже Google может не работать, а полагаться на третье лицо кажется плохим), и хотя я мог проверить, есть ли ответ от других сайтов, если Google не отвечает, действительно кажется расточительным и ненужными накладными расходами на моем приложении.
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
Это то, что я сделал плохо (не говоря stringWithContentsOfURL
уже об устаревшем в iOS 3.0 и macOS 10.4), и если так, какой лучший способ сделать это?
ios
macos
cocoa
cocoa-touch
reachability
Брок Вульф
источник
источник
return (BOOL)URLString;
или даже лучше,return !!URLString
илиreturn URLString != nil
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://twitter.com/getibox"] encoding:NSUTF8StringEncoding error:nil];
чтобы избавиться от раздражающего предупреждения.Ответы:
Важно : эта проверка всегда должна выполняться асинхронно. Большинство ответов ниже являются синхронными, поэтому будьте осторожны, иначе вы заморозите свое приложение.
стриж
1) Установите через CocoaPods или Карфаген: https://github.com/ashleymills/Reachability.swift
2) Тест достижимости с помощью замыканий
Objective-C
1) Добавьте
SystemConfiguration
фреймворк в проект, но не беспокойтесь о его включении2) Добавить версию Tony Million
Reachability.h
иReachability.m
в проект (можно найти здесь: https://github.com/tonymillion/Reachability )3) Обновление раздела интерфейса
4) Затем внедрите этот метод в файл .m вашего контроллера представления, который вы можете вызвать
Важное примечание:
Reachability
класс является одним из наиболее часто используемых классов в проектах , так что вы можете столкнуться конфликты имен с другими проектами. Если это произойдет, вам придется переименовать одну из парReachability.h
иReachability.m
файлов во что-то другое, чтобы решить проблему.Примечание: домен, который вы используете, не имеет значения. Это просто тестирование шлюза в любой домен.
источник
SystemConfiguration.framework
в проект (для метода 1).Мне нравится, чтобы все было просто. Я делаю это так:
Затем я использую это всякий раз, когда я хочу увидеть, есть ли у меня соединение:
Этот метод не ждет изменения состояния сети, чтобы что-то делать. Он просто проверяет состояние, когда вы просите его.
источник
Используя код Apple Reachability, я создал функцию, которая будет проверять это правильно, без необходимости включать какие-либо классы.
Включите SystemConfiguration.framework в ваш проект.
Сделайте некоторые импортные:
Теперь просто вызовите эту функцию:
И это iOS 5 проверено для вас.
источник
Раньше это был правильный ответ, но теперь он устарел, так как вместо этого вы должны подписаться на уведомления о доступности. Этот метод проверяет синхронно:
Вы можете использовать класс доступности Apple. Это также позволит вам проверить, включен ли Wi-Fi:
Класс Reachability поставляется не с SDK, а является частью этого образца приложения Apple . Просто скачайте его и скопируйте Reachability.h / m в ваш проект. Кроме того, вы должны добавить инфраструктуру SystemConfiguration в ваш проект.
источник
Вот очень простой ответ:
URL должен указывать на очень маленький сайт. Я использую мобильный сайт Google здесь, но если бы у меня был надежный веб-сервер, я бы загрузил небольшой файл с одним символом для максимальной скорости.
Если проверки , является ли устройство каким - то образом подключено к Интернету все , что вы хотите сделать, я бы определенно рекомендую использовать это простое решение. Если вам нужно знать, как пользователь подключен, используйте Reachability.
Осторожно: это ненадолго заблокирует вашу ветку, пока он загружает сайт. В моем случае это не было проблемой, но вы должны рассмотреть это (благодарность Брэду за указание на это).
источник
Вот как я это делаю в своих приложениях: хотя код ответа 200 и ничего не гарантирует, он достаточно стабилен для меня. Это не требует такой большой загрузки, как ответы NSData, опубликованные здесь, так как мой просто проверяет ответ HEAD.
Swift Code
Код Objective-C
источник
Apple предоставляет пример кода для проверки доступности различных типов сети. В качестве альтернативы есть пример в поваренной книге разработчиков iPhone.
Примечание. См. Комментарий @ KHG к этому ответу относительно использования кода доступности Apple.
источник
Вы можете использовать
Reachability
( доступно здесь ).источник
Apple предоставляет пример приложения, которое делает именно это:
достижимость
источник
Только класс Reachability был обновлен. Теперь вы можете использовать:
источник
Версия для Reachability для iOS 5 - это darkseed / Reachability.h . Это не мое! знак равно
источник
Здесь есть привлекательная модернизация Reachability с использованием ARC и GCD:
достижимость
источник
Если вы используете,
AFNetworking
вы можете использовать его собственную реализацию для статуса доступности интернета.Лучший способ использовать
AFNetworking
это подклассAFHTTPClient
класса и использовать этот класс для сетевых подключений.Одним из преимуществ использования этого подхода является то, что вы можете использовать его
blocks
для установки желаемого поведения при изменении состояния достижимости. Предположим, что я создал одноэлементный подкласс сAFHTTPClient
именем (как сказано в «Примечаниях по подклассам» в документах AFNetworking )BKHTTPClient
, я бы сделал что-то вроде:Можно также проверить соединения Wi-Fi или WLAN с помощью специально
AFNetworkReachabilityStatusReachableViaWWAN
иAFNetworkReachabilityStatusReachableViaWiFi
перечислений ( подробнее здесь ).источник
Я использовал код в этом обсуждении , и он, кажется, работает нормально (прочитайте всю ветку!).
Я не проверял это исчерпывающе с каждым мыслимым типом соединения (например, Wi-Fi ad hoc).
источник
Очень просто .... Попробуйте эти шаги:
Шаг 1: Добавьте
SystemConfiguration
фреймворк в ваш проект.Шаг 2: импортируйте следующий код в ваш
header
файл.Шаг 3: Используйте следующий метод
Тип 1:
Тип 2:
Заголовок импорта :
#import "Reachability.h"
Шаг 4: Как использовать:
источник
источник
Или используйте класс Reachability .
Есть два способа проверить доступность Интернета с помощью iPhone SDK:
1. Убедитесь, что страница Google открыта или нет.
2. Класс достижимости
Для получения дополнительной информации, пожалуйста, обратитесь к Reachability (Apple Developer).
источник
Используйте http://huytd.github.io/datatify/ . Это проще, чем добавлять библиотеки и писать код самостоятельно.
источник
Первое : добавить
CFNetwork.framework
в рамкиКод :
ViewController.m
источник
Сначала загрузите класс досягаемости и поместите файл reachability.h и reachabilty.m в свой Xcode .
Лучший способ - создать общий класс функций (NSObject), чтобы вы могли использовать его в любом классе. Это два метода проверки доступности сетевого подключения:
Теперь вы можете проверить сетевое соединение в любом классе, вызвав этот метод класса.
источник
Существует также другой способ проверки интернет-соединения с помощью iPhone SDK.
Попробуйте реализовать следующий код для сетевого подключения.
источник
Я нашел это простым и удобным в использовании библиотекой SimplePingHelper .
Пример кода: chrishulbert / SimplePingHelper ( GitHub )
источник
Загрузите файл Reachability, https://gist.github.com/darkseed/1182373
И добавить
CFNetwork.framework
и 'SystemConfiguration.framework' в рамкахСделайте #import "Reachability.h"
Первое : добавить
CFNetwork.framework
в рамкиКод :
ViewController.m
источник
Свифт 3 / Свифт 4
Вы должны сначала импортировать
Вы можете проверить интернет-соединение следующим способом
источник
Класс Reachability в порядке, чтобы узнать, доступно ли подключение к Интернету для устройства или нет ...
Но в случае доступа к ресурсу интрасети :
Проверка связи с сервером интрасети с помощью класса достижимости всегда возвращает значение true.
Таким образом, быстрым решением в этом сценарии будет создание веб-метода, вызываемого
pingme
вместе с другими веб-методами в службе.pingme
Должен вернуть что - то.Поэтому я написал следующий метод для общих функций
Вышеуказанный метод был очень полезен для меня, поэтому всякий раз, когда я пытаюсь отправить некоторые данные на сервер, я всегда проверяю достижимость своего ресурса интрасети, используя этот URLRequest с малым временем ожидания.
источник
Сделать это самостоятельно очень просто. Следующий метод будет работать. Только убедитесь, что вы не разрешаете передавать имя хоста, такое как HTTP, HTTPS и т. Д.
Это быстро, просто и безболезненно.
источник
Помимо доступности вы можете также использовать вспомогательную библиотеку Simple Ping . Он работает действительно хорошо и прост в интеграции.
источник
Я думаю, что это лучший ответ.
«Да» означает «подключен». «Нет» означает «отключен».
источник
Импортируйте
Reachable.h
класс в свойViewController
и используйте следующий код для проверки подключения :источник
Шаг 3: Создайте функцию ниже
Шаг 4: Вызовите функцию, как показано ниже:
источник