标签: reachability

如何通过Reachability检测网络变化?

我正在检查网络连接viewDidLoad使用它:

-(BOOL)reachable {
    ReachabilityDRC *r = [ReachabilityDRC reachabilityWithHostName:@"google.com"];
    NetworkStatus internetStatus = [r currentReachabilityStatus];
    if(internetStatus == NotReachable) {
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

但是我也希望在网络发生变化时收到通知,例如wifi掉线或wifi恢复,所以我可以相应地进行更改.

如何调整我的方法来做那样的事情?

iphone cocoa-touch objective-c reachability

8
推荐指数
2
解决办法
7497
查看次数

即使我的应用未运行,也可确保在网络重新连接后上传内容

我正在指定一个iOS应用程序(将在我们公司之外构建),它将用户的数据条目上传到服务器.如果设备未连接到Internet,我们希望在设备上保存数据并在重新连接网络时上传数据.(该应用程序将主要在大多数时间将断开连接的iPod Touch设备上运行).

如果用户在重新连接网络后解锁设备并重新打开我们的应用程序,那么上传到服务器应该很容易,因为应用程序正在运行.

但是,如果应用程序没有运行,"未运行"可能意味着以下一个或多个:

  • 设备重启电源
  • 用户已锁定设备并将其放在口袋中
  • 应用程序崩溃了
  • 用户退出了应用程序
  • 用户开始使用其他应用程序,因此我们的应用程序不再在前台运行
  • 还有其他情况吗?

在上述情况下,有没有办法(理想情况下是节省电池的方式)确保在恢复互联网连接后很快上传本地数据?答案是否有所不同取决于上述哪些案例导致应用程序无法运行?

是否有设备所需的最低iOS版本,以便在应用程序未运行时仍能上传部分(或全部)上述未运行的案例?

如果这些是明显的新手问题我很抱歉 - 我不是iOS专家.

multitasking reachability ios

8
推荐指数
2
解决办法
839
查看次数

如何在wifi源丢失连接时检测到网络可达性的丢失?

我正在努力获得真实的互联网连接状态.我已经使用了Apple的Reachability但它只给了我wifi连接的状态,即没有覆盖设备通过wifi连接(到路由器或热点)的情况,但wifi路由器或热点本身没有连接到互联网.通过从wifi路由器拉入互联网输入电缆可以重现这种情况.ReachableViaWiFi两个reachabilityForInternetConnection和的可达性通知程序返回ReachabilityWithHostName.我对这个问题非常感兴趣.我通过它尝试了它,NSURLConnection但是电池耗尽过多而且个人我不喜欢那种继续发出URL请求的解决方案,尽管在后台线程中.

这是我正在使用的代码(由SO老师提供,但不记得确切的链接)

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];

    internetReachable = [[Reachability reachabilityForInternetConnection] retain];
    [internetReachable startNotifier];

    // check if a pathway to a random host exists
    hostReachable = [[Reachability reachabilityWithHostName: @"www.google.com"] retain];
    [hostReachable startNotifier];
Run Code Online (Sandbox Code Playgroud)

然后在观察者方法中:

 - (void) checkNetworkStatus:(NSNotification *)notice{

    // called after network status changes

    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
    switch (internetStatus)

    {
        case NotReachable:
        {
            NSLog(@"The internet is down.");
            self.isInternetReachable = NO;

            break;

        }
        case ReachableViaWiFi:
        {
            NSLog(@"The internet is working via …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c reachability ios

8
推荐指数
1
解决办法
7210
查看次数

使用网络链路调节器测试可达性100%丢包:帮助我了解发生了什么

帮助我理解使用网络链接调节器测试可达性代码时所看到的内容.这是我的香草可达性代码:

Reachability* wifiReach = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];

switch (netStatus)
{
    case NotReachable:
    {
        NSLog(@"Access Not Available");
        break;
    }

    case ReachableViaWWAN:
    {
        NSLog(@"Reachable WWAN");
        break;
    }
    case ReachableViaWiFi:
    {
        NSLog(@"Reachable WiFi");
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我使用网络链接调节器使用"100%损失"预设测试此代码时 - 值netStatusis ReachableViaWWAN,这是我没想到的.我读了很多关于Reachability没有真正测试连接性的投诉,而是测试了连接的可能性.所以这是我的问题:

"100%丢失"预设是否允许向Apple服务器发出DNS请求,但不允许任何数据包通过?

networking cocoa reachability

8
推荐指数
1
解决办法
1060
查看次数

在iOS中检查Internet连接的最佳方法

我一直在通过互联网搜索,以找到在iOS中检查互联网连接的最佳方法,该方法适用于IPv4和IPv6网络环境.我发现有很多可能的答案,但很难混淆哪一个适用.我需要做的是以下内容:

   // Check for internet connection

if (internetConnectionIsAvailable) {
   // make rest calls
}else
   // show cached data
}
Run Code Online (Sandbox Code Playgroud)

我在互联网上找到了以下选项.

选项1: 使用apple Reachability类

有了Reachability我可以检查互联网连接如下,这是短而直接的,不必等待任何响应.

 - (BOOL)connected
    {
        Reachability *reachability = [Reachability reachabilityForInternetConnection];
        NetworkStatus networkStatus = [reachability currentReachabilityStatus];
        return !(networkStatus == NotReachable);
    }

- (void)viewDidLoad {
    [super viewDidLoad];

    if (![self connected]){
     // Not connected
    }else{
    // Connected
    }

}
Run Code Online (Sandbox Code Playgroud)

但是这里互联网检查是在飞行前完成的,这违反了WWDC视频上看到的苹果工程师的建议.此外,如果您检查ReadMe.md,则提到Reachability完全支持IPv6.但是如果在Reachability.m中检查了方法reachabilityForInternetConnection,则他们使用了sockaddr_in,但是没有使用sockaddr_in6,这是推荐用于IPv6网络的.所以我不知道它是否适用于IPv6网络.

选项2:使用Alamofire进行连接

xcode internet-connection reachability ios swift

8
推荐指数
2
解决办法
2万
查看次数

Swift 3:检查Internet(Reocurring)viewDidAppear not

好吧,所以我对Swift很新,我对我要做的事情有点困惑,或者我是否朝着错误的方向前进.(https://github.com/ashleymills/Reachability.swift)

这是我的viewDidLoad方法:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    checkConnection()

}
Run Code Online (Sandbox Code Playgroud)

然后,我从Reachability GitHub项目中获得了一个带有代码的函数:

func checkConnection() {
    //declare this property where it won't go out of scope relative to your listener
    let reachability = Reachability()!

    reachability.whenReachable = { reachability in
        // this is called on a background thread, but UI updates must
        // be on the main thread, like this:
        DispatchQueue.main.async {
            if reachability.isReachableViaWiFi {
                print("Reachable …
Run Code Online (Sandbox Code Playgroud)

reachability ios swift reachability-swift

8
推荐指数
1
解决办法
803
查看次数

无网络情况后,可达性导致崩溃 - 如何异步正确使用可达性

我的iPhone应用程序正在开发中遇到一个非常奇怪的崩溃.似乎每当我向朋友展示我的应用程序时它都会崩溃,但是否则它永远不会崩溃.在被墨菲的法律方面普遍迷惑之后,我已经确定了崩溃的模式 - 纽约市地铁.我使用地铁后,我的应用程序一直崩溃.我已将这个问题追溯到我的使用Reachability.应用程序在无网络情况(不包括飞行模式)下使用后,下次崩溃.Reachability在执行任何其他网络操作之前​​,我遵循Apple的指导原则并检查连接,但我发现了一些有关如何调用它的相互矛盾的文档.

目前我正在做这样的事情:

-(BOOL)reachable {
    Reachability *r = [Reachability reachabilityWithHostName:@"www.stackoverflow.com"];
    NetworkStatus internetStatus = [r currentReachabilityStatus];
    if(internetStatus == NotReachable) {
        return NO;
    }
    return YES;
Run Code Online (Sandbox Code Playgroud)

}

我正在调用与viewDidAppear调用的方法同步.

    if ([self reachable]== YES) {
        ... do network stuff ...
Run Code Online (Sandbox Code Playgroud)

它基于iOS 4 Reachability Guide的代码

我的问题:是否正确使用Reachability它将处理此错误并处理缺少3G或Wifi网络?我是否需要生成另一个线程或执行某些操作来删除同步调用?

顺便说一句,这是我在应用程序崩溃时看到的崩溃日志,这让我认为这是一个同步/异步问题.


Application Specific Information:
(app name) failed to resume in time

Elapsed total CPU time (seconds): 3.280 (user 1.770, system 1.510), 33% CPU 
Elapsed application CPU time (seconds): 0.040, 0% …

iphone reachability

7
推荐指数
2
解决办法
3552
查看次数

无法使用Reachability reachabilityForInternetConnection检测Internet连接

我有个问题.我正在使用可达性的reachabilityForInternetConnection方法来检测互联网可用性,但我没有获得连接状态而不是互联网状态.我的意思是,如果我打开我的Wifi连接,该方法给了我正确的指示,我没有连接但是如果wifi打开并且互联网连接不起作用,它似乎不起作用.任何的想法?

最好的祝福

connection objective-c reachability ios

7
推荐指数
1
解决办法
5069
查看次数

Reachability Class无法正常用于VPN连接

我正在开发一个需要VPN连接进行数据同步的应用程序.我正在使用可达性类来检查主机可用性.
@Functionality: - 当应用程序通过Junos Pulse应用程序连接到VPN时,如果VPN连接丢失,应继续进行数据同步,它应该抛出Alert消息.现在它正在为下面给出的场景工作.
@Working场景: - VPN最初连接,我完成了同步,然后从Junos Pulse手动断开了VPN.现在我想再次同步,它正在投掷预期的警报.
@Problem Scenarion: - 我最初完成了同步并让应用程序空闲以自动断开VPN连接.现在VPN消失之后我又想再次同步.它没有通过VPN不在那里的警报.它会尝试同步功能并因为没有VPN而无法访问服务器而失败.

通过在互联网上搜索它的解决方案我很累.我在这里粘贴我的代码片段.任何建议都非常感谢.

-(BOOL)checkHostAvailability
{   
Reachability *objReach = [Reachability reachabilityWithHostName:[self hostServer]];
NetworkStatus hostAvailability = [objReach currentReachabilityStatus];
if(hostAvailability == ReachableViaWiFi || hostAvailability == ReachableViaWWAN) {
    RLog(@"Host is Reachable");
    return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)

vpn reachability ios

7
推荐指数
1
解决办法
1105
查看次数

Swift,检查特定网站是否可访问

如何检查特定网站的可达性?

我连接到wifi网络上网,这已经阻止了一些网站.如何检查我是否可以访问这些网站?

我已经检查了Reachability类,但我无法检查特定的网站.

目前我正在使用Reachability.swift

reachability ios swift

7
推荐指数
2
解决办法
2157
查看次数