RealReachability
我们需要观察 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。
最后...
请使用并改进!欢迎提交补丁或创建问题。
如果您愿意的话,可以发送消息告知我在哪些应用中使用它!谢谢!