在iOS7中,引入了一个全新的框架——Multipeer Connectivity(多点连接)。利用Multipeer Connectivity框架,即使在没有连接到WiFi(WLAN)或移动网络(xG)的情况下,距离较近的Apple设备(iMac/iPad/iPhone)之间可基于蓝牙和WiFi(P2P WiFi)技术进行发现和连接实现近场通信。
Multipeer Connectivity扩充的功能与利用AirDrop传输文件非常类似,可以将其看作AirDrop不能直接使用的补偿,代价是需要自己实现。手机不联网也能跟附近的人聊得火热的FireChat和See You Around等近场聊天App、近距离无网遥控交互拍照神器拍咯App就是基于Multipeer Connectivity框架实现。
相比AirDrop,Multipeer Connectivity在进行发现和会话时并不要求同时打开WiFi和蓝牙,也不像AirDrop那样强制打开这两个开关,而是根据条件适时选择使用蓝牙或(和)WiFi。 本段介绍引自 MultipeerConnectivity.framework框架
本插件封装了 iOS 端 Multipeer Connectivity 框架的相关接口。 Multipeer Connectivity Framework是iOS 7 推出的众多新框架的一种,是一个使附近设备通过Wi-Fi网络、P2P Wi-Fi以及蓝牙个人局域网进行通信的框架。它拓宽了操作系统中应用的范围。其目的是使开发者可以创建通过Wi-Fi或蓝牙在近距离建立连接的应用。是在近距离设备间建立互动,交换数据和其他资源的很好的简单工具。
其中通讯的原理,是利用节点来进行广播服务(标示符),其他节点可以通过服务(标示符)发现广播。并对此节点进行连接。在项目中可以将广播和发现放在一起实现,这样既可以发现并连接到其他节点,同时也可以被其他节点所搜索链接。服务的命名规则为由ASCII字母、数字和“-”组成的短文本串,最多15个字符。通常,一个服务的名字应该由应用程序的名字开始,后边跟“-”和一个独特的描述符号。
MCBluetooth 插件封装了 iOS 端系统的蓝牙功能,使用此插件可实现两台 iOS 设备间无缝传输数据。可传输字符串、图片、视频、文件等各种数据。使用此插件需打开设备蓝牙或Wi-Fi功能。
使用本插件需在云编译时申请访问本地网络权限。且需要配置 Info.plist 文件。有关 Info.plist 文件的说明参考论坛。
本功能配置示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSBonjourServices</key>
<array>
<string>_serviceType._tcp</string>
</array>
</dict>
</plist>
注意:其中的 serviceType
是 startAdvertising 接口中 serviceType 参数配置的对应的值。
只能用于 iOS 设备且为同一个应用程序之间的连接。适合发送较小的数据。对其它蓝牙设备的连接请使用插件 ble。 startAdvertising、stopAdvertising、getCurrentPeers 为服务器端接口,disconnect、sendString、sendFile 为公共接口,startBrowsing、invitePeer、stopBrowsing 为客户端接口。
开始广播
startAdvertising({params}, callback(ret))
serviceType:
ret:
{
eventType: //字符串类型;交互事件类型;取值范围:
//receiveInvitation:收到连接邀请
//error:发生错误
//connected:建立链接
//connecting:正在建立连接
//notConnected:断开
peerName: //字符串类型;设备名称,当 error 时无此值
errorMsg: //字符串类型;错误信息,仅当 error 有值
}
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.startAdvertising({
serviceType: 'nearByContent',
}, function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统
可提供的 1.0.0 及更高版本
停止广播
stopAdvertising()
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.stopAdvertising();
iOS系统
可提供的 1.0.0 及更高版本
断开链接
disconnect()
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.disconnect();
iOS系统
可提供的 1.0.0 及更高版本
获取当前连接的设备列表
getCurrentPeers(callback(ret))
ret:
{
allPeers: //数组类型;当前找到的新设备名
}
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.getCurrentPeers(function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统
可提供的 1.0.0 及更高版本
发送字符串
sendString({params},callback(ret))
data:
toPeers:
ret:
{
status: //布尔类型;是否发送成功
errorMsg: //字符串类型;错误信息
}
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.sendString({
data:"send from yy",
//toPeers
},function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统
可提供的 1.0.0 及更高版本
发送文件
sendFile({params},callback(ret))
path:
resourceName:
toPeerIndex:
ret:
{
status: //布尔类型;是否发送成功
errorMsg: //字符串类型;错误信息
}
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.sendFile({
path:'widget://res/1.png',
toPeerIndex:0
},function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统
可提供的 1.0.0 及更高版本
添加收到字符串监听
addReceiveDataListener(callback(ret))
ret:
{
data: //字符串类型;收到的字符串
peerName: //字符串类型;发送字符串的设备名称
index: //数字类型;设备在列表中的下标
}
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.addReceiveDataListener(function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS 系统
可提供的 1.0.0 及更高版本
添加收到文件监听
addReceiveFileListener(callback(ret))
ret:
{
path: //字符串类型;收到的文件路径
peerName: //字符串类型;发送字符串的设备名称
resourceName: //字符串类型;收到的文件名称
index: //数字类型;设备在列表中的下标
}
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.addReceiveFileListener(function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS 系统
可提供的 1.0.0 及更高版本
开始扫描附近的设备
startBrowsing({params},callback(ret))
serviceType:
ret:
{
eventType: //字符串类型;交互事件类型;取值范围:
//foundPeer:找到新设备
//lostPeer:丢失设备
//error:发生错误
allPeers: //数组类型;当前找到的新设备名,仅当 foundPeer、lostPeer 有值
errorMsg: //字符串类型;错误信息,仅当 error 有值
}
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.startBrowsing(function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统
可提供的 1.0.0 及更高版本
停止扫描
stopBrowsing()
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.stopBrowsing();
iOS系统
可提供的 1.0.0 及更高版本
邀请附近的设备发起连接
invitePeer({params}, callback(ret))
index:
timeout:
ret:
{
eventType: //字符串类型;交互事件类型;取值范围:
//connected:建立链接
//connecting:正在建立连接
//notConnected:断开
}
var MCBluetooth = api.require('MCBluetooth');
MCBluetooth.invitePeer({
index: 0,
timeout:10
}, function(ret) {
if (ret) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统
可提供的 1.0.0 及更高版本