Building a Native Android Social App Where People and AI Characters Share the Same Chat Layer
Public chose a third path: humans and characters both appear in the inbox, powered by one realtime layer.
重點摘要
Kotlin, Jetpack Compose, MVVM, and Socket.IO form the Android stack.
People chat and AI character chat share one Socket.IO transport but use different event flows.
The team uses full-message AI replies, optimistic UI, personas, Room caching, and a socket generation/reattach contract.
Public built a native Android social app that places human chat and AI character chat in the same product and the same realtime layer. The article walks through the app’s Kotlin, Jetpack Compose, MVVM, Hilt, Room, Retrofit, and Socket.IO stack, and explains why the team chose a single transport with separate protocols for people and characters. Human messages use a shared chat session and optimistic updates, while character chat sends persona and conversation metadata over sockets and receives full replies rather than token streaming. The post also covers caching, uploads, voice input/output, and the need for a socket generation and reattach mechanism so listeners survive feature-specific reconnects.
构建一款原生 Android 社交 App,让真人与 AI 角色共享同一聊天层
Public 选择了第三条路:真人和角色同时出现在收件箱里,由同一实时层驱动。
重點摘要
Android 技术栈以 Kotlin、Jetpack Compose、MVVM 和 Socket.IO 为核心。
真人聊天与 AI 角色聊天共用同一套 Socket.IO 传输,但事件流程不同。
采用完整消息回传、乐观 UI、persona、Room 缓存,以及 socket generation/reattach 机制。
Public 在原生 Android 社交 App 中,把真人聊天和 AI 角色聊天整合进同一产品与同一实时层。文章介绍了其 Kotlin、Jetpack Compose、MVVM、Hilt、Room、Retrofit 与 Socket.IO 技术栈,并说明为什么选择单一传输层,但为真人与角色设计不同协议。真人消息通过共享 chat session 和乐观更新处理;角色聊天则在 socket payload 中携带 persona 与 conversation 信息,并直接接收完整回复,而不是逐 token 流式输出。文中还讨论了缓存、上传、语音输入输出,以及 socket generation 与 reattach 机制如何避免监听器失效。
打造一款原生 Android 社交 App,讓真人與 AI 角色共用同一聊天層
Public 走出第三條路:真人與角色同時出現在收件匣中,並由同一個即時層驅動。
重點摘要
Android 技術棧以 Kotlin、Jetpack Compose、MVVM 與 Socket.IO 為核心。
真人聊天與 AI 角色聊天共用同一套 Socket.IO 傳輸,但事件流程不同。
採用完整訊息回傳、樂觀式 UI、persona、Room 快取,以及 socket generation/reattach 機制。
Public 在原生 Android 社交 App 中,將真人聊天與 AI 角色聊天整合到同一產品與同一即時層。文章說明其 Kotlin、Jetpack Compose、MVVM、Hilt、Room、Retrofit 與 Socket.IO 架構,並解釋為何採用單一傳輸層、但針對真人與角色設計不同協定。真人訊息透過共享 chat session 與樂觀更新處理;角色聊天則在 socket payload 中帶入 persona 與 conversation 資訊,並直接接收完整回覆,而非 token 串流。文中也談到快取、上傳、語音輸入輸出,以及 socket generation 與 reattach 機制如何避免監聽器失效。