iOS 7:通过Wi-Fi或点对点Wi-Fi使用Multipeer Connectivity连接设备

时间:2014-01-27 13:37:54

标签: ios ios7 wifi xcode5 multipeer-connectivity

我正在尝试通过iOS 7中的Multipeer连接框架连接2个iOS 7设备。 我可以使用蓝牙连接它们。在代码中我没有提到像蓝牙这样的东西。

Multipeer Documentation

Multipeer Connectivity框架支持使用基础设施Wi-Fi网络,点对点Wi-Fi和蓝牙个人局域网发现附近iOS设备提供的服务,并随后通过发送基于消息的数据与这些服务进行通信,流数据和资源(如文件)。

如果,我关闭其中一个设备的蓝牙,它就会停止工作。

因为,蓝牙范围很慢我需要大面积覆盖。那么,请告诉我如何通过Wi-Fi或点对点Wi-Fi连接两台设备?

代码:.h文件

@interface SessionManager : NSObject <MCSessionDelegate, MCAdvertiserAssistantDelegate, MCBrowserViewControllerDelegate>

// current peer
@property (nonatomic, readonly) MCPeerID *myPeer ;

// current session
@property (nonatomic, readonly) MCSession *session;

// current advertise
@property (nonatomic, readonly) MCAdvertiserAssistant *advertiser ;

// current browser
@property (nonatomic, readonly) MCBrowserViewController *browser ;

//To start advertising current device
- (void)start;

//To stop advertising current device
- (void)stop;

@end

.m文件:

- (id)init
{
    self = [super init];

    if (self)
    {
        _myPeer = [[MCPeerID alloc] initWithDisplayName:[[UIDevice currentDevice] name]];

        _session = [[MCSession alloc] initWithPeer:_myPeer securityIdentity:nil encryptionPreference:MCEncryptionNone];
        _session.delegate = self;

        _advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:@"Connect" discoveryInfo:nil session:_session];
        _advertiser.delegate = self;

        _browser = [[MCBrowserViewController alloc] initWithServiceType:@"Connect" session:_session];
        _browser.delegate = self;
    }

    return self;
}

 - (void)start
 {
    [_advertiser start];
 }

感谢任何帮助。

2 个答案:

答案 0 :(得分:9)

MultipeerConnectivity提供远离基础架构Wi-Fi,P2P和蓝牙的抽象。这意味着您的设备将能够相互通信。

如果你可以通过蓝牙连接两个设备,那么它们也可以通过基础设施wifi连接,假设它们在同一个局域网上没有任何限制(所以如果你在大公司,你可能会遇到一些问题,因为IT)。

MPC允许您与通过完全不同的传输连接的多个设备进行通信。因此,如果A,B和C都是可以使用您指定的UUID发现和连接的设备,A只有蓝牙,B有蓝牙和wifi,而C只有wifi,那么A会自动接收来自C的消息,因为B负责完成戒指。

所有这些功能都已由MultipeerConnectivity提供。

有关如何正确发现,连接和与同伴沟通的演练,请查看wwdc视频“具有多重连接的附近网络”here

答案 1 :(得分:2)

选中的答案是错误的,因为框架不会在LAN上运行,而是更低级别,直接访问蓝牙或WI-FI。换句话说,您不需要使用相同的SSID在同一网络上,只需要打开WI-FI。让两台设备都从局域网中注销,比如关闭路由器和蓝牙,你会发现它们仍然可以连接。但是,从某种意义上说,你可以向下钻取告诉框架直接使用蓝牙或WI-FI,因为Apple决定为我们自动化这部分。