支持的功能
- 事件 / 中继订阅 (NIP-01)
- 关注列表 (NIP-02)
- OpenTimestamps 证明 (NIP-03)
- 私人消息 (NIP-04)
- DNS 地址 (NIP-05)
- 助记词种子短语 (NIP-06)
- 网页浏览器签名器 (NIP-07, 不适用)
- 旧式提及 (NIP-08)
- 事件删除 (NIP-09)
- 回复、提及、主题和通知 (NIP-10)
- 中继信息文档 (NIP-11)
- 通用标签查询 (NIP-12)
- 工作量证明显示 (NIP-13)
- 工作量证明计算 (NIP-13)
- 带主题的事件 (NIP-14)
- 市场 (NIP-15)
- 事件处理 (NIP-16)
- 私人直接消息 (NIP-17)
- 图片/视频/网址/闪电网络发票预览
- 转发、引用、通用转发 (NIP-18)
- Bech 编码支持 (NIP-19)
- 命令结果 (NIP-20)
- URI 支持 (NIP-21)
- 长文内容 (NIP-23)
- 用户资料字段 / 中继列表 (NIP-24)
- 反应 (NIP-25)
- 委托事件签名 (NIP-26, 不会实现)
- 文本注释引用 (NIP-27)
- 公共聊天 (NIP-28)
- 基于中继的群组 (NIP-29)
- 自定义表情 (NIP-30)
- 事件类型摘要 (NIP-31)
- 标签 (NIP-32)
- 参数化可替换事件 (NIP-33)
- Git 相关 (NIP-34)
- 种子 (NIP-35)
- 敏感内容 (NIP-36)
- 编辑 (NIP-37/草案)
- 用户状态事件 (NIP-38)
- 外部身份 (NIP-39)
- 过期支持 (NIP-40)
- 中继认证 (NIP-42)
- 版本化加密载荷 (NIP-44)
- 事件计数 (NIP-45, 不会实现)
- Nostr 连接 (NIP-46)
- 钱包连接 API (NIP-47)
- 代理标签 (NIP-48, 不适用)
- 私钥加密导入/导出 (NIP-49)
- 在线中继搜索 (NIP-50)
- 列表 (NIP-51)
- 日历事件 (NIP-52)
- 实时活动和实时聊天 (NIP-53)
- 维基 (NIP-54)
- 内联元数据 (NIP-55 - 草案)
- 举报 (NIP-56)
- 闪电网络打赏
- 闪电网络打赏 (NIP-57)
- 私人闪电网络打赏
- 闪电网络打赏分割 (NIP-57)
- 徽章 (NIP-58)
- 礼物包装和封印 (NIP-59)
- 打赏筹款 (NIP-TBD)
- 中继列表元数据 (NIP-65)
- 投票 (NIP-69)
- 视频事件 (NIP-71)
- 管理社区 (NIP-72)
- 打赏目标 (NIP-75)
- 任意自定义应用数据 (NIP-78)
- 高亮 (NIP-84)
- 通知请求 (NIP-88/草案)
- 推荐应用处理程序 (NIP-89)
- 数据自动售货机 (NIP-90)
- 内联元数据 (NIP-92)
- 可验证文件 URL (NIP-94)
- 二进制大对象 (NIP-95/草案)
- HTTP 文件存储集成 (NIP-96)
- HTTP 认证 (NIP-98)
- 分类广告 (NIP-99)
- 音频轨道 (zapstr.live) (类型:31337)
- 推送通知 (Google 和统一推送)
- 设备内自动翻译
- 标签关注和自定义标签
- 二维码登录
- 悬赏支持 (nostrbounties.com)
- 去谷歌化的 F-Droid 版本
- 多账户
- Markdown 支持
- 医疗数据 (NIP-xx/草案)
- 嵌入事件 (NIP-xx/草案)
- 草稿事件 (NIP-xx/草案)
- 事件集 (NIP-xx/草案)
- 主题笔记 (NIP-xx/草案)
- 关系状态 (NIP-xx/草案)
- 签名过滤器 (NIP-xx/草案)
- 密钥迁移 (NIP-xx/草案)
- 基于时间的同步 (NIP-xx/草案)
- 应用内图片/视频捕获
- 本地数据库
- 工作区
- 无限滚动
隐私和信息永久性
中继知道你的 IP 地址、你的名字、你的位置(从 IP 猜测)、你的公钥、你所有的联系人和其他中继,并且可以读取你的每一个操作(发帖、点赞、转发、引用、举报等),除了私人闪电网络打赏和私人直接消息。虽然直接消息(DM)的内容只对你和你的 DM 对方可见,但每个人都可以看到你和你的对方何时进行 DM。
如果你想提高隐私性,请考虑使用能够从在线跟踪器隐藏你的 IP 地址的服务(例如 VPN 或 Tor)。
中继还会了解你正在请求哪些公钥,这意味着你的公钥将与你的 IP 地址绑定。
在 Nostr 上共享的信息可能会被重新广播到其他服务器,出于隐私考虑应该假设这些信息是永久的。一旦发布,就无法保证删除任何内容。
开发概述
这个仓库分为 Amethyst 和 Quartz 两部分:
- Amethyst 是一个使用 Kotlin 和 Jetpack Compose 制作的原生 Android 应用。
- Quartz 是我们自己的 Nostr 通用库,用于托管对其他 Nostr 客户端有用的类。
应用架构包括使用常见的 State/ViewModel/Composition 的 UI,连接 Nostr 中继的服务层, 以及将所有 Nostr 对象保存在内存中完整面向对象图中的模型/仓库层。
仓库层将 Nostr 事件分别存储为 Notes 和 Users。这些类使用 LiveData 和 Flow 对象, 允许 UI 和应用的其他部分订阅每个 Note/User 并在发生变化时接收更新。 它们还负责在需要时更新 viewModels。当用户滚动浏览事件时,Datasource 类 会更新以接收有关这些特定事件的更多信息。
大部分 UI 对仓库类的变化做出反应。服务层为应用的每个需求组装 Nostr 过滤器, 从中继接收数据,并将其发送到仓库。在使用应用期间,与中继的连接从不关闭。 UI 收到对象已更新的通知。User 和 Notes 的实例是可以直接修改的。 永远不会有两个具有相同 ID 的 Notes 或两个具有相同公钥的 User 实例。
最后,用户的账户信息(私钥/公钥)存储在 Android KeyStore 中以确保安全。
设置
确保安装以下前提条件:
- Java 17+
- Android Studio
- Android 8.0+ 手机或模拟器设置
fork 并克隆此仓库,然后将其导入 Android Studio
git clone https://github.com/vitorpamplona/amethyst.git
使用 Android Studio 构建操作在你的设备或模拟器上安装并运行应用。
构建
构建应用:
./gradlew assembleDebug
测试
./gradlew test
./gradlew connectedAndroidTest
代码格式化
./gradlew spotlessCheck
./gradlew spotlessApply
在设备上安装
对于F-Droid版本:
./gradlew installFdroidDebug
对于Play版本:
./gradlew installPlayDebug
部署
- 生成新的签名密钥
keytool -genkey -v -keystore <my-release-key.keystore> -alias <alias_name> -keyalg RSA -keysize 2048 -validity 10000
openssl base64 < <my-release-key.keystore> | tr -d '\n' | tee some_signing_key.jks.base64.txt
- 在您的GitHub仓库中创建四个密钥变量并填写签名密钥信息
KEY_ALIAS
<-<alias_name>
KEY_PASSWORD
<-<您的密码>
KEY_STORE_PASSWORD
<-<您的密钥库密码>
SIGNING_KEY
<- 来自<my-release-key.keystore>
的数据
- 在
amethyst/build.gradle
中更改versionCode
和versionName
- 提交并推送。
- 用
v{x.x.x}
标记提交 - 让Create Release GitHub Action构建一个新的
aab
文件。 - 将您的更新日志添加到新版本的描述中
- 下载
aab
文件并上传到PlayStore。
使用Quartz库
在构建文件中设置JitPack.io
在settings.gradle的repositories末尾添加maven { url 'https://jitpack.io' }
:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
添加依赖
implementation('com.github.vitorpamplona.amethyst:quartz:v0.85.1')
贡献
可以在以下地址提交问题:https://gitworkshop.dev/repo/amethyst
这里也欢迎GitHub问题和拉取请求。可以通过Crowdin提供翻译。
您还可以使用GitStr通过Nostr将补丁发送到这个nostr地址
通过对此仓库做出贡献,您同意根据MIT许可证许可您的工作。任何非您原创的贡献工作都必须包含其原始作者和来源的许可证头。
截图
关注源 | 聊天组 | 直播 | 通知 |
---|---|---|---|
贡献者
MIT许可证
版权所有 (c) 2023 Vitor Pamplona 特此免费授予任何获得本软件及相关文档文件("软件")副本的人不受限制地处理本软件的权利, 包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利, 并允许向其提供本软件的人这样做,但须符合以下条件: 上述版权声明和本许可声明应包含在本软件的所有副本或重要部分中。 本软件按"原样"提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性的保证。 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责, 无论是在合同诉讼、侵权行为还是其他方面,由软件或软件的使用或其他交易引起、产生或与之相关。