RealReachability 1.4.1

RealReachability 1.4.1

Tests测试
Lang语言 Obj-CObjective C
许可证 MIT
Released最后发布2021年6月

dustturtle维护。



  • GuanZhenwei

RealReachability

Version License Platform Platform

我们需要观察 iOS 网络的实际可达性,这正是 RealReachability 所做的。

为什么需要 RealReachability?

正如我们所知,我们已经有可到达性框架可供选择。例如著名的库 Reachability

但我们真正需要一个获取可达性的工具,而不仅仅是本地连接!

Apple 文档告诉我们有关 SCNetworkReachability API 的内容:“请注意,可达性不保证数据包将实际由宿主接收。”

我们所知的“可达性”只能告诉我们本地连接状态。我们目前所知道的所有工具都由 SCNetworkReachability API 支持。

现在,RealReachability 可以为您做这件事~

我们引入了 ping 模块来检查实际网络状态,并结合 SCNetworkReachability API。我们使用有限状态机 (FSM) 来控制所有网络状态,以确保只有状态改变会被发送到应用程序。

享受它!

使用Cocoapods快速入门

CocoaPods是一个用于Objective-C的依赖管理器,它自动简化了在项目中使用第三方库(如RealReachability)的过程。您可以使用以下命令安装它:

$ gem install cocoapods

Podfile

要在Xcode项目中使用Cocoapods将RealReachability集成,请在您的Podfile中指定它。

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

pod 'RealReachability'

然后,运行以下命令:

$ pod install

使用Carthage安装

Carthage是一个去中心化的依赖管理器,它会构建您的依赖并提供二进制框架。

您可以使用以下命令通过Homebrew安装Carthage:

$ brew update
$ brew install carthage

在您的Cartfile中添加RealReachability

github "dustturtle/RealReachability"

手动启动

如果您愿意手动处理所有事情,只需将“RealReachability”文件夹添加到您的项目中,然后所有文件将被添加到您的项目中。

依赖关系

  • 支持ARC、自动合成和兼容库的Xcode 5.0+。iOS 6.0+。
  • 应将SystemConfiguration Framework添加到您的项目中。

用法

开始通知(我们建议你在didFinishLaunchingWithOptions中开始通知)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [GLobalRealReachability startNotifier];
    return YES;
}

添加观察者(在任何你想要的地方添加观察者)

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(networkChanged:)
                                             name:kRealReachabilityChangedNotification
                                           object:nil];

像下面的示例观察者方法

- (void)networkChanged:(NSNotification *)notification
{
    RealReachability *reachability = (RealReachability *)notification.object;
    ReachabilityStatus status = [reachability currentReachabilityStatus];
    NSLog(@"currentStatus:%@",@(status));
}

像下面这样触发实时可达性

[GLobalRealReachability reachabilityWithBlock:^(ReachabilityStatus status) {
        switch (status)
        {
            case RealStatusNotReachable:
            {
            //  case NotReachable handler
                break;
            }
                
            case RealStatusViaWiFi:
            {
            //  case WiFi handler
                break;
            }
                
            case RealStatusViaWWAN:
            {
            //  case WWAN handler
                break;
            }
                
            default:
                break;
        }
    }];

查询当前状态

ReachabilityStatus status = [reachability currentReachabilityStatus];

一旦调用reachabilityWithBlock,"currentReachabilityStatus"将同步更新。

为Ping设置自己的主机(可选)

注意,我们现在新引入了“双重检查”功能,以提高在1.2.0版本中的状态可靠性!

请确保您在此设置的宿主可以进行ping操作。建议使用大而稳定的网站。
此步骤是可选的。如果您不设置,我们默认的宿主是:www.apple.com
您可以在任何时候设置自己的宿主机。代码如下

GLobalRealReachability.hostForPing = @"www.apple.com";
GLobalRealReachability.hostForCheck = @"www.youOwnHostExample.com";

我们建议您使用两个宿主机:一个您自己的(如果您有一个可ping的可用),一个公有的;就像下面的例子。

关于“双重检查”功能的更多详细信息,您可以深入查看代码。

获取当前WWAN类型(可选)

 WWANAccessType accessType = [GLobalRealReachability currentWWANtype];

当前WWAN类型可能会用来改进您的应用用户体验(例如,为不同的WWAN类型设置不同的网络请求超时时间)。

检查您的网络VPN状态

- (BOOL)isVPNOn;

借助这种方法,我们改进了使用VPN时的可达性检查逻辑。

更多

我们还可以单独使用PingHelper或LocalConnection进行ping操作或仅观察本地连接。
Pod使用情况如下(我们有两个pod subspecs)

pod 'RealReachability/Ping'
pod 'RealReachability/Connection'

这是我们需要调用的唯一API关于Ping

- (void)pingWithBlock:(void (^)(BOOL isSuccess))completion;

关于ping使用的更多信息,请查看PingHelper.h示例项目中的代码。

LocalConnection模块与Reachability非常相似.
关于其使用的更多信息,请查看示例项目中的LocalConnection.h或相关代码。

示例

我们已经在仓库中放置了示例项目。

许可证

RealReachability采用MIT许可证发布。有关详情,请参阅LICENSE。

最后...

请使用并改进!欢迎提交补丁或创建问题。

如果您愿意的话,可以发送消息告知我在哪些应用中使用它!谢谢!

中文版使用指南