Gostaria de verificar se tenho uma conexão com a Internet no iOS usando as bibliotecas Cocoa Touch ou no macOS usando as bibliotecas Cocoa .
Eu vim com uma maneira de fazer isso usando um NSURL
. A maneira como fiz isso parece um pouco confiável (porque até o Google poderia um dia ficar inoperante e confiar em terceiros parece ruim), e enquanto eu poderia verificar se há uma resposta de outros sites, se o Google não responder, parece um desperdício e uma sobrecarga desnecessária no meu aplicativo.
- (BOOL) connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
return ( URLString != NULL ) ? YES : NO;
}
O que fiz de ruim (sem mencionar que stringWithContentsOfURL
foi preterido no iOS 3.0 e no macOS 10.4) e, em caso afirmativo, qual é a melhor maneira de fazer isso?
ios
macos
cocoa
cocoa-touch
reachability
Brock Woolf
fonte
fonte
return (BOOL)URLString;
, ou melhor ainda,return !!URLString
oureturn URLString != nil
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://twitter.com/getibox"] encoding:NSUTF8StringEncoding error:nil];
Para se livrar do aviso irritante.Respostas:
Importante : Essa verificação sempre deve ser realizada de forma assíncrona. A maioria das respostas abaixo é síncrona, portanto, tenha cuidado, caso contrário, você congelará seu aplicativo.
Rápido
1) Instale via CocoaPods ou Carthage: https://github.com/ashleymills/Reachability.swift
2) Teste de acessibilidade via fechamentos
Objetivo-C
1) Adicione
SystemConfiguration
estrutura ao projeto, mas não se preocupe em incluí-la em qualquer lugar2) Adicione a versão
Reachability.h
eReachability.m
o projeto de Tony Million (encontrado aqui: https://github.com/tonymillion/Reachability )3) Atualize a seção da interface
4) Em seguida, implemente esse método no arquivo .m do seu controlador de exibição, que você pode chamar
Nota importante: A
Reachability
classe é uma das classes mais usadas em projetos, portanto, você pode encontrar conflitos de nomenclatura com outros projetos. Se isso acontecer, você precisará renomear um dos pares de arquivosReachability.h
eReachability.m
para outra coisa para resolver o problema.Nota: O domínio que você usa não importa. É apenas um teste para um gateway para qualquer domínio.
fonte
SystemConfiguration.framework
ao projeto (para o método 1).Eu gosto de manter as coisas simples. A maneira como faço isso é:
Então, eu uso isso sempre que quero ver se tenho uma conexão:
Este método não espera por status de rede alterado para fazer as coisas. Apenas testa o status quando você solicita.
fonte
Usando o código de acessibilidade da Apple, criei uma função que verificará isso corretamente sem que você precise incluir nenhuma classe.
Inclua o SystemConfiguration.framework no seu projeto.
Faça algumas importações:
Agora basta chamar esta função:
E o iOS 5 foi testado para você.
fonte
Essa costumava ser a resposta correta, mas agora está desatualizada, pois você deve assinar as notificações de acessibilidade. Este método verifica de forma síncrona:
Você pode usar a classe de acessibilidade da Apple. Também permitirá que você verifique se o Wi-Fi está ativado:
A classe de alcançabilidade não é fornecida com o SDK, mas faz parte desse aplicativo de amostra da Apple . Basta fazer o download e copiar Reachability.h / m no seu projeto. Além disso, você precisa adicionar a estrutura SystemConfiguration ao seu projeto.
fonte
Aqui está uma resposta muito simples:
O URL deve apontar para um site extremamente pequeno. Eu uso o site para celular do Google aqui, mas se eu tivesse um servidor da Web confiável, faria o upload de um arquivo pequeno com apenas um caractere para obter a velocidade máxima.
Se verificar se o dispositivo está de alguma forma ligado à Internet é tudo o que você quer fazer, eu definitivamente recomendo usar esta solução simples. Se você precisar saber como o usuário está conectado, usar a Acessibilidade é o caminho a percorrer.
Cuidado: Isso bloqueará brevemente seu tópico enquanto ele carrega o site. No meu caso, isso não foi um problema, mas você deve considerar isso (créditos ao Brad por apontar isso).
fonte
Aqui está como eu faço isso nos meus aplicativos: Embora um código de resposta de status 200 não garanta nada, ele é estável o suficiente para mim. Isso não exige tanto carregamento quanto as respostas do NSData postadas aqui, pois o meu apenas verifica a resposta HEAD.
Código Swift
Código Objective-C
fonte
A Apple fornece um código de amostra para verificar os diferentes tipos de disponibilidade da rede. Como alternativa, há um exemplo no livro de receitas dos desenvolvedores do iPhone.
Nota: Consulte o comentário do @ KHG sobre esta resposta sobre o uso do código de acessibilidade da Apple.
fonte
Você pode usar
Reachability
por ( disponível aqui ).fonte
A Apple fornece um aplicativo de exemplo que faz exatamente isso:
Acessibilidade
fonte
Somente a classe de alcançabilidade foi atualizada. Agora você pode usar:
fonte
Uma versão do alcançável para iOS 5 é darkseed / Reachability.h . Não é meu! =)
fonte
Há uma modernização de acessibilidade de boa aparência, usando ARC e GCD aqui:
Acessibilidade
fonte
Se você estiver usando,
AFNetworking
poderá usar sua própria implementação para o status de acessibilidade da Internet.A melhor maneira de usar
AFNetworking
é subclassificar oAFHTTPClient
classe e usá-la para fazer suas conexões de rede.Uma das vantagens de usar essa abordagem é que você pode usar
blocks
para definir o comportamento desejado quando o status de alcançabilidade for alterado. Supondo que eu criei uma subclasse singleton deAFHTTPClient
(como dito nas "Notas de subclassificação" nos documentos da AFNetworking ) denominadaBKHTTPClient
, eu faria algo como:Você também pode verificar se há conexões Wi-Fi ou WLAN usando especificamente as enumerações
AFNetworkReachabilityStatusReachableViaWWAN
eAFNetworkReachabilityStatusReachableViaWiFi
( mais aqui ).fonte
Eu usei o código nesta discussão e parece funcionar bem (leia toda a tópico!).
Não testei exaustivamente com todos os tipos de conexão possíveis (como Wi-Fi ad hoc).
fonte
Muito simples .... Tente estas etapas:
Etapa 1: adicione a
SystemConfiguration
estrutura ao seu projeto.Etapa 2: importe o seguinte código no seu
header
arquivo.Etapa 3: Use o seguinte método
Tipo 1:
Tipo 2:
Cabeçalho de importação :
#import "Reachability.h"
Etapa 4: Como usar:
fonte
fonte
Ou use a classe de alcançabilidade .
Há duas maneiras de verificar a disponibilidade da Internet usando o iPhone SDK:
1. Verifique se a página do Google está aberta ou não.
2. Classe de acessibilidade
Para mais informações, consulte Acessibilidade (Apple Developer).
fonte
Use http://huytd.github.io/datatify/ . É mais fácil do que adicionar bibliotecas e escrever código sozinho.
fonte
Primeiro : adicionar
CFNetwork.framework
na estruturaCódigo :
ViewController.m
fonte
Primeiro, baixe a classe de acessibilidade e coloque o arquivo reachability.he reachabilty.m no seu Xcode .
A melhor maneira é criar uma classe de funções comum (NSObject) para que você possa usá-la em qualquer classe. Estes são dois métodos para uma verificação de acessibilidade da conexão de rede:
Agora você pode verificar a conexão de rede em qualquer classe chamando esse método de classe.
fonte
Há também outro método para verificar a conexão com a Internet usando o iPhone SDK.
Tente implementar o seguinte código para a conexão de rede.
fonte
Achei simples e fácil de usar a biblioteca SimplePingHelper .
Código de exemplo: chrishulbert / SimplePingHelper ( GitHub )
fonte
Faça o download do arquivo de acessibilidade, https://gist.github.com/darkseed/1182373
E adicione
CFNetwork.framework
e 'SystemConfiguration.framework' na estruturaImporte #import "Reachability.h"
Primeiro : adicionar
CFNetwork.framework
na estruturaCódigo :
ViewController.m
fonte
Swift 3 / Swift 4
Você deve primeiro importar
Você pode verificar a conexão à Internet com o seguinte método
fonte
A classe Acessibilidade é OK para descobrir se a conexão com a Internet está disponível para um dispositivo ou não ...
Mas no caso de acessar um recurso da intranet :
Efetuar ping no servidor da intranet com a classe de alcançabilidade sempre retorna true.
Portanto, uma solução rápida nesse cenário seria criar um método da web chamado
pingme
junto com outros métodos da web no serviço. Opingme
deve retornar algo.Então, eu escrevi o seguinte método em funções comuns
O método acima foi muito útil para mim; portanto, sempre que tento enviar alguns dados para o servidor, sempre verifico a acessibilidade do meu recurso da intranet usando este URLRequest de tempo limite baixo.
fonte
Fazer isso sozinho é extremamente simples. O método a seguir irá funcionar. Apenas certifique-se de não permitir que um protocolo de nome de host como HTTP, HTTPS etc. seja passado com o nome.
É rápido, simples e indolor.
fonte
Além da acessibilidade, você também pode usar a biblioteca auxiliar Simple Ping . Funciona muito bem e é simples de integrar.
fonte
Eu acho que essa é a melhor resposta.
"Sim" significa conectado. "Não" significa desconectado.
fonte
Importe a
Reachable.h
classe no seuViewController
e use o seguinte código para verificar a conectividade :fonte
Etapa 3: Crie a função abaixo
Etapa 4: chame a função como abaixo:
fonte