我想为我的应用使用Multipeer Connectivity功能。简要介绍应用程序的功能: 该应用程序应扫描运行该应用程序的其他设备(在后台),连接到它们并传输一些数据。所有这些都没有与用户互动。
问题:是否可以使用多重连接器连接到其他设备,但无需显示另一个设备想要连接的警报视图并强制用户接受或拒绝连接?有没有办法可以通过编程方式接受来自其他设备的所有传入连接?如果是这样,怎么样?
提前多多感谢!
答案 0 :(得分:8)
这里有两个问题:
该应用应扫描运行该应用的其他设备(在后台)
这里的答案是否定的 - MPC在后台不起作用(见this so response)
关于你的第二个问题:
是否可以使用multipeer连接到其他设备,但无需显示警报
答案是肯定的..您需要的所有细节都可以在苹果文档中找到。以下是我所做的一些片段:
在一台设备上 - 启动浏览器
_serviceBrowser = [[MCNearbyServiceBrowser alloc] initWithPeer:_peerID
serviceType:_sessionName];
[_serviceBrowser startBrowsingForPeers];
在另一台设备上 - 启动广告客户
_serviceAdvertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:_peerID
discoveryInfo:nil
serviceType:_sessionName];
[_serviceAdvertiser startAdvertisingPeer];
这些服务实现委托功能,以便为您的应用提供可能的连接建议。在这里,浏览器被告知广告商,现在邀请对等方加入会话
- (void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info
{
[browser invitePeer:peerID toSession:_session withContext:nil timeout:30.0];
}
广告客户随后回复
- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer: (MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void(^)(BOOL accept, MCSession *session))invitationHandler
{
invitationHandler(YES, _session);
}
现在,您将收到一个会话委托调用,以告知您对等连接的状态。此时你应该连接 - 没有"真实"需要用户交互。
- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state