iOS:如何开始开发 iPad 应用程序,例如一个 iPad 中的应用程序成为管理员,而同一应用程序的其他 iPad 成为侦听器

Posted

技术标签:

【中文标题】iOS:如何开始开发 iPad 应用程序,例如一个 iPad 中的应用程序成为管理员,而同一应用程序的其他 iPad 成为侦听器【英文标题】:iOS: How to start of development of iPad app like App in one iPad become admin and other iPad of same app become listner 【发布时间】:2013-12-20 08:50:43 【问题描述】:

我需要创建一个满足以下要求的 iPad 应用:

    假设有 4 台 iPad 安装了这个应用程序。

    现在其中一个 iPad 应用程序成为演示者,因此打开相同应用程序的其他 3 台 iPad 自动成为侦听器。

    现在,Presenter iPad 的用户将从应用程序的照片库中幻灯片图片。所以同一张图片应该会自动从听众所有 3 台 iPad 的应用照片库中幻灯片。

我搜索了很多,但我什至没有找到任何线索如何实现此功能。

我可以使用点对点网络来实现此功能吗?

请在以下主题上帮助我:

    是否有任何可用的外部框架可用于实现此功能。

    我应该使用哪个框架来启动这个应用程序。

    点对点框架能够实现此功能。

    我只想提示我如何启动这个应用程序?

提前致谢......

【问题讨论】:

【参考方案1】:

如果您愿意只支持 ios7,您可能需要研究 Multipeer Connectivity Framework (https://developer.apple.com/library/ios/documentation/MultipeerConnectivity/Reference/MultipeerConnectivityFramework/Introduction/Introduction.html)。

看来这将实现你所需要的一切:

A) 成为演示者 - 您可以使用 MCAdvertiserAssistant 将自己声明为演示者或 MCNearbyServiceAdvertiser,如下所示:

MCNearbyServiceAdvertiser *advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:@"myPeerID" discoveryInfo:nil serviceType:@"ServiceA"];
self.advertiser.delegate = self;

[self.advertiser startAdvertisingPeer];

peerID 定义了在潜在听众浏览演示者时将显示给他们的名称。

服务类型定义了您要宣传的服务。

B) 成为监听器 - 您可以使用 MCNearbyServiceBrowser 来使用委托方法进行浏览,或者如果您想要方便的预构建 UI,请使用 MCBrowserViewController,如下所示:

MCPeerID *peerID = [[MCPeerID alloc] initWithDisplayName:[[UIDevice currentDevice] name]];
self.session = [[MCSession alloc] initWithPeer:peerID securityIdentity:nil encryptionPreference:MCEncryptionNone];
self.session.delegate = self;

MCBrowserViewController *browserViewController = [[MCBrowserViewController alloc] initWithServiceType:@"ServiceA" session:self.session];
browserViewController.delegate = self;

[self presentViewController:browserViewController animated:YES completion:nil];

同样,peerID 是您尝试连接到演示者时显示的名称。

会话处理多个对等点之间的通信。我会让你进一步调查。

服务类型是你感兴趣的服务。所以当这个视图出现时,它会显示所有提供@"ServiceA"的广告商。幸运的是,您已经有一个演示者为这项服务做广告!所以它们应该出现在列表中,您可以选择它们来启动连接。此时演示者将收到一个传入的连接请求。

我认为最令人兴奋的是,Multipeer Connectivity Framework 将为您提供最好的自行连接方式,使用蓝牙、本地 WiFi 或点对点 Wifi,无论感觉如何。

所以现在你们都已连接,iPadA 已连接到 iPadB,是时候利用美妙的联合了....

C) 发送数据:从前面的步骤中,您将为演示者和观众提供一个 MCSession 实例。

要发送数据(可能引用当前显示的图像,或者您希望听众看到的实际图像),您可以通过会话实例执行此操作,如下所示:

[self.session sendData:data
toPeers:[self.session connectedPeers] withMode:MCSessionSendDataReliable
error:&error];

data 是您要发送的一些 NSdata。请注意,您还可以发送其他类型的数据,例如 URL 内容 (sendResourceAtURL:toPeer:withTimeout:completionHandler:) 或者您可以设置流 (startStreamWithName:toPeer:error:)

要接收数据,您可以使用 MCSessionDelegate 提供的委托方法,您可以在之前使用 MCSession 实例 (self.session.delegate = self;) 进行设置。

首先,您最感兴趣的委托方法是:

- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID

   //Do something with data (Present the defined image perhaps?)

之后,您可以研究 MCSession 预先提供的所有其他可爱的委托方法,用于错误处理等。

谢谢

TG

【讨论】:

【参考方案2】:

尝试查看 Bonjour 服务。我个人会向您推荐以下书籍: iOS 编程:大书呆子牧场指南

【讨论】:

以上是关于iOS:如何开始开发 iPad 应用程序,例如一个 iPad 中的应用程序成为管理员,而同一应用程序的其他 iPad 成为侦听器的主要内容,如果未能解决你的问题,请参考以下文章

重写IOS应用程序[关闭]

iOS 开发:如何构建复杂的结构化 iPad 应用程序?

开发 iPhone/iPad 应用程序时要考虑的 iOS 版本

以编程方式在 iPad 中截屏

如何支持适用于 iPhone、iPad 和 iPad Mini 的 iOS 应用程序

iPad 上的 iOS 4.2 中缺少图像