Лексикон: настраиваемое нативное мобильное приложение для вашего сайта Discourse

Всем привет,

Хотел быстро заглянуть сюда и сообщить, что я только что открыл исходный код проекта под названием Lexicon вместе с моими коллегами.

Это готовое к использованию, настраиваемое нативное мобильное приложение, построенное на основе API Discourse. Мы создали его, чтобы помочь быстро интегрировать функции обсуждений и обмена сообщениями в другие нативные мобильные проекты.

Разработка этого проекта доставила нам огромное удовольствие, в первую очередь благодаря всей тяжелой работе, проделанной ранее командой ядра Discourse и сообществом на протяжении многих лет.

Скриншоты доступны в разделе введение.

Технически подкованные пользователи могут ознакомиться с нашим руководством по быстрому запуску, которое позволит вам просматривать этот сайт Discourse, одновременно тестируя приложение!

Не стесняйтесь обращаться к нам, если у вас возникнут вопросы, комментарии или предложения.

Спасибо,
Райан

P.S. Я не был уверен, в какую категорию лучше всего разместить этот пост. Если найдется более подходящая категория, не стесняйтесь переместить его туда.

58 лайков

Очень ценю чёткую документацию, особенно раздел про архитектуру. Не могу дождаться, когда проверю это локально!

Push-уведомления | :cross_mark::hammer: В разработке

Есть ли какие-то сроки по этому пункту?

8 лайков

Это здорово, @RyanKF! В каком направлении новичкам стоит помочь в первую очередь? У меня есть опыт разработки мобильных приложений на React.

3 лайка

Это очень круто. Похоже, что это под лицензией MIT?

1 лайк

О, это должно быть нативное приложение 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 вместо кнопки в заголовке на iOS.

11 лайков

Это лицензия MIT. И во всех остальных деталях анонса я забыл добавить файл LICENSE в репозиторий — спасибо, что указали на это!

6 лайков

И ты замечательный, что уже хочешь внести свой вклад, @4ong!

Фронтенд

Со стороны фронтенда я хотел бы улучшить поддержку функций, встроенных в исходное содержимое поста.

Помимо обработки обычного Markdown-содержимого поста, мы также можем поддерживать несколько функций, предоставляемых кастомной разметкой Discourse.

Как вам, возможно, уже известно, Discourse поддерживает специальный синтаксис для таких функций, как цитаты, переключатели, даты и даже опросы.

По довольно типичному подходу мы изначально реализовали базовую поддержку таких функций, как встраивание кода, а для функций, которые ещё не реализованы, отображаем блок «<функция> в данный момент не поддерживается».

Я бы хотел полностью убрать эти блоки «не поддерживается» из нашего приложения. Особое значение имеет поддержка опросов и переключателей.

Кроме того, поскольку Lexicon работает с исходным содержимым поста, мы обходим поддержку OneBox. Поэтому как минимум было бы хорошо иметь базовую поддержку предпросмотра ссылок.

Бэкенд

Одна функция, которую я очень хотел бы в конечном итоге реализовать, — это глубокие ссылки из писем. Вероятно, это непростая задача, и её реализация, скорее всего, потребует создания плагина Discourse на Ruby.

По сути, это позволит пользователям нажимать на ссылку на пост в письме от Discourse, и приложение (если установлено) откроет именно этот пост через глубокую ссылку через Discourse.

Если приложение не установлено или пользователь находится не на мобильном устройстве, его перенаправят на сайт как обычно.

Если кто-то хочет взяться за эту задачу, напишите мне. Было бы здорово, если бы это заработало.


РЕДАКТИРОВАНИЕ: Также ознакомьтесь со страницей Поддерживаемые функции Discourse в нашей документации, чтобы увидеть, какие функции ещё не поддерживаются, и не стесняйтесь взяться за любую из них (кроме push-уведомлений, над которыми мы уже работаем).

7 лайков

Оптимистично говоря, в ближайшие несколько недель — я пока не могу дать никаких твердых гарантий.

Мы уже прошли этап концепт-прототипа, но есть ещё некоторые шероховатости, которые нужно сгладить.

Поддержка этой функции потребует установки нашего плагина Discourse на вашем сайте.

Для справки: мы создали мобильное приложение Lexicon с помощью Expo — это потрясающий набор инструментов и сервисов для сборки приложений на React Native, который также поддерживает push-уведомления.

Однако нам не удалось найти существующие плагины Discourse, интегрированные со службой push-уведомлений Expo, поэтому пришлось разработать такой плагин самостоятельно. К счастью, существующая интеграция с открытым исходным кодом с OneSignal очень похожа на то, что нам было нужно, и мы смогли использовать их проект в качестве отправной точки. (Огромная благодарность pmusaraj за это :folded_hands:).

Помимо публикации плагина и его интеграции с мобильным приложением, нам, разумеется, потребуется обновить и документацию. Поскольку Lexicon позволяет вам публиковать собственное приложение, речь идёт не просто о настройке push-уведомлений для одного приложения в App Store или Google Play.

Поэтому мы хотим убедиться, что пользователи проекта получат чёткие инструкции по правильной настройке, чтобы всё работало как часы.

7 лайков

Спасибо всем за обратную связь. Если у вас появятся ещё вопросы, дайте знать.

Кстати, я забыл упомянуть, что сегодня у нас есть публикация на ProductHunt, которая идёт довольно хорошо. Если хотите поддержать, заходите, посмотрите!

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

1 лайк

А, понятно. Спасибо за разъяснение! Lexicon звучит действительно интересно. С нетерпением жду поддержки планшетов!

Если бы я хотел создать платформу для социальных сетей на базе Discourse, был бы Lexicon идеальным решением для этой цели? Если предположить, что Lexicon не появится на настольных платформах в будущем, отсутствие поддержки десктопов станет препятствием.

1 лайк

Звучит очень интересно!

Несколько комментариев и вопросов:

  1. Неясно, поддерживается ли DiscourseConnect; возможно, стоит добавить эту информацию на страницу поддерживаемых функций.

  2. В руководстве и документации представлено множество вариантов установки Prose. Похоже, этот материал можно было бы организовать лучше. Я запутался в том, как будет работать настройка SSL, если я попытаюсь сделать всё максимально просто, используя ваш Docker-образ.

  3. Мне бы очень хотелось попробовать это, но не видно очевидного способа сделать это. Если бы вы выпустили приложение для Meta, мы бы могли :slight_smile:

  4. Push-уведомления и глубокое связывание (deep linking), о которых вы упоминаете, безусловно, являются важными функциями в моём понимании.

  5. Учитывая сложность обновлений, развёртывания приложений, работы с Prose и т. д., у меня сразу возникает интерес к платному полностью готовому хостинговому/поддерживаемому сервису, где вы берёте всё это на себя. Возможно, стоит предложить такую услугу. Мне интересно, как бы выглядело ценообразование.

5 лайков

А также поддержка планшетов, верно? :wink:

1 лайк

отличная работа

4 лайка

Есть ли у Lexicon собственное сообщество на Discourse? GitHub хорош, но обсуждать Lexicon там по-настоящему невозможно.

5 лайков

Здравствуйте, похоже, возникла проблема при загрузке поста, содержащего символы не на английском языке (например, китайские иероглифы 中文). Я предполагаю, что это может быть связано с функцией Unicode-имен в Discourse (Unicode usernames and group names). Я создал проблему с подробным журналом ошибок в репозитории на 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 лайка

После настройки проекта повторяются следующие ошибки:


Я указал http:// в параметре MOBILE_HOST_PRONE, но при запуске приложения на телефоне всё равно возникает ошибка.

1 лайк

Также есть еще одна ошибка:
Не удалось запустить ваше приложение: no-registered-application.

1 лайк