使用Bridgefy SDK创建脱机消息应用程序

使用Bridgefy SDK真的那么容易吗? 在为这个项目工作了将近两年之后,我可以说“是” ,但是我们需要展示它,还有比在应用程序上实现它更好的方法吗?

经过深思熟虑,鉴于Bridgefy最初是一个消息传递应用程序,我们决定最好使用即时消息传递应用程序。

主要思想是创建一个即时消息传递应用程序,该应用程序允许彼此靠近的设备之间进行通信。

该应用程序将包含2个屏幕:

  1. ChatList :它将是附近可用或已经可用的设备的列表,第二个是
  2. ChatView :是发送消息的地方,可以是直接消息或广播消息。

用Xcode生成项目后,有必要添加Bridgefy SDK。 可以在以下位置查看执行此操作的步骤:https://github.com/bridgefy/bridgefy-ios-developer。

在同一页面上,您可以下载此代码以及使用Bridgefy SDK的其他示例应用程序的代码。

下一步是生成演示板屏幕,如下所示:

我们要使用的第一个类是ChatListController ,必须将其创建为UITableViewController的子类,在该类中,我们将实现SDK的所有委托方法。 为此,我们必须如下导入SDK:

导入Bridgefy SDK。

下一步是声明我们的类将实现BFTransmitter的委托方法。

ChatListController接口。

在最后一个代码段中,我们将使用所有变量和属性,其中:

  • 发送器BFTransmitter的实例。
  • peerNamesDictionary :包含我们先前已连接的对等点的字典,每个对等点都表示为另一个字典。
对等字典结构。
  • onlinePeers :具有范围内的对等方的UUID的数组。
  • offlinePeers :数组,其范围的对等方的UUID不在范围内。
  • chatController :处理聊天视图的ChatViewController实例。

下一步是初始化发送器:

BFTransmitter初始化。

我们定义要从发送器获取的日志类型,然后使用在Bridgefy站点上注册应用程序时获得的密钥初始化发送器。 此后,我们向发送方指示该类将是负责实现委托的类。 接下来,我们将激活背景模式,最后调用发射机的start方法以开始工作。

当发送方检测到与任何设备的连接时,将通过以下代表通知我们:

委托方法,用于通知已检测到连接。

当我们通过该委托人收到新连接的通知时,无法确定它是安全的连接。 仅当以前已经建立了安全连接并且密钥尚未过期时,才会发生这种情况。 对于此示例,我们希望在设备之间建立的所有连接都是安全的,因此我们必须实现以下BFTransmitterDelegate方法:

委托方法询问是否应建立安全连接。

现在,当与对等方建立安全连接后,下一个委托将通知我们:

用来通知何时建立安全连接的委托方法。

在此方法中,我们要做的第一件事是调用processNameForUser:方法,该方法将确定对等点是否已存在于我们的对等点列表中。 如果没有,它将创建记录并通过从其UUID的前5个字符生成名称来保存该记录,并为其分配未知的设备类型。 另外,在此方法中,将字典发送到刚与其建立连接的对等方,指示要在其对等方列表中显示的设备的名称和类型。

其余的代码会将对等方移动到范围内的对等方列表中,并更新显示它们的表。

由于我们已经实现了处理连接的代码,因此我们必须注意断开连接。 为此,我们使用以下委托:

通知何时发生断开连接的委托方法。

我们在此委托中所做的是将对等方从范围内的对等方列表移动到断开连接的对等方列表,然后更新表。

这样,对等方的处理就完成了。 现在,我们将专注于消息的发送和接收。 Message类包含为每条消息保存的所有信息。

消息类接口。

发送消息是从ChatViewController类完成的,该类也是UITableViewController的子类。 出于实际原因,我们仅讨论发送消息,因为其余的代码仅用于显示在表上发送和接收的消息。

ChatViewController具有以下协议:

通过该委托,我们将请求ChatListController发送一条消息,为此,我们必须指出ChatListController将实现此协议的委托,如下所示:

要将ChatListController声明为ChatViewController的委托,我们将通过以下方法进行操作:

其余代码用于将参数从ChatListController传输到ChatViewController,具体取决于我们是打开与对等方的对话还是广播对话。

ChatViewController中 ,负责发送消息的方法是:

sendText:方法的实现。

首先,创建消息对象。 填充了相应的属性,并且根据对话的类型,通过委托方法完成了消息的发送。

转到ChatListController ,我们实现了发送消息的委托方法的实现,如下所示:

sendMessage:toConversation方法的实现。

利用消息对象的属性,可以创建要通过发送器发送的字典。 当涉及广播消息时,将从中发送消息的设备的名称和类型添加到词典中,因为接收消息的人可能以前没有与发送设备建立连接,因此需要此信息正确显示消息。

通过下面的代码行通过发送器发送消息:

  • dictionary :发送的消息。
  • 用户 :消息所寻址到的设备的ID; 对于广播情况,此ID为null,因为所有附近的设备都可以看到该消息。
  • options :指示我们希望如何发送消息。 对于直接消息,我们希望将其加密并直接发送和通过网状发送。 对于广播,我们也希望它是FullTransmission和BroadcastReceiver。

最后一步是接收消息,它通过以下方法通知我们:

在这里,我们检索字典,发送字典的设备的UUID,我们还可以知道它是否是广播消息。

委托中的验证用于确定接收到的字典是对应于聊天消息还是发送来指示对等设备的名称和设备的字典

有了这几行代码,就已经可以在Bridgefy SDK的帮助下进行应用通信。

如果您想更好地了解该应用程序的内部操作,我邀请您仔细阅读该代码,该文件记录在案以更好地理解。