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 版本中使用)

  1. Fedi 订阅 /api/v1/push/subscription,并将 subscription[endpoint] 设置为中继服务器 URL
  2. 实例将 Web 推送通知发送到中继服务器
  3. PushRelayFCM **不解密**消息
  4. PushRelayFCM 通过 FCM 将通知代理到 Fedi 应用
  5. Fedi **不解密**消息,并使用带有加密数据的 FCM 消息作为简单的触发器,通过 REST API 加载最新通知(这将在未来的版本中得到改进)
  6. Fedi 显示通知

由于 PushRelayServer 不知道私有解密密钥,因此它无法访问任何私有数据。

优点
缺点
  • 可能会延迟送达。因为 PushRelayFCM 发送的 FCM 推送消息没有 notification(FCM 称之为数据消息)。有关详细信息,请阅读 awesome_notificationsfirebase_messaging 文档。Fedi 使用 :mutable_content=>true, :content_available=>true, :priority=>"high", 来提高送达优先级
为什么 Fedi 不在客户端解密消息?

因为用 Flutter 实现起来很困难。目前还没有第三方 Flutter 库可以解密 ECDH p256v1
可以在 Kotlin/Swift 中解密,未来会实现。

有服务器端解密方式

(从 2.5.0 起的 AppStore/GooglePlay 版本未使用)

  1. Fedi 订阅 /api/v1/push/subscription,并将 subscription[endpoint] 设置为中继服务器 URL
  2. 实例将 Web 推送通知发送到中继服务器
  3. PushRelayFCM **解密**通知
  4. PushRelayFCM 通过 FCM 将通知中继到 Fedi 应用
  5. Fedi 显示通知
  • PushRelayFCM 可以访问 titlebodyaccess_token
  • access_token 是敏感数据。如果有人知道 access_token,就可以登录您的账户
优点
  • 更快的推送送达。FCM 消息(通知类型)带有 notification.titlenotification.body,其优先级高于不带 notification.titlenotification.body 字段的消息。实际上,这对 iOS 的影响比对 Android 的影响更大。有关详细信息,请阅读 awesome_notificationsfirebase_messaging 文档。
缺点
  • 私有数据访问是 Fedi 转为 无服务器端解密方式 的主要原因
  • 不使用 awesome_notifications 提供的丰富通知布局和操作

本地化

应用程序使用与 Flutter SDK 一起捆绑的 flutter_localization API。

它使用位于 lib/l10n.arb 文件,并在 /lib/generated/ 文件夹中生成 .dart 类。

在您对 .arb 文件进行更改后,需要执行额外操作来重新生成 Dart 类

已完成

  • 英语、俄语

帮助翻译 Fedi

  • 通过 Weblate 帮助翻译 Fedi
  • 即使不注册也很容易提交修复

GitHub

https://github.com/Big-Fig/Fediverse.app