Lexicon: un'app mobile native personalizzabile per il tuo sito Discourse

Ciao a tutti,

Volevo solo fare un salto qui per dirvi che ho appena reso open source un progetto chiamato Lexicon insieme ad alcuni colleghi.

Si tratta di un’app mobile nativa preconfigurata e personalizzabile, costruita sopra l’API di Discourse. L’abbiamo sviluppata per facilitare l’integrazione rapida di funzionalità di discussione e messaggistica in altri progetti mobili nativi.

Sviluppare questo progetto è stato davvero piacevole, soprattutto grazie al duro lavoro svolto in anticipo dal team core di Discourse e dalla comunità negli anni.

Gli screenshot sono disponibili nella introduzione.

Chi è più orientato alla tecnica può consultare la nostra Guida Rapida, che vi permetterà di navigare su questo sito Discourse mentre provate l’app!

Non esitate a contattarci se avete domande, commenti o feedback.

Grazie,
Ryan

P.S. Non ero sicuro di quale categoria fosse la migliore per questo post. Sentitevi liberi di spostarlo se esiste una categoria più adatta.

58 Mi Piace

Apprezzo davvero la documentazione chiara, in particolare quella relativa all’architettura. Non vedo l’ora di provarla in locale!

Notifiche push | :cross_mark::hammer: In sviluppo

C’è una tempistica prevista per questa funzionalità?

8 Mi Piace

È fantastico, @RyanKF! In quale direzione i nuovi sviluppatori dovrebbero dare priorità all’aiuto? Ho una certa esperienza con le app mobili in React.

3 Mi Piace

È molto figo. Sembra che sia sotto licenza MIT?

1 Mi Piace

Oh, si suppone che questo sia un client Discourse nativo come Fig? Se è così, mi piace davvero molto! :grinning:

4 Mi Piace

Fig sembra ottimo! Sembra che abbiano davvero centrato il bersaglio nel creare un’esperienza iOS nativa per Discourse.

Alcune differenze che noto…

Supporto per tablet

Fig offre un eccellente supporto per i tablet. Noi non abbiamo ancora affrontato questo aspetto.

App per singolo sito

Similmente a Discourse mobile, Fig ha adottato l’approccio del “gestore di siti”, permettendo di aggiungere più siti Discourse da navigare. Lexicon è invece più focalizzato sulla creazione di un’app individuale, eventualmente white-labeled, per un singolo sito Discourse.

Lexicon non è un’app

Inoltre, Lexicon è più un “template di app” che puoi prendere, personalizzare e pubblicare autonomamente sugli store App Store o Play Store. Fig, invece, fornisce un’app già pubblicata.

Offerta Premium

Fig propone un’offerta premium per alcune funzionalità. Lexicon non ha alcuna offerta premium.

L’unico punto in cui entrerebbe in gioco il denaro è se non aveste nessuno che vi aiuti a integrare, personalizzare o pubblicare Lexicon. In tal caso, saremmo lieti di discutere come collaborare con noi.

Detto questo, so che molti utenti di questo sito sono tecnici o semi-tecnici, quindi spero che la documentazione sia sufficientemente dettagliata da guidare molte persone in questo processo senza bisogno di ulteriori interventi.

Tecnologie e supporto dispositivi

Faccio un’ipotesi, ma sembra che Fig abbia sviluppato la propria app in Swift, quindi completamente nativa, il che è fantastico.

Noi abbiamo costruito Lexicon utilizzando React Native, il che significa con Javascript (è comprensibile che non a tutti piaccia questo approccio).

Uno dei vantaggi dell’uso di React Native è che otteniamo automaticamente app pubblicabili per Android e iOS “out of the box”, con un elevato tasso di riutilizzo del codice.

La maggior parte delle differenze tra Android e iOS nel nostro codice riguarda dettagli legati all’aspetto e all’esperienza utente, come un pulsante di azione fluttuante su Android, contrapposto a un pulsante nell’intestazione su iOS.

11 Mi Piace

È MIT. E in tutti gli altri dettagli dell’annuncio, avevo dimenticato di aggiungere un file LICENSE al repository - grazie per avermelo fatto notare!

6 Mi Piace

E sei fantastico per voler già contribuire, @4ong!

Frontend

Dal lato frontend, un’area in cui vorrei migliorare è il supporto per le funzionalità incorporate nel contenuto grezzo di un post.

Oltre a gestire il contenuto Markdown regolare del post, possiamo anche supportare diverse funzionalità fornite dal markup personalizzato di Discourse.

Come probabilmente sai già, Discourse supporta una sintassi personalizzata per funzionalità come citazioni, toggle, date e persino sondaggi.

In un approccio piuttosto tipico, abbiamo creato un supporto iniziale per funzionalità di base come gli embed di codice, e poi abbiamo inserito un blocco “ non è supportato al momento” per le funzionalità non ancora implementate.

Mi piacerebbe eliminare completamente quei blocchi “non supportato” dalla nostra app. In particolare, sarebbe fantastico avere il supporto per i sondaggi e i toggle.

Inoltre, poiché Lexicon opera sul contenuto grezzo di un post, aggiriamo il supporto OneBox. Quindi, come minimo, sarebbe bene avere un supporto di base per le anteprime dei link.

Backend

Una funzionalità che sono entusiasta di supportare in futuro è il deep linking dalle email. Probabilmente non è una funzionalità banale da implementare e richiederebbe probabilmente la creazione di un plugin Discourse in Ruby.

Essenzialmente, questo permetterebbe agli utenti di toccare un link a un post in un’email da Discourse e aprire l’app (se installata) direttamente su quel post specifico tramite un deep link attraverso Discourse.

E se l’app non è installata o l’utente non è su un dispositivo mobile, verrebbe reindirizzato al sito come al solito.

Se qualcuno vuole occuparsene, contattami. Sarebbe enorme vederlo funzionare.


EDIT: Dai un’occhiata anche alla pagina Funzionalità Discourse supportate della nostra documentazione per vedere quali funzionalità non sono ancora supportate e sentiti libero di occupartene (tranne le notifiche push, su cui stiamo già lavorando).

7 Mi Piace

Ottimisticamente, nelle prossime settimane qui — non posso ancora fare garanzie certe.

Siamo già oltre la fase di proof-of-concept, ma dobbiamo ancora levigare alcuni aspetti.

Il supporto per questa funzionalità richiederà l’installazione del nostro plugin Discourse sul tuo sito.

Per fornire alcuni dettagli, abbiamo sviluppato l’app mobile Lexicon con Expo, un insieme straordinario di strumenti di build e servizi per le app React Native, che include il supporto per le notifiche push.

Tuttavia, non siamo riusciti a trovare plugin Discourse esistenti che si integrassero con il servizio di push di Expo, quindi abbiamo dovuto costruirne uno. Fortunatamente, l’integrazione open source esistente con OneSignal è molto simile a ciò di cui avevamo bisogno, e siamo riusciti a utilizzare il loro progetto come punto di partenza. (molto grati a pmusaraj per questo :folded_hands:).

Oltre a pubblicare il plugin e integrarlo con l’app mobile, ovviamente vorremo aggiornare anche la documentazione. Poiché Lexicon ti permette di pubblicare la tua stessa app, si tratta di più che semplicemente configurare le notifiche push per una singola app sugli store App o Play.

Quindi vorremo assicurarci che gli utenti del progetto siano adeguatamente guidati nel processo di configurazione, in modo che funzioni semplicemente.

7 Mi Piace

Grazie a tutti per tutti i feedback. Fateci sapere se avete altre domande.

A proposito, ho dimenticato di menzionare che oggi abbiamo anche un post su ProductHunt che sta andando piuttosto bene. Se volete mostrare il vostro supporto, sentitevi liberi di darci un’occhiata!

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

1 Mi Piace

Ah, ok. Grazie per la chiarificazione! Lexicon sembra davvero interessante. Non vedo l’ora di avere il supporto per i tablet!

Se volessi creare una piattaforma di social media basata su Discourse, Lexicon sarebbe l’ideale per questo scopo? Supponendo che Lexicon non arrivi mai su piattaforme desktop in futuro, il supporto desktop rappresenterebbe un ostacolo.

1 Mi Piace

Molto entusiasmante!

Alcuni commenti/domande:

  1. Non è chiaro se DiscourseConnect sia supportato; potrebbe valere la pena aggiungerlo alla pagina delle funzionalità supportate.

  2. Ci sono molte opzioni disponibili per le modalità di installazione di Prose, sia nel tutorial che nella documentazione. Sospetto che quel materiale potrebbe essere organizzato meglio. Ho trovato poco chiaro come funzionerebbe la configurazione SSL se volessi procedere nel modo più semplice possibile utilizzando la tua immagine Docker.

  3. Mi piacerebbe molto provarlo, ma non c’è un modo ovvio per farlo. Se rendeste disponibile un’app per Meta, potremmo farlo :slight_smile:

  4. Le notifiche push e il deep linking, come menzionato, sono sicuramente funzionalità importanti ai miei occhi.

  5. Data la complessità degli aggiornamenti, della distribuzione delle app, di Prose, ecc., la mia mente corre subito all’idea di un servizio a pagamento “chiavi in mano” ospitato e supportato in cui voi gestite tutto questo. Potrebbe valere la pena offrirlo. Sono curioso di sapere come sarebbe la struttura dei prezzi.

5 Mi Piace

Insieme al supporto per tablet, giusto? :wink:

1 Mi Piace

questo è un lavoro eccellente

4 Mi Piace

Lexicon ha una propria community su Discourse? GitHub è ottimo, ma non è possibile discutere di Lexicon lì in modo appropriato.

5 Mi Piace

Ciao, sembra esserci un problema quando l’applicazione carica un post contenente caratteri non inglesi (ad esempio caratteri cinesi 中文). Ho ipotizzato che ciò possa essere correlato alla funzionalità dei nomi utente Unicode di Discourse (Unicode usernames and group names) e ho aperto una segnalazione per inserire il registro degli errori dettagliato nel repository di GitHub:

1 Mi Piace

Ottimo! Hai già integrato soluzioni di moderazione automatizzata? Mi piacerebbe ridurre gli abusi e lo spam che vedo in alcuni forum.

Ho provato a configurare l’app mobile Lexicon seguendo la Guida disponibile su Lexicon. Dopo aver completato tutti i passaggi e avviato l’app mobile per un’istanza Discourse gratuita (https://meta.discourse.org/), ricevo questi errori rispettivamente sul telefono e nel log del terminale.

Errore del terminale:

Nessuno di questi file esiste:

\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 Mi Piace

Dopo aver configurato il progetto, si verificano ripetutamente i seguenti errori:


Ho incluso http:// in MOBILE_HOST_PRONE, ma nonostante ciò viene visualizzato un errore durante l’esecuzione dell’app sul telefono.

1 Mi Piace

Inoltre, un altro errore è questo:
Impossibile avviare l’applicazione: no-registered-application.

1 Mi Piace