3

我想为我的应用程序使用 Multipeer Connectivity 功能。应用程序功能简介:应用程序应扫描运行该应用程序的其他设备(在后台),连接到它们并传输一些数据。所有这些都无需与用户交互。

问题:是否可以使用多对等连接到其他设备,但不必显示另一个设备想要连接的警报视图并强制用户接受或拒绝连接?有没有一种方法可以让我以编程方式接受来自其他设备的所有传入连接?如果是这样,怎么做?

提前非常感谢!

4

1 回答 1

9

您在这里有两个问题:

该应用程序应扫描运行该应用程序的其他设备(在后台)

这里的答案是否定的 - MPC 在后台不起作用(请参阅this so response

对于你的第二个问题:

是否可以使用多对等连接到其他设备但不必显示警报

答案是肯定的。你需要的所有细节都可以在苹果文档中找到。以下是我所做的一些片段:

在一台设备上 - 启动浏览器

_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
于 2014-03-15T22:35:10.133 回答