Bridgefy 软件开发套件 (SDK) 是一种最先进、即插即用的软件包,它将允许人们在没有互联网访问的情况下使用您的移动应用,通过使用蓝牙网状网络。
将 Bridgefy SDK 集成到您的 Android 和 iOS 应用中,以触达那些并非始终可以访问互联网连接的35亿人口,并观察参与度和收入增长!
网站. https://bridgefy.me/sdk/
邮箱. [email protected]
Twitter. https://twitter.com/bridgefy
Facebook. https://#/bridgefy
概述
Bridgefy 在设备之间创建网状网络,设备以去中心化的方式直接相互连接。这使用户可以在一定范围内与附近的设备通信,形成一个网络,无需集中服务器或互联网访问。
Bridgefy SDK 为开发者提供了一套工具和 API,可以将离线消息、数据传输和实时通信功能集成到他们的应用程序中。它允许用户通过蓝牙低功耗直接将数据发送到其他附近的设备。
目录表
安装
Swift包管理器
Swift包管理器是一种用于管理Swift代码分发工具。它与Swift构建系统集成,以自动化下载、编译和链接依赖项的过程。
- 有关如何将包添加到项目中的说明,请参阅Apple文档。
- 将以下URL粘贴到包依赖项搜索栏中:
https://github.com/bridgefy/sdk-ios
。 - 使用基于版本的包要求,并将值设置为Bridgefy SDK的最新版本。
CocoaPods
CocoaPods是一种依赖管理器,允许您将第三方框架和库添加到项目中。有关安装说明,请参阅安装CocoaPods。
将Bridgefy SDK添加到您的Podfile中,并在项目中按照以下方式进行安装:
-
在do块中添加pod 'BridgefySDK'。
platform :ios, '13.0' target 'SDK test' do use_frameworks! pod 'BridgefySDK' end
-
保存Podfile。
-
在终端中运行以下命令:
$ pod install
手动安装
-
从本存储库下载
BridgefySDK.framework
。 -
将
BridgefySDK.framework
文件夹拖放到Xcode项目中层次结构的顶部。 -
在将文件夹拖入项目中后,从对话框窗口中选择
如果需要则复制项目
。 -
在项目目标的“常规”部分中,转到
框架、库和嵌入内容
部分,找到BridgefySDK.framework
,然后在嵌入
列中,选择选项嵌入并签名 -
使用以下代码导入Bridgefy SDK:
import BridgefySDK
权限
BridgefySDK需要获取安装设备的蓝牙天线权限;为实现这一目标,您需要在项目的Info.plist
文件中添加一些条目。这些条目如以下图片所示:
用法
初始化
init方法使用API键初始化Bridgefy SDK。委托参数是必需的,并且应该是一个符合BridgefyDelegate
协议的对象。verboseLogging参数是可选的,如果设置为true,将启用更详细的日志记录。
以下代码显示了如何启动SDK(使用您的API密钥)以及如何分配委托。
do {
bridgefy = try Bridgefy(withApiKey: apiKey,
delegate: BridgefyDelegate,
verboseLogging: Bool)
} catch {
// Handle the error
}
字符串apiKey
表示一个有效的API密钥。至少第一次需要互联网连接来验证许可证。《strong>delegate是实现BridgefySDK中所有委托方法的类。
开始
在初始化SDK后,应该调用start()
函数来使SDK服务运行。
bridgefy.start(withUserId: UUID?,
andPropagationProfile: PropagationProfile)
可选的UUIDuserId是SDK用于识别用户的id。如果传入nil值,SDK将随机分配一个UUID。《propagationProfile》的值是SDK将通过网状结构传播消息所使用的配置。
服务启动后,将调用以下代理函数
func bridgefyDidStart(with userId: UUID)
userId是在BridgefySDK中用来识别当前用户/设备的id。
如果在启动BridgefySDK时发生错误,将调用以下代理函数
func bridgefyDidFailToStart(with error: BridgefyError)
传播配置
enum PropagationProfile {
case standard
case highDensityNetwork
case sparseNetwork
case longReach
case shortReach
}
配置 | 跳数限制 | TTL(s) | 分享时间 | 最大传播 | 跟踪列表限制 |
---|---|---|---|---|---|
标准 | 100 | 86400(1天) | 15000 | 200 | 50 |
高密度环境 | 50 | 3600(1小时) | 10000 | 50 | 50 |
稀疏环境 | 100 | 302400(3.5天) | 10000 | 250 | 50 |
长距离 | 250 | 604800(7天) | 15000 | 1000 | 50 |
短距离 | 50 | 1800 | 10000 | 50 | 50 |
- 跳数限制:消息可以获取的最大跳数。每次消息被转发,都算一次跳数。
- TTL:生存时间,是指消息自创建以来可以传播的最大时间。
- 分享时间:消息保留用于转发的时间的最长值。
- 最大传播:从设备传出的消息最大转发次数。
- 跟踪列表限制:为了防止向已经转发了消息的对等体发送消息,将存储在数组中的最大UUID数量。
停止
为了停止SDK,可以使用以下函数
func stop()
服务停止后,将调用以下代理函数
func bridgefyDidStop()
销毁会话
当你想要终止当前的Bridgefy会话并销毁所有相关数据时,调用此方法
func destroySession()
会话销毁后,将调用以下代理函数
func bridgefyDidDestroySession()
附近设备检测
当设备建立了连接时,将调用以下方法
func bridgefyDidConnect(with userId: UUID)
userId:建立连接的用户的标识符。
当设备断开连接(超出范围)时,将调用以下方法
func bridgefyDidDisconnect(from userId: UUID)
userId:断开的用户的标识符。
发送数据
以下方法用于使用传输模式发送数据。此方法返回一个UUID以识别发送的消息。
do {
let messageID = try bridgefy.send(Data,
using: TransmissionMode)
} catch {
// Handle the error
}
如果消息成功发送,将调用以下代理方法
func bridgefyDidSendMessage(with messageId: UUID)
注意: 调用此代理方法并不意味着消息已交付。这是由于BridgefySDK创建的网状网络的特性所致。你只能假设消息已成功交付的情况是在使用p2p
传输模式发送;否则,它只意味着没有预验证错误,且SDK将开始传播消息。
在发送消息时发生错误时,将调用以下代理方法
func bridgefyDidFailSendingMessage(with messageId: UUID,
withError error: BridgefyError)
接收数据
当一个数据包被接收时,以下方法将被调用
func bridgefyDidReceiveData(_ data: Data,
with messageId: UUID,
using transmissionMode: TransmissionMode)
data:接收到的数据。 messageId:接收到的消息的id transmissionMode:用于传播消息的传输模式
传输模式:
public enum TransmissionMode {
case p2p(userId: UUID)
case mesh(userId: UUID)
case broadcast(senderId: UUID)
}
用于通过附近设备传播消息的模式
p2p(userId: UUID):只有当接收者处于范围内时,才发送消息数据;否则将报告错误。mesh(userId: UUID):使用由SDK创建的网状网络发送消息数据。它不需要接收者在范围内。broadcast(senderId: UUID):使用网状网络发送无需定义接收者的数据包。数据包将广播到所有附近的用户,无论他们是否处于范围内。
直接和网状传输
直接传输是一种将数据包递送到附近或可见的用户(已检测到连接)的机制。
网状传输是一种即使接收用户不附近或不可见,也用于递送离线数据包的机制。这可以通过利用其他附近的对等节点来实现;这些节点接收数据包,保留它,并将其转发给其他试图找到接收者的对等节点。
安全连接
Bridgefy功能的一部分是其能够在网状网络中发送数据提供安全连接。为了确保敏感数据的隐私和安全,Bridgefy SDK采用加密技术。加密涉及将数据转换为一个不可读的格式,只有拥有正确解密密钥的授权接收者才能解密。
Bridgefy利用Signal协议,这是一个广泛公认和信任的加密协议,来加密网状网络中设备之间交换的敏感数据。Signal协议提供端到端加密,这意味着数据在整个从发送者到预期接收者的旅程中保持加密状态。这确保了即使有人截获数据,如果没有适当的解密密钥,他们将无法访问其内容。
然而,在公司和开发人员使用Bridgefy SDK开发移动应用的情况下,也有选择实现他们自己的自定义加密的选项,如果他们愿意的话,这不需要建立安全连接,但需要健壮的加密密钥管理实践。
建立安全连接
Bridgefy SDK提供了在网状网络内建立安全连接的选项,使用Signal协议加密网状网络上的数据。这确保了安全连接,并保护数据免受未经授权的访问。
节点连接时,您可以尝试以下方法建立安全连接。
public func establishSecureConnection(with userId: UUID)
建立完成后,安全连接会在委托上得到通知。
func bridgefyDidEstablishSecureConnection(with userId: UUID)
Bridgefy还允许用户在他们更偏好不使用Signal协议的情况下实现自己的自定义加密。在这种情况下,请注意,Bridgefy不需要在设备之间建立安全连接。
使用安全连接的建议
虽然建立安全连接通常被认为需要与其他连接同时进行,但事实并非总是如此。实际上,许多安全连接协议允许在不同的时间建立连接,具体取决于特定的需求和情况。
推荐不仅仅是同步建立安全连接,意味着应该在可行和适当的时候建立安全连接,而不必受到与设备同步连接的限制。
这种方法允许连接安全性具有灵活性和适应性。例如,设备可以一次与一个设备建立安全连接,确保每个连接都得到了适当的加密和认证。这样,即使在不同的时间进行,也不会牺牲连接的安全性。
此外,请求非同步的安全连接还可以在资源管理方面带来好处。同时与多台设备建立安全连接可能会对设备的资源(如处理能力和网络带宽)造成更大的负担。通过优先考虑安全而不是同步连接,设备可以有效地分配资源,并为每个连接保持高水平的安全性。
指纹
public func fingerprint(for userId: UUID) throws -> BridgefyFingerprint?
此方法用于为通过UUID识别的特定用户建立的安全连接生成指纹。指纹是关联到用户安全连接的唯一标识符。它允许用户识别并安全地相互通信。
public func isFingerprintValid(_ fingerprintData: Data, for userId: UUID) throws -> Bool
此方法用于验证特定用户的指纹有效性,该用户通过其UUID进行识别。它允许用户通过验证其指纹来确保他们正在安全地与预期收件人通信。
支持的设备
Bridgefy对设备的支持扩展到智能手机和平板电脑,只要它们运行iOS或Android,并且具有BLE。这使得Bridgefy成为一个通用的平台,能够满足各种通信需求。通过在各种设备之间启用连接,Bridgefy确保用户无论是否有互联网连接,都能轻松建立连接和交换信息。
联系 & 支持
© 2023 Bridgefy Inc. 版权所有