理解iOS7的Multipeer Connectivity框架 - 第1部分 已翻译 100%

戴仓薯 投递于 2014/03/22 13:17 (共 36 段, 翻译完成于 08-29)
阅读 16505
收藏 8
iOS
2
加载中

Multipeer Connectivity Framework 是iOS 7 推出的众多新框架的一种,它拓宽了操作系统中应用的范围。其目的是使开发者可以创建通过Wi-Fi或蓝牙在近距离建立连接的应用。是在近距离设备间建立互动,交换数据和其他资源的很好的简单工具。

继续我们的介绍,在看到例子之前我们有必要讨论一下Multipeer Connectivity Framework的细节部分使让我们对它更熟悉。首先,我们必须强调一下这种框架合作只适用于近距离的设备,意思是只能在同一个网络设备下进行(Wi-Fi或者蓝牙),也就是说不要期望在远距离的环境下工作。在多用户端连接下,一个设备可以和很多设备连接并且和其所有的同时进行互动。一个单一的设备就是一个端口。当两个端口连接起来后,就成了一个Multipeer Connectivity的会话, 这个会话负责管理所有端口间的互动和数据交换。在多个设备下,可以建立多个会话。

multipeer connectivity featured

k
翻译于 2014/03/26 15:13
2

在讨论建立连接之前,(需要连接的)设备们首先需要发现对方的存在。在应用中使用 Multipeer Connectivity,“发现”是第一个阶段。那么设备是如何发现彼此的呢?我们假设,现在有两个设备想要连接。那么至少要有一个设备作为浏览器(browser),用来搜寻其他设备;第二个设备必须是可发现的,它要声明它在这里,并且它想要与别的设备连接。换句话说,第二个设备需要宣传自己。一般来说,两个设备都要宣传自己,但至少要有一个能浏览其他设备,从而建立连接。

在浏览方面,Apple 提供了两种方法。第一种简单一些,是一个框架中直接嵌入的浏览器UI,被调用的时候就弹出一个浮层,上面列出所有可连接的设备。第二种为开发者提供了更强的灵活性,是一种完全用代码实现的方式,因此您可以根据应用需求来定制这个浏览器。本文是对这个框架的入门教程,因此接下来我们只用第一种方法。

戴仓薯
翻译于 2014/03/26 23:07
1

一旦发现了其他对等实体,查询广播实体的对等实体就会发送请求建立连接的信息。如果第二个对等实体(也就是广播实体)接收这条消息,那么就会建立一个会话,至此这两个对等实体就可以交换数据了。

接下来说说数据,多对等实体连接框架可以用来发送和接收三种类型的数据。这三种数据是:

  • 消息数据(包括文本、图像以及可以转换为NSData对象的任何其他数据)

  • 流数据

  • 资源数据

接下来更详细的讨论一下消息数据,传输这样的数据可以使用两种模式:可靠传输模式和不可靠传输模式。框架在使用可靠模式发送数据的时候,它一定会确保发送的任何数据都会到达接收者,而且是按照发送的顺序到达接收者的。不过,要完成可靠模式的数据传输就需要更多的时间。然而,使用不可靠模式发送数据几乎不花时间,发送也真的很快,不过它不能确保发送的所有数据都能到达另一端,当然,接收数据的顺序也不是按照发送顺序的。究竟哪一种模式是最优选择这一点是完全由每个应用的要求来确定的,因此开发者要决定使用哪种模式。

几点人
翻译于 2014/03/29 16:12
2

通常,多实体连接框架为高级语言开发者提供所需的类和库,因此不需要有任何C或者其他低级语言的编程经验。在这个框架下,你可以使用许多内置的功能,而不会为实现或者解决任何与网络相关的问题而困惑。在这篇编程指南里,我们不会耗费许多时间对这个框架做一些理论性的介绍,因此我们强烈建议你访问Apple文档,进行一些学习,当然,也可以看看苹果全球开发者大会(WWDC)2013的708号视频会话。特别要注意的是:要对多实体连接框架进行测试的话,你手头最少要有两台设备,或者一台设备和一个iPhone模拟器。

为了很容易地在实践中使用多实体连接功能以及搞清楚多实体连接框架是怎样进行设备通信的,请向下阅读!

几点人
翻译于 2014/03/29 16:32
2

示例应用概览

在这篇编程指南里,我们将创建一个应用样例,用以说明多实体连接框架最重要的部分。前面我已经提到使用这个框架可以交换三种类型的数据:消息数据、流数据和资源数据。在我们即将实现的示例应用里,我们将看到如何通过设备间发送NSData对象来发送消息数据,以及如何共享资源数据的,比如共享文件。不过,在我们创建示例应用之前,我们需要快速浏览一下示例应用究竟做了哪些事情。

我们将创建一个带有标签的应用, 总共带有三个标签。让我们从最后一个名称为我的连接的标签说起,我们将创建一个视图控制器,用它来管理对等实体(设备)名,正在广播的实体和这台设备上已经建立的所有连接(实际上是会话)。尤其要注意的是,我们使用了文本输入,这样可以为这台设备自定义一个名称,以便在其他对等实体上显示这台设备。再还有一个按钮,一旦轻击这个按钮就会显示默认的浏览器界面,同时控制开关用来打开或者关闭这台设备的广播功能。接下来是表视图,在这里列出了这台设备正在进行的所有连接。表视图下有一个或者多个按钮,通过这些按钮可以断开这个设备上的会话。下图显示了简要的视图控制器:

Multipeer Connectivity Demo App1

几点人
翻译于 2014/03/29 17:17
3

接下来介绍的另一个视图控制器是位于第一个标签下。这个视图控制器的名字为聊天窗口,用它来在设备间通过多实体连接框架发送文本消息。这个视图控制器由一个文本输入框、一个文本视图和两个按钮组成, 文本输入框用来书写消息,文本视图用来显示整个聊天内容,而两个按钮中一个用来发送消息,一个用来取消消息发送 。下面是这样一个视图控制器的屏幕截图:

Multipeer Connectivity Demo App2


最后介绍的这个视图控制器是位于第二个标签下的,名字为文件共享。这儿有一个表视图,它包含一些(样例)文件列表。当选中一行时,就会有显示这样的选项:动作选项和所有对等实体的名字。选择好对等实体后,就会直接把所选的文件发送给该对等实体。为了让这个视图更吸引用户并且更具有交互性,当设备接收一个文件的时候,在这个表视图的最后一行显示文件名、发送实体以及正在接收文件的进度。当这个设备发送一个文件的时候 ,这个文件名的右边将以发送百分比来显示发送的进度。下图是第二个标签下的视图控制器起始状态的截图:

Multipeer Connectivity Demo App3

几点人
翻译于 2014/03/29 18:02
1

我已经介绍了示例应用的所有视图控制器,特别注意的是我从第三个标签开始介绍 ,因为在这篇编程指南里,处于第三个标签下的视图控制器对我们来说最重要。通过对这个视图的了解,我们就能明白如何处理和管理发现过程和会话建立过程。

在我们结束简要地介绍示例应用之前,还有一些十分重要的事情必须提及一下。为了在该应用范围内使用多实体连接框架和避免重复编写同样的功能三次(每个视图控制器各一次),我们创建一个用于管理所有与这个框架相关的对象和任务的类。接着我们就可以在应用的委派类(AppDelegate)里初始化这个类对应的对象。另外,通过应用委派,我们就可以跨应用访问该对象了。毕竟与仅构建一次并把其当工具多次使用相比,对某个东西开发多次是一个非常糟糕的编程实践。

在我们浏览完这个应用之后,我们就要进行开发了,现在是时候进行这个应用的开发了 。如果你打算逐步构建这个应用,请你下载位于这篇编程指南末尾的两个样例文件。另外,为了便利起见,你可以下载整个示例应用,它包含了所有的代码。

几点人
翻译于 2014/03/29 18:31
1

演示应用创建

启动 Xcode 通过点击欢迎屏幕左侧相应的按钮创建一个新工程:

Xcode Welcome Dialog

在向导的第一步,在 iOS 大类下的 Application 类别中选择 Tabbed Application 选项。

Xcode New Project Template

点击 Next 按钮转入向导的下一步。在 Product Name 输入框中我命名这个应用的名称为 MCDemo,但你也可以命名为你喜欢的其它名称。 此外,确保在 Devices 的下拉菜单中选择 iPhone。其它保持原样,点击 Next 按钮前进。

Xcode Project Options

最后,为你的工程选择一个存储位置,点击 Create 按钮结束向导。现在工程已经准备好了。

赵亮-碧海情天
翻译于 2014/03/25 15:45
2

添加新Tab

就像前面提到的,这个应用里总共有三个tab,但默认创建的只有两个。所以,我们的第一个任务是添加一个新tab,然后把这个新tab连接上一个新类。除此之外,我们还要为所有tab设置标题和icon。

首先在项目里添加一个新的 UIViewController 类,用于连接我们一会儿将要添加的新tab。在项目导航(左边栏)中, 按着Ctrl点击或者右击 MCDemo 这个 group ,然后从弹出菜单中选择 New File…选项,如下图所示:

Multipeer Connectivity - Add New File

在左边的 iOS 一项下,要确定选的是 Cocoa Touch 分类。然后,选择 Objective-C class 图标,点击 Next 按钮继续。

Multipeer Connectivity - Add New File

在 Class 输入框,填写 ConnectionsViewController 。并且,要确保 Subclass of 这一栏选择的是 UIViewController 。不要勾选下面两个选项。点击 Next 进入下一步。

Multipeer Connectivity - Add New File

最后一步,点击 Create 按钮,就大功告成啦。现在,在左边栏的项目导航中应该可以看到 ConnectionsViewController.h 和 ConnectionsViewController.m 两个文件了。

Multipeer Connectivity - Add New File

现在点击 Main.storyboard ,让它打开 Interface Builder 。首先,添加一个新的 view controller ,,方法是把它从 Object Library 中拖出来放在 canvas 上,就放在 second view controller 的下面。

Multipeer Connectivity - Designing Interface

然后,一直按着键盘上的 Ctrl 键,点击 Tab Bar Controller ,然后一直按着鼠标左键,拖到我们刚添加的新 view controller 上。现在放开 Ctrl 键和鼠标左键了。会弹出一个黑色的窗口,其中的 Relationship Segue 部分你必须点击 view controllers 选项,这样这个新的 view controller 就会被加为 tab bar controller 的一个新 tab。

Multipeer Connectivity - Designing Interface

戴仓薯
翻译于 2014/04/02 09:55
2

tab bar controller 目前包含了3个 tab,并且连接上了我们新创建的 view。我们现在需要将新 view controller 的类设置为之前添加的 ConnectionsViewController 。为此,首先点击新 view controller,然后在 Utilities Pane (右边栏)中,打开 Identity Inspector (第3栏),之后在 Custom Class 部分将 ConnectionsViewController 填进 Class 对应的输入框。

Multipeer Connectivity - Set Class Name

最后,我们只需为 tab 们设置正确的标题。要设置一个 tab 的标题,需要首先在场景中(而不是 tab bar controller上)选中需要修改的 tab。然后,再回到 Utilities pane(右边栏),打开 Attributes Inspector(第4栏),然后在 Bar Title 部分将标题填入 Title 对应的输入框。

Multipeer Connectivity - Set Title

设置标题如下:

  • First View Controller: Chat Box

  • Second View Controller: File Sharing

  • Connections View Controller: My Connections

注意,教程中所有在 Interface Builder 进行的可视化配置都是针对 4 寸屏幕设备的,如 iPhone 5 或 5S。如果你想要让这个应用在较老的3.5寸设备上运行,只需变通一下,应用 Xcode 的推荐约束,然后就可以轻松运行了。

戴仓薯
翻译于 2014/04/02 13:24
2
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(5)

d
dadahua
源代码下不了啊,大哥
忠实诚信
忠实诚信
第一段:Its aim is to enable developers to create applications that will allow devices being in close distance to get connected, simply using Wi-Fi networks or Bluetooth. 应该翻译成 其目的是使开发者可以创建通过Wi-Fi或蓝牙在近距离建立连接的应用。
戴仓薯
戴仓薯

引用来自“周锟”的评论

感觉开头有一处是不是翻译有误。。。

第一段?
周锟
周锟

感觉开头有一处是不是翻译有误。。。

戴仓薯
戴仓薯
哇,好长……最近看过这个教程,有空慢慢译~~
返回顶部
顶部