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 成为侦听器的主要内容,如果未能解决你的问题,请参考以下文章
开发 iPhone/iPad 应用程序时要考虑的 iOS 版本