摆脱网络束缚?BitChat 让你在离线世界自由交流
BitChat 是一个无需账号、基于蓝牙和Nostr协议的去中心化聊天应用,适合离线和全球范围内的即时通讯。通过本教程,你将学会安装、使用和优化BitChat。
1. 在本地搭建 BitChat 开发环境
本章要解决的问题是如何在你的电脑上搭建起 BitChat 的开发环境,这样你就可以开始探索和修改这个有趣的去中心化聊天应用了。
为了顺利进行,你需要确保你的系统满足以下要求:
我们先从克隆 BitChat 的 GitHub 仓库开始:
git clone https://github.com/permissionlesstech/bitchat.git这会下载整个项目的源代码到你的本地机器上。完成后你会看到一个名为 bitchat 的文件夹出现在当前目录下。
接着,我们需要进入项目目录并安装所有必要的依赖包:
cd bitchat
npm install这一步可能需要一些时间来完成,因为 npm 正在下载和安装项目所需的所有库和模块。完成后你会看到类似“added X packages in Y.YYs”的信息。
如果你遇到权限问题或者 npm 缺少某些包,请检查你的 Node.js 和 npm 是否正确安装,并尝试以管理员身份运行命令行工具。
最后一步是启动开发服务器以测试我们的设置是否成功:
npm start如果一切正常,你应该能在浏览器中打开一个新的标签页,并且能看到 BitChat 应用的界面。如果有错误信息弹出,请仔细查看终端中的日志信息,通常那里会有详细的错误描述以及如何修复它们的线索。
假设一切顺利的话,我们现在就有一个可以运行的 BitChat 开发环境了。接下来你可以根据自己的需求对代码进行修改或者添加新功能了。
本章小结
- 我们学会了如何克隆 BitChat 的 GitHub 仓库。
- 成功地安装了所有的依赖包。
- 启动了开发服务器并且看到了 BitChat 应用的界面。
- 学习了一些基本的故障排除方法来应对常见的安装问题。
2. 理解 BitChat 的双传输架构
现在我们要深入了解一下 BitChat 的双传输架构,这样你就能明白它是如何利用蓝牙和 Nostr 协议来实现实时通信的。学完这一章后,你将能够理解 BitChat 如何在离线和在线两种模式下工作。
首先,确保你已经在本地成功搭建了 BitChat 的开发环境,并且可以访问项目的源代码。我们将在项目代码中寻找相关信息来帮助理解这个架构。
第一步是找到技术文档的部分,这里会详细解释 BitChat 的架构设计。打开 README.md 文件,定位到 "Technical Architecture" 这一部分。
接下来,我们来看一下这段文档的内容:
BitChat uses a hybrid messaging architecture with two complementary transport layers:
Local Bluetooth Mesh Networks: This layer enables peer-to-peer communication without the need for an internet connection. Devices form a mesh network where messages are relayed between nodes to ensure that everyone can communicate even when some devices are out of direct range.
Internet-based Nostr Protocol: For global communication, BitChat leverages the Nostr protocol. Nostr is a decentralized social networking and microblogging protocol that allows users to send and receive messages across different platforms without relying on centralized servers.
我们可以总结一下这两个主要部分的功能:
- 蓝牙网格网络:用于设备之间的点对点通信,在没有互联网连接的情况下也能实现消息传递。
- Nostr 协议:通过互联网提供全球范围的消息传递能力,支持跨平台通信而不需要中心化的服务器。
为了更好地理解这些概念,想象一下在一个户外活动期间,一组参与者使用 BitChat 应用进行沟通。当大家都在同一个地点时,他们的手机可以通过蓝牙自动形成一个网络,即使有人暂时离开了群体的一部分区域,他们仍然可以通过其他人的手机转发消息继续交流。但如果这群人在不同的城市甚至国家旅行时,则可以利用 Nostr 协议通过互联网保持联系。
本章小结
- 我们学习了什么是双传输架构。
- 明白了蓝牙网格网络如何支持离线通信。
- 理解了 Nostr 协议在全球范围内提供即时通讯的能力。
- 通过实际场景的例子加深了对这两种通信方式的理解。
3. 创建并加入蓝牙网格聊天室
创建并加入蓝牙网格聊天室能让我们的设备在没有互联网的情况下也能互相通信。通过本章的学习,你将能够设置好 BitChat 并在蓝牙网格中与其他用户交流。
首先,请确保你已经在本地搭建好了 BitChat 的开发环境,并且已经理解了它的双传输架构。如果你还没有完成这些步骤,建议先回去看看前两章的内容。
第一步:启动 BitChat 应用
我们先打开 BitChat 应用。如果你是通过 Xcode 进行开发的,可以在终端中输入以下命令:
cd bitchat
open bitchat.xcodeproj然后在 Xcode 中选择你的目标设备或模拟器来运行应用。
第二步:进入蓝牙网格聊天室
一旦应用启动,你会看到主界面。找到并点击“Create New Chat”按钮来创建一个新的聊天室。或者你可以选择已有的聊天室名称来加入现有的蓝牙网格聊天室。
假设你想创建一个新的聊天室,点击后会弹出一个对话框让你输入聊天室名称。随便起一个名字比如“OutdoorsAdventure”,然后点击确认。
第三步:邀请其他人加入
为了让其他人能加入你的蓝牙网格聊天室,你需要让他们也下载并安装 BitChat 应用。当他们在附近的时候,他们的设备会自动发现你的聊天室并显示出来。
他们只需要打开 BitChat 应用,在主界面上找到“Join Existing Chat”选项,然后选择你刚刚创建的“OutdoorsAdventure”聊天室即可加入。
第四步:发送和接收消息
当你和其他人都加入了同一个蓝牙网格聊天室之后,你们就可以开始发送消息了。只需在底部的输入栏中输入你想说的话,然后点击发送按钮即可。
例如,你可以说:“今天天气真好!”其他在线的人都能看到这条消息,并回复你:“确实!咱们一起去爬山吧。”
常见问题及解决方案
- 无法发现附近的设备:确保所有参与者的设备都开启了蓝牙并且允许应用访问蓝牙权限。
- 消息延迟:如果信号不好或者距离较远可能会导致消息延迟,尽量让设备靠近一些。
- 无法创建或加入聊天室:检查是否正确填写了聊天室名称,并且所有参与者都在同一个蓝牙范围内。
小例子
想象一下你在参加一个户外露营活动,和朋友们一起使用 BitChat 来组织篝火晚会的时间表和分工任务。每个人都可以随时查看最新的安排,并提出自己的意见。由于大家都没有携带数据流量套餐,BitChat 的蓝牙功能帮助你们保持高效沟通而无需担心网络费用或覆盖范围问题。
本章小结
- 学习了如何启动并配置 BitChat 应用来创建和加入蓝牙网格聊天室。
- 掌握了基本的消息发送和接收方法。
- 解决了一些常见的技术问题以保证顺利通信。
- 通过实际应用场景体会到了离线环境下即时通讯的重要性。
4. 利用 Nostr 协议进行全球聊天
现在我们要解锁 BitChat 的另一项强大功能——利用 Nostr 协议进行全球聊天。这意味着无论你身处何地,只要有互联网连接,就能与其他用户进行实时交流。完成这一步后,你不仅能享受本地蓝牙网格带来的便利,还能跨越地域限制,与世界各地的朋友保持联系。
前置条件:
- 你需要已经按照前几章的指导成功安装并配置了 BitChat 应用。
- 确保你的设备已连接到互联网。
第一步:启用 Nostr 功能
首先,我们需要在 BitChat 中启用 Nostr 支持。打开应用后,进入设置菜单:
- 打开 BitChat 应用。
- 点击右下角的齿轮图标进入设置页面。
- 滚动到底部找到“高级设置”,点击进入。
- 在这里找到“Nostr 协议”选项,并将其开关切换为开启状态。
[√] 启用 Nostr 协议预期结果:你应该能看到“Nostr 协议已启用”的提示信息。
第二步:配置 Nostr 身份
启用 Nostr 后,我们需要生成一个新的 Nostr 身份以便在网络中识别自己。
- 返回主界面,在左上角点击你的用户名旁边的铅笔图标以编辑个人资料。
- 在弹出的窗口中,点击“生成新身份”按钮。
- 系统会自动生成一个新的公钥和私钥,请务必保存好这些密钥信息。你可以选择将它们复制到安全的地方或打印出来备用。
公钥: npub1...
私钥: nsec1...预期结果:你会看到新的公钥和私钥显示在屏幕上,并且可以进行下一步操作。
注意:请妥善保管好你的私钥信息,一旦丢失将无法恢复!
第三步:添加订阅列表
为了能够接收到他人的消息,我们需要添加一些默认的 Nostr 中继服务器地址到我们的订阅列表中。
- 回到设置页面,在“高级设置”中找到“Nostr 设置”部分。
- 点击“添加中继服务器”按钮。
- 输入以下推荐的中继服务器地址(每个地址一行):
wss://relay.damus.io
wss://nostr-pub.wellorder.net
wss://nos.lol- 添加完毕后点击保存按钮确认更改。
预期结果:系统会自动尝试连接这些中继服务器,并开始同步网络中的最新消息流。
第四步:发布第一条消息
一切准备就绪后,我们可以尝试发布一条全球可见的消息了!
- 回到主界面,在输入框内输入你想说的话:“Hello, world from BitChat!”
- 点击右下角的纸飞机图标发送该条消息。
预期结果:你的消息将会被广播到所有已连接的 Nostr 中继服务器上,并可能被其他人看到和回复。
实际应用场景举例
假设你现在在国外旅行,想要与国内的好友保持联系。借助于 BitChat 的 Nostr 功能,即使身处不同的国家和地区之间也能轻松实现无障碍沟通。你可以在旅行途中分享所见所闻、询问家乡的情况甚至提前规划返程事宜。这一切都不再受限于地理位置或运营商的服务范围!
本章小结
- 成功启用了 BitChat 的 Nostr 协议支持功能。
- 生成了自己的专属 Nostr 身份标识符(公钥和私钥)。
- 添加了常用的 Nostr 中继服务器地址至订阅列表。
- 通过实例体验了如何在全球范围内使用 BitChat 进行即时通讯。
5. 发送和接收加密私信
本章我们要学习如何在 BitChat 中发送和接收加密私信。通过这节课,你不仅能够掌握基本的私信功能,还能理解 BitChat 如何确保信息的安全性。
前置条件
- 你已经在设备上成功安装并启动了 BitChat 应用。
- 已经添加了一些 Nostr 中继服务器,并且至少有一个好友也使用了 BitChat 并知道你的公钥。
第一步:获取好友的公钥
为了给好友发送私信,你需要知道他们的公钥。通常情况下,这个公钥会在你们首次交流时由对方提供。
- 打开 BitChat 主界面。
- 寻找你的朋友的名字或者昵称。如果还没有对话记录,可以先在公共频道里@他们来发起对话。
- 点击进入对话页面后,在右上角找到并点击“用户详情”或类似选项。
- 在用户详情页中,你应该能看到该用户的公钥。
第二步:发送加密私信
一旦你知道了好友的公钥,就可以给他们发送加密私信了。
- 返回主界面,在左下角点击加号图标创建一个新的对话。
- 输入你朋友的公钥。注意这里的格式很重要,请确保没有多余的空格或其他字符。
- 如果一切顺利,你会看到一个新对话窗口打开。
- 在输入框中输入你想对朋友说的话:“Hey, how’s everything going?”
- 点击右下角的纸飞机图标发送消息。
预期结果:你的消息会被加密并通过 Nostr 协议安全地传递给你的朋友。只有持有相应私钥的人才能解密并查看这条消息的内容。
注意事项
- 如果你在输入公钥时出现了错误,可能会导致无法建立对话。这时可以检查一下是否有拼写错误或是多余符号。
- 如果长时间未收到回复,请确认你的朋友是否在线并且他们的设备已经连接到了相同的 Nostr 中继服务器。
第三步:接收加密私信
当你的好友给你发送了一条私信时,BitChat 会自动处理解密过程并将消息显示在对应的对话窗口中。
- 回到主界面,你会在左侧的聊天列表中看到有新的未读消息提示。
- 点击对应的好友名字进入对话窗口。
- 查看最新的消息内容。由于是加密私信,只有你自己可以看到完整的信息内容。
预期结果:你能正常阅读来自好友的所有加密私信,并且这些信息对你来说是完全保密的。
实际应用场景举例
想象一下你在参加一场重要的会议或者在一个信号不佳的地方工作时突然需要联系某个同事讨论紧急问题。通过 BitChat 的加密私信功能,你可以迅速而安全地与同事取得联系,并交换敏感信息而不必担心被第三方截获或泄露出去。
本章小结
- 学习了如何获取和验证好友的公钥。
- 掌握了如何在 BitChat 中创建新的私人对话并发送加密私信。
- 了解了当接收到加密私信时该如何正确打开和查看内容。
- 通过实例体验了如何利用 BitChat 进行安全可靠的点对点通信。
6. 使用 IRC 风格命令提高聊天效率
使用 IRC 风格命令可以大大提高你在 BitChat 中的沟通效率。通过一些简单的命令,你可以快速管理对话、查找用户信息以及执行其他常用任务。本章将教你如何使用这些命令来优化你的聊天体验。
在开始之前,确保你已经在 BitChat 中创建了一些对话,并且至少有一个活跃的聊天对象。
第一步:熟悉基本命令
BitChat 支持多种 IRC 风格的命令,以下是一些常用的:
| 命令 | 描述 |
|---|---|
/msg <username> <message> |
向指定用户发送消息 |
/slap <username> |
给指定用户一个虚拟拍打 |
/notice <username> <text> |
向指定用户发送通知 |
/join #channel |
加入一个公共频道 |
/part #channel |
离开当前所在的频道 |
/query <username> |
打开与用户的私人对话窗口 |
第二步:发送消息给特定用户
假设你想给名为 Alice 的用户发送一条消息,可以在聊天框中输入:
/msg Alice 你好!今天过得怎么样?预期结果:Alice 将会在她的聊天列表中收到一条新消息提醒,并能在对话窗口中看到你的消息。
第三步:给用户一个虚拟拍打
如果你想逗乐一下朋友 Bob,可以试试这个命令:
/slap Bob预期结果:Bob 的聊天窗口会显示一条带有笑脸的表情符号的消息:“你给了 Bob 一巴掌!”
第四步:加入和离开公共频道
BitChat 允许你加入多个公共频道来进行群聊。如果你想加入名为 #developers 的频道,只需输入:
/join #developers预期结果:你会立即看到该频道中的所有成员及其最近的消息记录。
如果你想退出当前所在的 #developers 频道,则可以输入:
/part #developers预期结果:你会从该频道中移除,并不再接收来自它的任何消息。
实际应用场景举例
设想你在参与一个关于编程技术的线上研讨会,并希望与其他参会者交流心得。通过使用 BitChat 的 IRC 命令,你可以方便快捷地向感兴趣的小组或个人发送问题、分享资源甚至发起互动活动,而无需频繁切换不同的应用程序或手动寻找对方的信息。
本章小结
- 学习了如何使用 IRC 风格的基本命令如
/msg,/slap, 和/notice来管理和参与对话。 - 掌握了如何通过
/join和/part命令来加入和离开公共频道。 - 了解了这些命令如何帮助提升在 BitChat 中的沟通效率。
- 通过实际案例体会了如何利用这些功能来更好地参与社区交流和讨论。
7. 配置位置频道实现地理聊天
配置位置频道实现地理聊天可以让你在特定地理位置内与其他用户建立联系,无论是城市街区还是国家级别。完成这一步后,你可以在旅行时自动加入当地的聊天室,或者在参加地区性活动时更容易找到志同道合的人。
前置条件
确保你已经在设备上成功安装并运行了 BitChat 应用,并且熟悉基本的 IRC 命令操作。此外,请确认你的设备已开启定位服务,因为 BitChat 需要获取你的地理位置信息来创建和加入位置频道。
步骤一:启用位置权限
首先,我们需要授予 BitChat 访问你的位置数据的权限。
- 打开 BitChat 应用。
- 进入设置菜单(通常是一个齿轮图标或设置选项)。
- 找到并点击“隐私”或“位置”相关的设置项。
- 将 BitChat 的位置访问权限设置为“始终允许”。
预期结果:BitChat 可以持续获取你的地理位置信息,即使应用在后台运行。
步骤二:查看当前位置坐标
为了理解如何使用地理位置频道,我们可以先查看当前的位置坐标。
- 在 BitChat 设置中找到“调试”或“开发者选项”部分。
- 启用“显示地理位置坐标”选项。
- 返回主界面观察屏幕底部是否出现了类似
#dr5rsj7或其他字符串形式的地理位置编码。
预期结果:屏幕上会显示出当前所在地点的 geohash 编码。这个编码用于标识具体的地理位置区域。
步骤三:加入地理位置频道
假设你想加入当前城市的聊天室,你需要知道对应的城市级 geohash 编码。例如,#dr5rs 可能代表某个城市的地理区域。
输入以下命令来加入城市级别的频道:
/join #dr5rs如果你知道具体街道或小区级别的 geohash 编码,比如
#dr5rsj7,则可以输入:/join #dr5rsj7
预期结果:你将被添加到指定的地理区域内,并能看到该区域内其他用户的聊天记录和新消息。
步骤四:离开地理位置频道
当你想要离开某个地理区域的聊天室时,只需使用 /part 命令加上相应的 geohash 编码即可。
输入以下命令来离开之前加入的城市级别频道:
/part #dr5rs对于街道或小区级别的频道:
/part #dr5rsj7
预期结果:你会从指定的地理区域内移除,并停止接收来自该地区的任何消息。
实际应用场景举例
想象一下你在参加一个国际会议期间,在陌生的城市里。通过打开 BitChat 并自动加入附近的地理频道(例如 #dr5rs),你可以轻松地与其他与会者交流、提问以及共享信息。同样适用于户外运动爱好者,在徒步旅行时自动连接到沿途经过的不同区域的聊天组,从而获得当地人的建议和支持。
本章小结
- 学习了如何在 BitChat 中启用和管理位置权限。
- 掌握了如何查看和理解设备当前的 geohash 地理编码。
- 熟悉了通过
/join和/part命令来加入和离开不同精度级别的地理位置频道的方法。 - 通过实际案例体验了如何利用这些功能来增强跨地域社交互动的能力。
8. 优化电池使用和消息压缩
优化电池使用和消息压缩是确保 BitChat 能够在各种设备上高效运行的关键。通过本章的学习,你将掌握如何调整设置以减少电量消耗,并了解消息压缩是如何工作的。
前置条件
确保你已经在本地成功搭建了 BitChat 的开发环境,并且能够正常启动应用程序。此外,请确认你的设备支持蓝牙和互联网连接。
第一步:开启电池优化模式
为了减少不必要的电力消耗,我们可以启用 BitChat 内置的电池优化模式。
- 打开 BitChat 应用程序。
- 进入设置菜单(通常是一个齿轮图标或者“设置”字样)。
- 找到“性能优化”或“节能模式”选项并将其开启。
预期结果:你应该看到一个确认界面显示节能模式已开启。此时,BitChat 将尽量减少后台活动以节省电量。
第二步:配置消息压缩
BitChat 使用 LZ4 消息压缩算法来减小数据包大小,从而降低传输所需的时间和能源。默认情况下,这个功能通常是开启的,但我们可以通过以下步骤来验证和调整设置。
- 返回设置菜单。
- 寻找“高级设置”或“开发者选项”,这可能隐藏在一个折叠菜单下。
- 查找与“消息压缩”相关的选项,并确保它被勾选为启用状态。
预期结果:确认消息压缩功能已启用后,关闭设置菜单返回主界面。此时发送的消息将会被自动压缩以节省带宽和电力。
第三步:监控电池使用情况
为了更好地评估我们的优化措施是否有效,我们需要定期检查设备的电池使用情况。
- 关闭所有非必要的应用程序,仅保留 BitChat 运行一段时间。
- 使用设备自带的系统工具查看最近的应用程序能耗报告。例如,在 iOS 设备上可以进入“设置” > “关于本机” > “电池”。
预期结果:你应该能够看到 BitChat 的能耗详情。如果一切配置正确,它的能耗应该低于其他频繁通信的应用程序。
实际应用场景举例
假设你在一次长时间的旅行中携带了一部老旧手机,内存有限且电池续航能力差。通过在 BitChat 中启用电池优化模式并开启消息压缩功能,你可以显著延长手机的待机时间,并继续享受即时通讯带来的便利性。
本章小结
- 学习了如何在 BitChat 设置中开启电池优化模式以减少电力消耗。
- 掌握了如何验证并启用消息压缩功能以减小数据包体积。
- 了解了如何监控应用程序的电池使用情况以便及时调整策略。
- 通过实际案例展示了这些优化措施如何帮助用户应对低电量环境下的沟通需求。
常見問題
安装报错:Xcode 打开项目时报错 “The folder ‘bitchat’ does not exist”
请确保你已经克隆了正确的仓库,并且当前目录下存在 bitchat 文件夹。你可以通过以下命令重新克隆项目:
git clone https://github.com/permissionlesstech/bitchat.git
cd bitchat
open bitchat.xcodeproj环境/依赖:如何在 macOS 上安装和运行 BitChat?
你需要先安装 Homebrew,然后使用它来安装 just 工具。以下是具体步骤:
安装 Homebrew(如果尚未安装):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"使用 Homebrew 安装
just:brew install just进入 BitChat 项目目录并运行应用:
cd path/to/bitchat just run
配置:如何设置开发者团队 ID 和 entitlements?
复制本地配置文件:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig编辑
Configs/Local.xcconfig文件,添加你的开发者团队 ID。更新 entitlements 文件中的标识符:
- 打开 Xcode 项目。
- 在项目的 Signing & Capabilities 设置中更新所有出现的
group.chat.bitchat为新的标识符格式,例如group.chat.bitchat.YOUR_TEAM_ID。
使用误区:为什么我在没有互联网连接时无法发送消息?
BitChat 的蓝牙 mesh 网络可以在没有互联网的情况下工作,但需要至少两个设备在蓝牙范围内才能进行通信。如果你是唯一的用户或者不在其他用户的蓝牙范围内,则无法离线发送消息。确保你在有其他用户的环境中测试蓝牙功能。
与同类对比:BitChat 和其他聊天应用相比有什么独特之处?
BitChat 是一个去中心化的点对点聊天应用程序,具有以下特点:
- 无账号系统:无需注册账户或提供电话号码即可使用。
- 双重传输架构:结合了蓝牙 mesh 网络和 Nostr 协议以支持离线和在线通信。
- 地理位置频道:基于地理坐标创建频道,便于社区交流。
- 隐私优先设计:采用加密协议保护信息传输安全,不存储持久化标识符。
- 紧急数据清除:可以通过三击快速清空所有数据。
这些特性使得 BitChat 区别于传统的集中式社交平台和其他即时通讯软件。