Hyperconnectivity 是 Reachability 的现代替代品,完全使用 Swift 编写,并使用 Apple 的 Combine 框架。它提供了检测网络可达性、互联网连接以及 强制门户 存在的能力。它是 Connectivity 项目的分支,该项目提供类似的功能。要了解哪个更适合您,请查看下面的 Connectivity 与 Hyperconnectivity 对比 部分。
入门非常简单,只需按如下方式订阅提供的 publisher
cancellable = Hyperconnectivity.Publisher()
.receive(on: DispatchQueue.main)
.eraseToAnyPublisher()
.sink(receiveCompletion: { [weak self] _ in
self?.updateUIWhenComplete()
}, receiveValue: { [weak self] connectivityResult in
self?.updateUI(with: connectivityResult)
})
有关完整示例,请参阅示例应用程序中的示例 UIViewController
。
Hyperconnectivity 是 Connectivity 框架的分支,那么您为什么要选择 Hyperconnectivity 而不是 Connectivity 呢?
随着 iOS 14 即将到来,Hyperconnectivity 放弃了 Objective-C 互操作性和 Connectivity 提供的对旧版本 iOS 的支持,以便为那些只需要支持 iOS 13 及更高版本的应用程序提供更简洁、更优雅的 Swift 接口。
Connectivity 旨在为 Apple 的 Reachability 用户提供熟悉的 API,Reachability 是用 Obj-C 编写的,其设计深受该语言的影响。随着 Swift 语言的许多最新进展以及 iOS 12 和 13 中分别引入的 Network 和 Combine 框架,感觉有机会以牺牲 Obj-C 兼容性和对旧版本 iOS 的支持为代价,提供一个更“Swift 化”和更具反应性的接口。
下表将随着 Hyperconnectivity 未来版本的发布而更新,使该框架在功能上与 Connectivity 达到同等水平。
Hyperconnectivity 与 Cocoapods、Carthage 和 Swift Package Manager 兼容。有关安装说明,请查看下面的相关部分。
CocoaPods 是一个依赖管理器,它将依赖项集成到您的 Xcode 工作区中。要使用 Ruby gems 安装它,请运行
gem install cocoapods
要使用 Cocoapods 安装 Hyperconnectivity,只需将以下行添加到您的 Podfile 中
pod "Hyperconnectivity"
然后运行命令
pod install
有关更多信息,请参见此处。
Carthage 是一个依赖管理器,它生成一个二进制文件,用于手动集成到您的项目中。可以通过 Homebrew 使用以下命令安装它
brew update
brew install carthage
为了通过 Carthage 将 Hyperconnectivity 集成到您的项目中,请将以下行添加到您的项目的 Cartfile 中
github "rwbutler/Hyperconnectivity"
从 macOS 终端运行 carthage update --platform iOS
以构建框架,然后将 Hyperconnectivity.framework
拖到您的 Xcode 项目中。
有关更多信息,请参见此处。
Xcode 11 包括对 Swift Package Manager 的支持。为了在 Xcode 11 中将 Hyperconnectivity 添加到您的项目中,从 File
菜单中选择 Swift Packages
,然后选择 Add Package Dependency
。
对话框将请求软件包存储库 URL,即
https://github.com/rwbutler/hyperconnectivity
验证 URL 后,Xcode 将提示您选择是将特定分支、提交还是版本化版本拉取到您的项目中。
继续下一步,您将被要求选择要集成到目标中的软件包产品。将有一个名为 Hyperconnectivity
的软件包产品,应预先选择它。确保从对话框的最右侧列中选择您的主应用程序目标,然后单击“完成”以完成集成。
iOS 采用了一种名为无线互联网服务提供商漫游 (WISPr 2.0) 的协议,该协议由 无线宽带联盟 发布。该协议定义了智能客户端到接入网关接口,描述了如何使用 通用访问方法 对访问公共 IEEE 802.11 (Wi-Fi) 网络的用户进行身份验证,其中强制门户向用户呈现登录页面。
然后,用户必须通过 Web 浏览器注册或提供登录凭据,以便使用 RADIUS 或其他协议提供集中式身份验证、授权和计费 (AAA) 来获得网络访问权限。
为了检测到它已连接到具有强制门户的 Wi-Fi 网络,iOS 会联系 Apple 托管的多个端点 - 例如 https://www.apple.com/library/test/success.html。每个端点都托管一个小的 HTML 页面,格式如下
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>Success</TITLE>
</HEAD>
<BODY>
Success
</BODY>
</HTML>
如果在下载此小 HTML 页面时,iOS 发现它包含如上所示的单词 Success
,那么它就知道互联网连接可用。但是,如果强制门户呈现登录页面,则不会出现单词 Success
,iOS 将意识到网络连接已被强制门户劫持,并将呈现一个浏览器窗口,允许用户登录或注册。
Apple 托管了许多此类页面,这样,如果其中一个页面出现故障,则可以检查许多备用页面,以确定是否存在连接,或者我们的连接是否被强制门户阻止。不幸的是,iOS 没有向开发人员公开任何框架,使我们能够利用操作系统对强制门户的感知。
Hyperconnectivity 是一个开源框架,致力于复制 iOS 检测强制门户的方式。当 NWPathMonitor 检测到 Wi-Fi 或 WWAN 连接时,Hyperconnectivity 会联系多个端点,以确定是否存在真正的互联网连接,或者强制门户是否正在拦截连接。这种方法也可用于确定 iOS 设备是否连接到没有互联网接入的 Wi-Fi 路由器。
Hyperconnectivity 提供了一个 Combine Publisher,用于提供互联网连接状态更改的通知,因此,对于任何有使用 Combine publisher 先前经验的人来说,快速上手该框架应该很简单。
默认情况下,Hyperconnectivity 联系 iOS 已经使用的多个端点,但建议将这些端点替换为开发人员托管的端点,方法是设置 Hyperconnectivity.Configuration
对象的 connectivityURLs
属性。可以通过设置此对象的 successThreshold
属性进行进一步自定义,该属性确定为了得出存在连接的结论,联系的端点中必须成功检查的百分比。默认值指定联系的 URL 中必须有 50% 成功通过连接检查。
有关如何使用 Hyperconnectivity 的示例,请参阅 Example 目录中的示例应用程序。提供的示例 UIViewController
说明了如何使用 publisher 更新您的 UI。
不,Connectivity 和 Hyperconnectivity 在未来都将受到支持,每个框架的改进都将是共生的,从而导致另一个框架的改进。
请确保任何使用此框架的实现都持有对订阅 publisher 时返回的 AnyCancellable
对象的强引用。如果未保留此对象,则任何互联网连接检查都将过早取消。
在报告错误之前,请确保您已在物理设备上进行了测试,因为在模拟器上,网络适配器状态的更改无法由 iOS 框架正确报告,尤其是在从断开连接 -> 连接状态转换时。此行为在物理设备上可以正常工作。
Hyperconnectivity 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。
AnimatedGradientView |
---|
![]() |
Cheats | Connectivity | FeatureFlags | Hyperconnectivity | Skylark | TypographyKit | Updates |
---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
cdd
即可快速清除您的 DerivedData 目录。Config Validator | IPA Uploader | Palette |
---|---|---|
![]() |
![]() |
![]() |