iOS:如何在一个iPad中像App一样开发iPad应用程序成为pipe理员和同一个App的其他iPad成为Listner
我需要创build一个以下要求的iPad应用程序:
-
假设有4个iPad安装了这个应用程序。
-
现在,iPad应用程序之一成为演讲者,所以其他3个具有相同应用程序的iPad自动成为监听器。
-
现在,Presenter iPad的用户将从应用程序的照片库中滑动图片。 所以同样的图片应该会自动从听众所有3个iPad的应用程序照片库中滑出。
我search了很多,但我什至不知道如何实现这个function。
我可以使用点对点networking来实现这个function吗?
请帮助我下面的主题:
-
有没有我可以用来实现这个function的任何外部框架。
-
我应该使用哪个框架来启动这个应用程序。
-
点对点框架能够实现这一function。
-
我只想提示如何启动这个应用程序?
提前致谢……
如果您很高兴仅支持iOS7,则可能需要调查Multipeer连接框架( 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定义了当他们浏览演示者时将被呈现给潜在的监听者的名字。
服务types定义您正在广告的服务。
B)成为一个监听器 – 您可以使用MCNearbyServiceBrowser浏览使用委托方法,或者如果您想要一个方便的预buildUI使用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是您尝试连接到演示者时将显示的名称。
会话处理多个对等体之间的通信。 我会让你进一步调查。
服务types是您感兴趣的服务。因此,当呈现此视图时,将显示提供@“ServiceA”的所有广告商。 幸运的是,你已经有一个主持人广告这项服务! 所以他们应该出现在列表中,你可以select它们来启动一个连接。 此时,演示者将收到一个连接请求。
我认为超级性感的是,Multipeer连接框架将为您提供最好的连接方式,使用蓝牙,本地WiFi或Peer-toPeer Wifi,无论它是什么感觉都是最好的。
所以,现在你们都连接起来了,iPadA连接到iPadB,有时间利用这个神话般的联盟。
C)发送数据:从前面的步骤,你将有一个MCSession实例为演讲者和观众。
要发送数据(Maybe参考到当前显示的图像,或者您希望听众看到的实际图像),可以通过会话实例执行此操作,如下所示:
[self.session sendData:data toPeers:[self.session connectedPeers] withMode:MCSessionSendDataReliable error:&error];
数据是你想发送的一些NSdata。 请注意,您也可以发送其他types的数据,如URL内容(sendResourceAtURL:toPeer:withTimeout:completionHandler :)或者您可以设置一个stream(startStreamWithName:toPeer:错误:)
为了接收你使用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 previdederror handling等
谢谢
TG
试试看Bonjour的服务。 我个人会推荐你下面的书: iOS编程:大书呆子牧场指南