Lexicon:一个可定制的原生移动应用程序,用于您的Discourse站点

大家好,

我想在这里简单提一下,我和几位同事刚刚开源了一个名为 Lexicon 的项目。

这是一个基于 Discourse API 构建的预构建、可定制的原生移动应用。我们开发它的目的是帮助快速将讨论和消息功能集成到其他原生移动项目中。

这个项目开发过程非常愉快,这主要归功于 Discourse 核心团队和社区多年来所做的辛勤工作。

截图可在 介绍页面 查看。

技术背景的读者可以查看我们的快速入门指南,它将帮助您在试用该应用的同时浏览此 Discourse 站点!

如果您有任何问题、意见或反馈,请随时联系我们。

谢谢,
Ryan

附:我不确定发布在哪个分类最合适。如果有更合适的分类,请随意重新分配。

58 个赞

非常感谢您清晰的文档,尤其是架构部分的内容。迫不及待想在本地测试了!

推送通知 | :cross_mark::hammer: 开发中

请问这个功能有具体的时间计划吗?

8 个赞

太棒了,@RyanKF!新开发者应该首先从哪个方向入手提供帮助呢?我在 React 移动端应用方面有一些经验。

3 个赞

这太酷了。看起来它是基于 MIT 协议的?

1 个赞

哦,这难道是一个像 Fig 那样的原生 Discourse 客户端吗?如 Fig?如果是的话,我真的很喜欢!:grinning:

4 个赞

Fig 看起来很棒!他们似乎非常成功地打造了原生 iOS 体验,专为 Discourse 设计。

我能注意到的一些差异……

平板支持

Fig 对平板的支持非常出色。我们尚未涉足这一领域。

单站点应用

与 Discourse Mobile 类似,Fig 采用了“站点管理器”模式,允许您添加多个 Discourse 站点并进行浏览。而 Lexicon 更专注于为单个 Discourse 站点打造独立的应用(可能支持白标定制)。

Lexicon 本身并非现成应用

此外,Lexicon 更像是一个“应用模板”,您可以基于它进行自定义,然后自行发布到 App Store 或 Google Play。Fig 则直接提供已发布的应用。

高级服务

Fig 对部分功能提供高级服务。Lexicon 目前没有任何高级服务。

只有在您缺乏他人协助进行集成、自定义或发布 Lexicon 时,才可能涉及费用问题。在这种情况下,我们很乐意与您探讨如何与我们合作。

话虽如此,我知道本站的许多用户具备技术或半技术背景,因此我希望文档足够详尽,能够帮助许多人独立完成这一过程,而无需额外指导。

技术与设备支持

我在此做个推测,但 Fig 似乎使用 Swift 开发其应用,因此是真正的原生开发,这非常棒。

而 Lexicon 是使用 React Native 构建的,这意味着它基于 JavaScript(可以理解并非所有人都喜欢这种方式)。

我们采用 React Native 的一个优势是,开箱即可发布适用于 Android 和 iOS 的应用,并且代码复用率很高。

在我们的代码库中,Android 与 iOS 之间的主要差异体现在界面细节上,例如 Android 使用悬浮操作按钮(Floating Action Button),而 iOS 则使用标题栏按钮。

11 个赞

这是 MIT 许可证。在发布此项目的其他所有细节中,我忘记在仓库中添加 LICENSE 文件了——感谢你的提醒!

6 个赞

你已经很棒了,竟然已经想要贡献了,@4ong

前端

在前端方面,我希望改进的一个领域是支持嵌入在帖子原始内容中的功能。

除了处理帖子的常规 Markdown 内容外,我们还可以支持 Discourse 自定义标记提供的多种功能。

正如你可能已经熟悉的那样,Discourse 支持用于引用、切换、日期甚至投票等功能的自定义语法。

在一种相当典型的实现方式中,我们已经为代码嵌入等基础功能提供了初步支持,并为尚未实现的功能设置了“ 目前不支持”的提示块。

我非常希望能彻底从我们的应用中消除这些“不支持”的提示块。特别是投票和切换功能,如果能得到支持那就太好了。

此外,由于 Lexicon 直接基于帖子的原始内容运行,因此我们绕过了 OneBox 支持。因此,至少需要实现基本的链接预览支持。

后端

我非常期待最终能支持一个功能:来自电子邮件的深度链接。这可能不是一个容易实现的功能,很可能需要构建一个基于 Ruby 的 Discourse 插件。

本质上,这将允许用户点击 Discourse 邮件中的帖子链接,并通过 Discourse 的深度链接直接打开应用(如果已安装)并跳转到该特定帖子。

如果用户尚未安装应用,或者不在移动设备上,则按常规方式将其引导至网站。

如果有人想挑战这个功能,请随时联系我。实现这一功能将具有重大意义。


编辑:此外,请查看我们文档中的 支持的 Discourse 功能页面,了解哪些功能尚未支持,并欢迎尝试实现其中的任何一项(推送通知除外,我们已经在处理该功能)。

7 个赞

乐观来看,未来几周内我们就能实现——不过目前我还无法做出任何硬性保证。

我们早已跨过了概念验证阶段,但仍需打磨一些粗糙的细节。

此外,支持此功能需要在您的网站上安装我们的 Discourse 插件。

具体而言,我们使用 Expo 构建了 Lexicon 移动应用。Expo 是一套用于 React Native 应用的卓越构建工具和服务套件,其中包含对推送通知的支持。

然而,我们未能找到任何能与 Expo 推送服务集成的现有 Discourse 插件,因此不得不自行开发。幸运的是,现有的开源集成项目 OneSignal 与我们的需求非常相似,因此我们可以直接以其项目为基础进行开发。(非常感谢 pmusaraj 为此提供的帮助 :folded_hands:)。

除了发布该插件并将其与移动应用集成外,我们显然还需要更新相关文档。由于 Lexicon 允许您发布 自己的 应用,这不仅仅是为 App Store 或 Play Store 上的单个应用设置推送通知那么简单。

因此,我们需要确保项目的用户能够正确、顺畅地完成设置流程,确保一切运行无误。

7 个赞

感谢大家的反馈。如果还有其他问题,请随时告诉我。

顺便提一下,我忘了提到,我们今天在 ProductHunt 上也发布了一篇帖子,表现相当不错。如果您想表示支持,欢迎前去查看!

https://www.producthunt.com/posts/lexicon-2

1 个赞

啊,好的,感谢澄清!Lexicon 听起来非常有趣。我很期待平板支持的到来!

如果我想基于 Discourse 构建一个社交媒体平台,Lexicon 会是理想的选择吗?假设 Lexicon 未来不会登陆桌面平台,那么桌面端的支持将会成为一个障碍。

1 个赞

真令人兴奋!

几点评论/问题:

  1. 目前尚不清楚是否支持 DiscourseConnect;或许值得将其添加到“支持的功能”页面中。

  2. 教程和文档中提供了大量关于安装 Prose 的选项。我怀疑这些内容可以更好地组织。在使用您的 Docker 镜像尽可能简化操作时,我发现自己不太清楚 SSL 设置将如何运作。

  3. 我很想试用一下,但目前没有明显的方法。如果您能为 Meta 发布一个应用,那我们就太好了 :slight_smile:

  4. 正如您提到的,推送通知和深度链接在我看来绝对是重要的功能。

  5. 考虑到更新、应用部署、Prose 等方面的复杂性,我很快便对贵方提供的付费一站式托管/支持服务产生了兴趣,由您来负责处理所有这些问题。或许值得提供这样的服务。我很好奇定价会是如何。

5 个赞

再加上平板支持,对吧?:wink:

1 个赞

这项工作做得非常出色。

4 个赞

Lexicon 有独立的 Discourse 社区吗?GitHub 很不错,但在那里无法以恰当的方式讨论 Lexicon。

5 个赞

你好,应用在加载包含非英文字符(例如中文)的帖子时似乎存在一些问题。我猜测这可能与 Discourse 的 Unicode 名称功能有关(https://meta.discourse.org/t/unicode-usernames-and-group-names/117737)。我已在 GitHub 仓库中提交了一个问题,并附上了详细的错误日志:

1 个赞

干得漂亮!你们是否已经引入了自动化内容审核方案?很希望能减少我在一些论坛中看到的滥用和垃圾信息。

我尝试按照 Lexicon 上提供的教程配置 Lexicon 移动应用。在完成所有步骤并启动用于免费 Discourse 实例(https://meta.discourse.org/)的移动应用后,我在手机和终端日志中分别收到了以下错误。

终端错误:

以下文件均不存在:

\generated\server\globalTypes(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)

src\generated\server\globalTypes\index(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)
 5 | import { DEFAULT_CHANNEL } from '../constants';
  6 | import { Text } from '../core-ui';
>  7 | import { TopicsSortEnum } from '../generated/server/globalTypes';
    |                                 ^
   8 | import {
  9 |   anchorToMarkdown,
 10 |   errorHandler,
2 个赞

在设置项目后,反复出现以下错误:

我已在 MOBILE_HOST_PRONE 中提供了 http://,但即使在手机上运行应用时仍显示错误。

1 个赞

此外还有另一个错误:
无法启动您的应用程序:未注册的应用程序。

1 个赞