应用程序在后台运行的多设备连接

我想连接2个设备使用multipeer连接框架,其中一个设备是在后台运行的应用程序,就像Firechat一样(我不能确认这是工作,我已经安装在iPhone 5S和4,但他们只是找不到对方 – 但我已经读过这个作品)。

什么是达到这个目的的最好方法?

我从示例代码中使用以下两个方法:

-(void)setupPeerAndSessionWithDisplayName:(NSString *)displayName{ _peerID = [[MCPeerID alloc] initWithDisplayName:displayName]; _session = [[MCSession alloc] initWithPeer:_peerID]; _session.delegate = self; } -(void)setupMCBrowser{ _browser = [[MCBrowserViewController alloc] initWithServiceType:@"chat-files" session:_session]; } -(void)advertiseSelf:(BOOL)shouldAdvertise{ if (shouldAdvertise) { _advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:@"chat-files" discoveryInfo:nil session:_session]; [_advertiser start]; } else{ [_advertiser stop]; _advertiser = nil; } } 

当我在前台运行应用程序时,会发现其他设备完美无缺,并且连接。 但是,如果我将其中一个应用程序置于后台,background-app-device将不再可见。

我已经阅读了这个: 我可以在后台运行多路连接会话吗? – 但我不能相信这是不可能的,没有任何解决方法。

仅供参考,我的应用程序也使用后台位置更新,如果这是相关的…

谢谢!

编辑:有没有其他方式做这个? 基本上我只是想发送一个消息到其他设备(对谁的应用程序在后台运行) – 由于Multipeer连接不能在后台工作,我可以直接通过蓝牙连接例如?

苹果已经确认“Multipeer连接不在后台运行”。 原因是,如果你的应用程序被挂起,那么它的套接字资源可以被回收,并且一切都会崩溃。

但是,可以在后台监视iBeacon。 本质上,你设置你的应用程序来监视与特定ID的信标的接近度。 然后,你的应用程序在前台成为具有相同ID的灯塔。 这会导致在后台应用程序上调用以下应用程序委托方法:

 - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region { UILocalNotification *notification = [[UILocalNotification alloc] init]; if(state == CLRegionStateInside) { notification.alertBody = NSLocalizedString(@"A nearby app would like to connect", @""); } else { return; } [[UIApplication sharedApplication] presentLocalNotificationNow:notification]; } 

在这里,您可以发出本地通知,当用户点击该通知时,会将您的应用程序置于前台,此时您可以开始通过点对点连接进行宣传。