Fedi for Pleroma and Mastodon
Fedi 是一个使用 Flutter 编写的 Pleroma 和 Mastodon 社交网络的开源客户端。
Pleroma 和 Mastodon 是 Fediverse(去中心化社交网络)的一部分。Fediverse 的主要理念是:没有人拥有 Fediverse。任何人都可以运行自己的服务器实例,并用它与其他人交流。
因此,Fedi 是一个开源的社交网络移动客户端,其功能与 Twitter 类似。
在 Fediverse 上关注我们 [email protected]
功能
- Pleroma 和 Mastodon 支持
- 离线模式。即使没有网络也能访问缓存数据
- 自定义表情。支持 Pleroma 上的表情反应
- 可定制的主时间线
- 多账户支持
- 通过 PushRelayFCM 和 FCM 推送通知
- 支持接收和发送分享意图
- 计划和草稿状态
- 过滤器
- 实例详情、公告、趋势、活动历史、限制
- 白天和夜晚主题
- 书签、标签、列表、精选标签、推荐
- 对话(私信)和 Pleroma 聊天的类似消息的 UI
- 通过 WebSockets 和推送通知可定制的实时通知和时间线更新
- 通过公共 API 从远程实例获取数据。因此,如果当前登录的实例尚未同步所有数据,您仍然可以访问远程实例上的完整数据
- 大量设置选项(全局或每个实例)。例如:
始终显示 NSFW或自动加载媒体内容 - 帖子串和投票
- 仅媒体时间线的特殊 UI
- 静默和屏蔽
- 编辑个人资料
- 注册支持
即将推出
- 管理员 API;
- 支持其他 Fediverse 实例:Pixelfed、Misskey、Peertube、GNU Social、Friendica 等;
- Pleroma:scrobbles、吉祥物和最近添加的新功能;
- Mastodon:最近添加的新功能。
- 为大屏幕适配 UI;
- 在单个主页上显示来自不同实例的时间线(目前您需要切换实例才能查看相关数据);
- 通过 Markers API 记住时间线位置;
- 入门和教程。热门实例推荐;
- 待办事项中有许多小的用户体验改进。
如果您有建议,请随时提出问题
已知问题
- 文本不可选择,但您可以复制或分享完整的帖子
- 不支持包含特殊字符(如
ü)的实例
数据收集
Fedi 不使用任何特殊分析服务来跟踪用户。
但是,Fedi 使用 Firebase 服务进行推送通知(可选)和崩溃报告(可选)。
您可以通过从源代码手动构建完全移除 Firebase。
通过 Firebase Crashlytics 进行的崩溃报告
Fedi 收集崩溃和非致命错误,以使应用程序更稳定。
- 您可以从源代码构建应用程序,并通过 .env 配置移除 Crashlytics 库(详情见下文)
- 您可以通过应用程序内的设置禁用收集(该选项默认禁用)
推送通知
推送通知通过 PushRelayFCM 服务器实现
PushRelayFCM 是一个 Ruby on Rails 服务器,它处理 Web 推送并将其转发给 FCM。
从 2.5.0 版本开始,Fedi 使用无服务器端解密的 PushRelayFCM 模式。因此,所有私有数据都是安全的。
PushRelayFCM 和 Fedi 可以有两种模式运行
- 无服务器端解密(
2.5.0及更高版本) - 转发简单的代理加密消息 - 有服务器端解密(
2.5.0之前) - 解密消息并访问通知内容和用户access_token。从2.5.0版本开始已不再使用,但在 Fedi 中仍然支持(以下说明了您仍可能想使用它的原因)。
无服务器端解密方式
(在 2.5.0 起的 AppStore/GooglePlay 版本中使用)
- Fedi 订阅
/api/v1/push/subscription,并将subscription[endpoint]设置为中继服务器 URL - 实例将 Web 推送通知发送到中继服务器
- PushRelayFCM **不解密**消息
- PushRelayFCM 通过 FCM 将通知代理到 Fedi 应用
- Fedi **不解密**消息,并使用带有加密数据的 FCM 消息作为简单的触发器,通过 REST API 加载最新通知(这将在未来的版本中得到改进)
- Fedi 显示通知
由于 PushRelayServer 不知道私有解密密钥,因此它无法访问任何私有数据。
优点
- 不访问用户私有数据
- 使用
awesome_notifications提供的丰富通知布局和操作
缺点
- 可能会延迟送达。因为 PushRelayFCM 发送的 FCM 推送消息没有
notification(FCM 称之为数据消息)。有关详细信息,请阅读awesome_notifications和firebase_messaging文档。Fedi 使用:mutable_content=>true,:content_available=>true,:priority=>"high",来提高送达优先级
为什么 Fedi 不在客户端解密消息?
因为用 Flutter 实现起来很困难。目前还没有第三方 Flutter 库可以解密 ECDH p256v1。
可以在 Kotlin/Swift 中解密,未来会实现。
有服务器端解密方式
(从 2.5.0 起的 AppStore/GooglePlay 版本未使用)
- Fedi 订阅
/api/v1/push/subscription,并将subscription[endpoint]设置为中继服务器 URL - 实例将 Web 推送通知发送到中继服务器
- PushRelayFCM **解密**通知
- PushRelayFCM 通过 FCM 将通知中继到 Fedi 应用
- Fedi 显示通知
- PushRelayFCM 可以访问
title、body和access_token access_token是敏感数据。如果有人知道access_token,就可以登录您的账户
优点
- 更快的推送送达。FCM 消息(通知类型)带有
notification.title和notification.body,其优先级高于不带notification.title和notification.body字段的消息。实际上,这对 iOS 的影响比对 Android 的影响更大。有关详细信息,请阅读awesome_notifications和firebase_messaging文档。
缺点
- 私有数据访问是 Fedi 转为
无服务器端解密方式的主要原因 - 不使用
awesome_notifications提供的丰富通知布局和操作
本地化
应用程序使用与 Flutter SDK 一起捆绑的 flutter_localization API。
它使用位于 lib/l10n 的 .arb 文件,并在 /lib/generated/ 文件夹中生成 .dart 类。
在您对 .arb 文件进行更改后,需要执行额外操作来重新生成 Dart 类
- 通过
flutter intl插件自动生成 - 通过
flutter intl包手动生成
已完成
- 英语、俄语
帮助翻译 Fedi
- 通过 Weblate 帮助翻译 Fedi
- 即使不注册也很容易提交修复