# NodeLoc APP更新日志（当前v0.3.4）

**URL:** <https://www.nodeloc.com/t/topic/105845>\
**Category:** NodeLoc APP\
**Created:** [2026 年8 月 30 日 10:39 UTC](https://www.nodeloc.com/t/topic/105845 "2026-08-30T10:39:26Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

作者： ![lezi-fun](https://www.nodeloc.com/user_avatar/www.nodeloc.com/lezi-fun/32/45880_2.png) [@lezi-fun](https://www.nodeloc.com/u/lezi-fun)\
发布日期： [2026 年8 月 30 日 10:39 UTC](https://www.nodeloc.com/t/topic/105845/1 "2026-08-30T10:39:27Z")

</div>

# NodeLoc App 版本更新日志

仓库地址：[GitHub - lezi-fun/nodeloc-app: NodeLoc.com 的第三方 Android 原生客户端 · GitHub](https://github.com/lezi-fun/nodeloc-app)

> **NodeLoc App v0.3.4**
>
> # NodeLoc App v0.3.4
> 
> > 本次更新基于 v0.3.3，重点带来 **Discourse 风格通知中心** 、 **Android 系统通知** 和  
> > **聊天入口** ，同时修复 onebox 图片、话题顶 / 降投票、签到和应用更新检测等问题。  
> > 通知从应用内延伸到了系统界面，帖子投票也改为与 Discourse Post Voting 一致的真实行为。
> 
> * * *
> 
> ## 重点内容：你现在可以
> 
> - **从首页直接处理通知** ：右上角头像显示未读数量，点击后快速浏览最近通知
> - **在系统通知栏收到提醒** ：点击 Android 系统通知可直达应用通知中心
> - **从侧边栏进入聊天** ：NodeLoc Chat 会继续使用当前登录状态
> - **使用真正的顶 / 降投票** ：不再显示回应列表，也不再通过长按选择表情
> - **正确查看 onebox 图片** ：缩略图、全尺寸图片和延迟加载图片会按实际结构展示
> 
> * * *
> 
> ## 概览
> 
> 这一版的第一条主线是通知体验。首页新增用户头像与未读角标，头像菜单、完整通知页和  
> Android 系统通知共享同一套通知数据；阅读单条通知只更新对应项目，“全部已读”仍由用户  
> 主动触发。应用启动、回到前台和后台周期任务都会检查新通知，Android 13 及以上系统会在  
> 首次打开应用时尝试请求通知权限。
> 
> 第二条主线是对齐 Discourse 的真实行为。onebox 图片重新区分左侧缩略图与全宽图片，并支持  
> 延迟加载地址；话题顶 / 降改为使用 Discourse Post Voting 接口和服务端状态，不再复用表情  
> 回应逻辑。同时修复正式版本检测、签到请求以及正文大图展示问题。
> 
> **发布日期** ：2026-09-06
> 
> **更新规模** ：6 commits | 20 files changed | +1,165 / -215 lines
> 
> * * *
> 
> ## 新功能
> 
> ### Discourse 风格通知中心
> 
> 首页右上角现在显示当前用户头像和未读通知数量。点击头像会先打开原生通知菜单，  
> 可以快速浏览最近通知，而不是直接跳转到新页面。
> 
> - 展示来源用户、头像、话题标题、发生时间和未读状态
> - 点击单条通知后，仅将该通知标记为已读并跳转到对应话题
> - 提供完整通知列表和由用户主动触发的“全部已读”操作
> - 打开通知列表不会自动清空未读通知
> - 阅读通知后会及时刷新首页未读角标
> 
> ### Android 系统通知
> 
> NodeLoc 的新通知现在可以同步显示在 Android 通知栏中。
> 
> - 点击系统通知可直接进入应用通知中心
> - 多条通知会合并展示，减少通知栏占用
> - 已提醒的通知会被记录，避免重复打扰
> - 应用启动、回到前台以及后台周期任务都会检查新通知
> - Android 13 及以上系统会在首次打开应用时尝试请求通知权限
> 
> ### 聊天入口
> 
> 侧边栏新增“聊天”入口，使用当前登录状态打开 NodeLoc Chat，无需再次登录。  
> 当前版本使用应用内网页承载聊天，后续版本将继续完善原生聊天体验。
> 
> * * *
> 
> ## 修复
> 
> ### onebox 图片正确显示
> 
> 修复 onebox 中包含图片时无法正确渲染的问题，并按 Discourse 的实际结构区分图片形态。
> 
> - 普通 `.aspect-image` 按左侧缩略图显示
> - `.aspect-image-full-size` 按全宽大图显示
> - 支持 `data-src`、`data-original-src`、`data-lazy-src` 和延迟加载 `srcset`
> - 优先使用真实图片地址，避免把数据占位图当成最终图片
> 
> ### 话题顶 / 降恢复为真正的投票
> 
> 顶 / 降操作现已接入 Discourse Post Voting 的投票接口和状态，不再复用表情回应逻辑。
> 
> - 不再显示回应用户列表
> - 移除长按选择其他回应的操作
> - 再次点击相同方向会撤销当前投票
> - 切换投票方向时会正确更新票数和选中状态
> - 仅在启用 Post Voting 的话题中显示投票控件
> 
> ### 应用更新提示恢复正常
> 
> - 自动构建版本改为预发布版本，不再覆盖 GitHub 上的正式最新版
> - 版本比较只识别 `v1.2.3` 这类正式版本号
> - 构建标签不会再被误判为比当前版本更旧或更新的正式版本
> 
> ### 签到稳定性修复
> 
> - 修正签到请求随机标识的长度
> - 补齐站点来源信息，解决部分情况下签到请求被服务端拒绝的问题
> 
> ### 正文图片显示修复
> 
> 正文中的大图恢复为完整图片展示，不再错误显示成缩略图加链接。
> 
> * * *
> 
> ## 升级提醒
> 
> - 可以直接从 v0.3.3 升级到 v0.3.4，无需清除应用数据
> - Android 13 及以上用户首次打开新版时，请允许通知权限以接收系统通知
> - 如果此前拒绝了通知权限，可以在 Android 系统设置的应用通知页面重新开启
> - Android 后台任务由系统统一调度，省电模式下通知检查可能延迟
> - 当前聊天入口仍使用应用内网页，尚未提供完整原生聊天界面
> 
> * * *
> 
> ## 下载与安装
> 
> 访问 [GitHub Releases](https://github.com/lezi-fun/nodeloc-app/releases/tag/v0.3.4) 下载对应版本。  
> 应用要求 **Android 8.0（API 26）及以上版本** 。
> 
> | 文件 | 适用设备 | 建议 |
> | --- | --- | --- |
> | `nodeloc-universal-v0.3.4.apk` | 所有受支持设备 | **推荐** ，不确定架构时选择此版本 |
> | `nodeloc-arm64-v8a-v0.3.4.apk` | 大多数现代 Android 手机和平板 | ARM64 设备可优先选择 |
> | `nodeloc-armeabi-v7a-v0.3.4.apk` | 较旧的 32 位 ARM 设备 | 仅旧设备需要 |
> | `nodeloc-x86_64-v0.3.4.apk` | 64 位 x86 模拟器或设备 | 主要用于测试环境 |
> | `nodeloc-x86-v0.3.4.apk` | 32 位 x86 模拟器或设备 | 主要用于旧测试环境 |
> 
> 下载完成后可直接覆盖安装现有版本。如果系统阻止安装，请在 Android 设置中允许当前下载来源  
> 安装未知应用。
> 
> ## 完整变更
> 
> [v0.3.3…v0.3.4](https://github.com/lezi-fun/nodeloc-app/compare/v0.3.3...v0.3.4)

* * *

> **NodeLoc App v0.3.3**
>
> ## **NodeLoc App v0.3.3**
> 
> > 这一版是还账的一版：把上一版里"看着能用、其实没跑通"的几处逐一拆开，对照 Discourse 官方源码（`discourse/discourse` 的 `frontend/discourse-markdown-it`、`app/lib/composer/toolbar.ts`、`common/base/onebox.scss` 等）重写。 **Markdown 预览** 此前一律报"找不到请求的资源"——根因是 `POST /posts/preview.json` 这个端点在 Discourse 上并不存在，官网 composer 的预览本来就跑在浏览器里，于是改为本地 CommonMark 渲染，并按 `setup.js` 的选项对齐单换行、原始 HTML 与 `:emoji:` 图片属性； **第三方登录** 此前的自定义 scheme 回跳永远不会触发（`redirect_uri` 注册在提供商侧，实测指向站点自己的 `/auth/{provider}/callback`），改为应用内 WebView 走完授权后接管会话 cookie； **onebox 链接卡片** 按官网 SCSS 实测值重写，区分外链卡片与站内话题引用两种形态。界面侧把 **编辑器工具栏** 补齐成官网 composer 的菜单结构（标题 / 列表 / `+` 三个弹出菜单）， **Markdown 与渲染视图的切换** 换成官网那个分段滑动开关， **表情按钮** 从带头发的脸换成官网的 `far-face-smile`，选择面板改成裸图网格。功能侧新增 **帖子投票** （顶 / 踩，替代点赞）、 **发私信** 、 **复制 Markdown** 、 **退出登录** 。
> 
> **发布日期** ：2026-09-01
> 
> **更新规模** ：30 commits | +1,969 / -805 lines
> 
> * * *
> 
> ## **重点内容：你现在可以**
> 
> - **正常使用 Markdown 预览** ：创建话题、楼层回复、编辑帖子三处的预览都改为本地渲染，不再依赖不存在的服务端端点，加粗、斜体、列表、表格、删除线、自动链接与 `:emoji:` 简码均可预览，单换行按站点设置渲染成换行。
> - **在应用内完成第三方登录** ：点击 Google / GitHub / X / Telegram 后在应用内打开授权页，授权完成、从提供商跳回站点域时自动取回会话并关闭页面，不再跳出到外部浏览器、也不再卡在回调上。
> - **看到与官网一致的链接卡片** ：外链 onebox 显示来源域名、按原始宽高比铺满的缩略图、标题与描述；站内话题引用显示头像、话题标题、分类徽章与摘要，两者形态分开。
> - **用官网那套编辑器工具栏** ：标题、列表各有弹出菜单（含任务清单），`+` 菜单提供代码块 / 插入表格 / 应用 wrap，最左侧是 Markdown 与渲染视图的分段切换开关。
> - **给帖子投票、给用户发私信** ：顶 / 踩按钮替代原来的点赞，帖子本身计 1 票；用户资料页可直接发私信。
> 
> * * *
> 
> ## **新功能**
> 
> ### **编辑器工具栏对齐官网 composer 的菜单结构**
> 
> 按官网 `frontend/discourse/app/lib/composer/toolbar.ts` 的 `this.groups` 重排分组顺序为 `fontStyles → insertions → extras`。标题与列表改为弹出菜单而非直接插入：标题菜单 6 项（标题 1-4 / 正文 / 小号文字，分别对应 `applyHeading(1..4)`、level 0 去掉行首 `#`、`<small></small>`），列表菜单 3 项（无序 / 有序 / 任务清单，后者是官网 checklist 插件注入 list 菜单的 `- [] `）。新增 `+` 菜单，对应官网 `popupMenuOptions` 里与排版相关的项：代码块、插入表格、应用 wrap（`[wrap]…[/wrap]`）。代码按官网 `if (!this.capabilities.touch)` 的做法从触屏主栏移出，改由 `+` 菜单提供。`MarkdownEditing` 新增 `insertTable`，插入 GFM 表格骨架并选中首个表头单元格。（[e5ba705](https://github.com/lezi-fun/nodeloc-app/commit/e5ba705)）
> 
> ### **Markdown / 渲染视图的分段切换开关**
> 
> 复刻官网 composer 工具栏最左侧的 `ComposerToggleSwitch`（`components/composer/toggle-switch.gjs`）：灰底滑轨上一块浅色滑块，左格是 Font Awesome brands 的 markdown 标记、右格是字母 A，滑块位置表示当前视图。尺寸与配色照 `common/components/composer-toggle-switch.scss` 取值——轨道 52×26、滑块 24×22（轨道高减 `--space-half` / `--space-1`）、内缩 2px、Markdown 态滑块 x=2px、另一态 x=26px（轨道宽减轨道高）。左格图标用 Font Awesome free brands 的 markdown 原始路径构造 `ImageVector`，与官网 `dIcon "fab-markdown"` 同源。开关渲染在所有工具栏按钮之前，与 `d-editor.gjs` 的顺序一致，原来的眼睛按钮与状态文字行一并移除。新增 `ComposerToggleSwitch.kt`。（[751e778](https://github.com/lezi-fun/nodeloc-app/commit/751e778)）
> 
> ### **帖子投票（顶 / 踩）**
> 
> 新增投票 API 与界面，投票按钮替代原来的点赞按钮而非与其并存。帖子本身计作 1 票，初始分数为 1。顶 / 踩箭头改用官网 `arrow-big-up` / `arrow-big-down` 的原始 SVG 路径构造 `ImageVector`，不再用 Material Icons 的细箭头。（[88ba1fa](https://github.com/lezi-fun/nodeloc-app/commit/88ba1fa), [59486af](https://github.com/lezi-fun/nodeloc-app/commit/59486af), [c49dc5b](https://github.com/lezi-fun/nodeloc-app/commit/c49dc5b), [24a1aa8](https://github.com/lezi-fun/nodeloc-app/commit/24a1aa8)）
> 
> ### **发私信**
> 
> 新增 `DiscourseApi.sendPrivateMessage()`，通过 `archetype=private_message` 发送。用户资料页新增"发私信"入口，配套 `SendMessageDialog` 组件用于撰写。（[74bd6c2](https://github.com/lezi-fun/nodeloc-app/commit/74bd6c2)）
> 
> ### **复制 Markdown 与退出登录**
> 
> 帖子"更多"菜单新增复制 Markdown 原文。设置界面新增退出登录。（[d04e1a0](https://github.com/lezi-fun/nodeloc-app/commit/d04e1a0), [e849af8](https://github.com/lezi-fun/nodeloc-app/commit/e849af8)）
> 
> ### **回复与编辑体验**
> 
> `DiscourseApi.createPost()` 改为返回新建的 `PostDto`，回复成功后在本地直接插入新楼层而不是整页刷新，嵌套模式下自动更新父帖的子回复列表，避免页面跳动与闪烁。编辑帖子时自动预填充原内容。（[289cf14](https://github.com/lezi-fun/nodeloc-app/commit/289cf14), [99125c8](https://github.com/lezi-fun/nodeloc-app/commit/99125c8)）
> 
> * * *
> 
> ## **修复**
> 
> ### **Markdown 预览：改为本地渲染**
> 
> 此前点击预览一律报"找不到请求的资源。"。根因是 `POST /posts/preview.json` 在 Discourse 上并不存在——实测该路径与 `/posts/preview`、`/composer/preview.json` 都返回 404，官网 composer 的预览本来就是浏览器里 markdown-it 客户端渲染，没有服务端预览端点。改为本地渲染：新增 `MarkdownPreview.kt`，用 CommonMark 走同一份规范，并补上 GFM 表格、删除线、自动链接扩展，产出的 HTML 交给 `CookedText`，与帖子正文共用同一套排版和图片 / 链接处理。创建话题、楼层回复、编辑帖子三处预览统一切过来，删掉已无调用点的 `previewPost` 与 `PostPreviewDto`。（[d64adce](https://github.com/lezi-fun/nodeloc-app/commit/d64adce), [747f774](https://github.com/lezi-fun/nodeloc-app/commit/747f774), [e645917](https://github.com/lezi-fun/nodeloc-app/commit/e645917)）
> 
> ### **预览渲染细节对齐 discourse-markdown-it**
> 
> 照 `frontend/discourse-markdown-it/src/setup.js` 的 `markdownItOptions` 逐项核对，纠正三处不一致：`softbreak` 渲染成 `<br>`（官网 `breaks: !traditional_markdown_linebreaks`，本站未开该设置，帖子 cooked 里单换行确实是 `<br>`，而 CommonMark 默认行为不同）；`escapeHtml(false)` 对齐 `html: true`，正文里的原始 HTML 交给 `CookedText` 处理而非在渲染层转义；`:emoji:` 图片属性照 `features/emoji.js` 与站点实际 cooked 对齐——`emoji_set` 是 `unicode` 而非 `twitter`、版本号 `?v=15`、`title` / `alt` 带冒号、固定 20×20。（[060aec0](https://github.com/lezi-fun/nodeloc-app/commit/060aec0)）
> 
> ### **第三方登录：改为应用内 WebView 完成**
> 
> 原实现有两处硬伤：用 CustomTabs 跳外部浏览器、靠 `nodeloc://auth?payload=` 回跳，但 Discourse 的 `redirect_uri` 注册在提供商侧（实测 `/auth/github` 302 到 GitHub 时带的是 `https://www.nodeloc.com/auth/github/callback`），不会跳自定义 scheme，这个 deeplink 永远不触发；兑换调用打的 `/session/current_user_confirm_session` 实测 404。Discourse 的 OAuth 会话完全建立在服务端，授权后回到站点 `/auth/{provider}/callback` 时下发 `_t` / `_forum_session` cookie——没有 token 要兑换，也不能后台重放 callback（OAuth 的 state 一次性）。改为新增 `OAuthLoginDialog`：应用内 WebView 加载 `/auth/{provider}`，用户在提供商页面授权，检测到从提供商跳回站点域即取 `CookieManager` 里的会话 cookie 并关闭 WebView，再由 `SessionStore.adoptCookieHeader` 同步进 OkHttp 的 `CookieJar`，最后经 `/session/current.json` 确认登录态。删掉失效的 `nodeloc://auth` deeplink、`AuthCallbackHandler` 与 `loginWithPayload`。（[b7c82f5](https://github.com/lezi-fun/nodeloc-app/commit/b7c82f5)）
> 
> ### **第三方登录：以"跳回站点域"为完成信号**
> 
> 上一步的判定盯的是 `/auth/*/callback` 这个具体路径，但流程第一步加载的 `/auth/{provider}` 本身也在站点域下，一旦 WebView 里残留 `_t` cookie 就会被误判成已完成。改成按提供商跳转的实际形态判定：先记录是否已离开站点域（即已进入提供商授权页），只有离开过再跳回站点才算走完授权，不再依赖 callback 的路径拼写；站点域改用主机名比对，避免 `www` / 尾斜杠差异；拿不到 `_t` 时保持 WebView 打开（首次登录可能要补注册表单），后续页面加载会再判一次而不是直接失败。（[3fb43b4](https://github.com/lezi-fun/nodeloc-app/commit/3fb43b4)）
> 
> ### **onebox：对齐官网的内 / 外链两种形态**
> 
> 照站点真实 cooked HTML 取样重写。外链 `aside.onebox`：标题链接改取 `h3 > a`（原实现取第一个 `<a>`，实际拿到的是 `header.source` 里的域名链接）；来源域名取 `header.source`；缩略图按 `.aspect-image` 的 `--aspect-ratio` 或 `img` 的 width / height 铺满卡片宽度，原实现固定 64dp 方图，与官网差别明显。站内 `aside.quote[data-topic]`：新增独立的 `InternalTopicQuote`，24px 头像 + 话题链接 + 分类徽章 + blockquote 摘要，徽章颜色解析官网内联的 `--category-badge-color` / `--category-badge-text-color`；原先并入通用 `QuoteBlock`，把 `.title` 压成一行纯文本，头像、链接、徽章全丢了。`inline-onebox` 经核对无需改动——官网它只是把裸 URL 换成页面标题的普通行内链接，不是卡片。（[c512b6f](https://github.com/lezi-fun/nodeloc-app/commit/c512b6f)）
> 
> ### **onebox：按 SCSS 实测值校正**
> 
> 补做样式核对（`common/base/onebox.scss`、`common/base/topic-post.scss`、`common/base/discourse.scss`），改掉三处凭猜写错的地方。外链卡片删掉左侧 3px 强调色竖线——这条线根本不属于它，`onebox-shadow` mixin 是 `border: 0` 加 `box-shadow: 0 0 0 1px --onebox-border-color, 0 0 0 4px --onebox-shadow-color`，改用 1px 描边 + 4px 浅色外圈还原；`border-left` 只在 `blockquote { aside.onebox { … } }` 即被引用块包住时出现，这种情形单独判断后才加。缩略图分两种形态：有 `.aspect-image` 包裹才铺满宽度，没有包裹时是 `float:left; max-width:35%（窄屏）; max-height:170px`，文字排在右侧，原实现一律铺满。站内引用补上属于它的 `border-left`（`--d-post-aside-border-left: 5px solid var(--primary-300)`，5px 中性灰而非强调色），标题与正文共用同一块 `--d-post-aside-background` 底色，删掉自行加的分隔线与两段不同背景。（[f157bc1](https://github.com/lezi-fun/nodeloc-app/commit/f157bc1)）
> 
> ### **表情：按钮图标与选择面板尺寸**
> 
> 工具栏表情按钮原用 `Icons.Filled.Face`，那是带头发的脸；官网 `enable-emoji.js` 用的是 `far-face-smile`——只有圆圈轮廓加两点眼睛和嘴，没有头发，已换成 `Icons.Outlined.SentimentSatisfiedAlt`。选择面板原用 Material 的 `AssistChip` 包每个表情，多出一圈边框和填充背景；官网 emoji picker 是 grid 排布的纯图片按钮，只有 hover / focus 时才出现浅色底与圆角，已改成裸图网格。单元格尺寸按 `common/components/emoji-picker.scss` 实测值取——`.emoji { width: 24px; height: 24px; padding: 6px }`，即图片 24dp、单元格 36dp，间距由单元格内边距提供，网格不再额外留 gap；分区标题按 `.emoji-picker__section-title` 取 `font-down-2` 与 `padding: 0.5rem`。（[4da98b9](https://github.com/lezi-fun/nodeloc-app/commit/4da98b9), [f581f05](https://github.com/lezi-fun/nodeloc-app/commit/f581f05)）
> 
> ### **帖子渲染问题**
> 
> 修复 Markdown 图片语法 `![alt](url)` 的渲染支持；小程序改为显示可点击卡片，点击后在独立 Activity 中打开；修复 `<details>` 标签导致的崩溃（Jsoup 不支持 `:scope` 选择器）。（[f704883](https://github.com/lezi-fun/nodeloc-app/commit/f704883)）
> 
> ### **点赞图标与按钮状态**
> 
> 点赞按钮从 emoji 图片改为 Material Icons：未点赞显示中空心形（`FavoriteBorder`），点赞后显示实心红色心形（`Favorite`），与官网行为一致。同时修复点赞后回复按钮暂时消失——用 `key(post.id, canReply)` 包裹操作按钮区域，确保点赞触发重组时按钮状态稳定。（[8cf3bd9](https://github.com/lezi-fun/nodeloc-app/commit/8cf3bd9), [84bed62](https://github.com/lezi-fun/nodeloc-app/commit/84bed62)）
> 
> ### **话题界面登录提示闪烁**
> 
> `loggedIn` 状态从 `Boolean` 改为 `Boolean?`，初始 `null` 表示未知。在登录状态检查完成前不渲染回复区域，避免从"登录后回复"跳变成回复输入框。（[5936f34](https://github.com/lezi-fun/nodeloc-app/commit/5936f34)）
> 
> ### **搜索类型选择**
> 
> 补上用户与分类搜索结果的显示逻辑，按搜索类型（话题 / 帖子、用户、节点 / 标签）展示对应结果列表，新增 `UserResultRow` 与 `CategoryResultRow` 组件；排序选项只在话题 / 帖子搜索时出现；新增 `onOpenProfile` 参数支持点击用户结果跳转资料页。（[c8f4a9b](https://github.com/lezi-fun/nodeloc-app/commit/c8f4a9b)）
> 
> * * *
> 
> ## **技术架构**
> 
> ### **本地 Markdown 渲染管线**
> 
> 新增依赖 `org.commonmark:commonmark:0.22.0` 及 GFM 表格 / 删除线 / 自动链接三个扩展。新增 `MarkdownPreview.kt` 作为单一渲染入口：`Parser` + `HtmlRenderer` 按官网 `markdownItOptions` 配置（`softbreak("<br>\n")`、`escapeHtml(false)`），输出 HTML 后再做 `:emoji:` 简码展开，交给既有的 `CookedText` 渲染。这样预览与帖子正文共用同一条渲染路径，图片、链接、代码块、引用的表现天然一致。
> 
> ### **会话 cookie 接管**
> 
> `SessionStore` 新增 `adoptCookieHeader()`，解析 `CookieManager.getCookie()` 返回的 `k=v; k=v` 串，取出 `_t` 与 `_forum_session` 写入自身，并清空旧 CSRF token（会话已换人）。`SessionRepo` 新增 `adoptWebViewSession()`，先接管 cookie 再经 `/session/current.json` 拉取当前用户确认登录态。WebView 与 OkHttp 由此共享同一份会话。
> 
> ### **Discourse 图标的 ImageVector 移植**
> 
> 官网用 Font Awesome 与自有 SVG sprite，Material Icons 里没有对应字形的按钮，改为按原始 path 数据构造 Compose `ImageVector`：投票的 `arrow-big-up` / `arrow-big-down` 取自站点 SVG sprite，切换开关左格的 markdown 标记取自 Font Awesome free brands 的 `markdown.svg`。
> 
> ### **CSS 变量解析**
> 
> `CookedText` 新增两个小工具：`aspectRatioOf()` 解析 `style="--aspect-ratio:690/361"` 得到宽高比，`cssVarColor()` 解析 `--category-badge-color: #F7941D` 这类内联 CSS 变量颜色（支持 3 / 6 / 8 位十六进制）。分类徽章与 onebox 缩略图比例都靠它还原官网取值。
> 
> ### **清理**
> 
> 删除已失效的代码：`DiscourseApi.previewPost`、`PostPreviewDto`、`AndroidManifest.xml` 里的 `nodeloc://auth` deeplink、`AuthCallbackHandler`、`DiscourseApi.loginWithPayload`。删除仓库根目录遗留的 5 个临时测试脚本（`test_device_info.sh` 等），以及 README 中过时的功能列表。（[5226990](https://github.com/lezi-fun/nodeloc-app/commit/5226990), [b055507](https://github.com/lezi-fun/nodeloc-app/commit/b055507)）
> 
> * * *
> 
> ## **已知限制**
> 
> - **bbcode 与 onebox 不进本地预览** ：`[quote]`、`[details]`、`[wrap]`、`[spoiler]` 等 Discourse 自有语法，以及链接的 onebox 卡片，CommonMark 不认，预览里会显示为原文。发布后由服务端正常渲染，不影响最终效果。
> - **`:emoji:` 简码没有名单校验** ：官网 `emoji.js` 只在简码命中内置 emoji 表时才替换成图片，未命中保留原文；本地没有那份表，只按"长度合理的简码"近似处理，因此打错的简码在预览里会显示为裂图。
> - **第三方登录的收尾未实测** ：已验证点击后应用内 WebView 正常停在提供商授权页（未跳出外部浏览器），但"授权完成后跳回站点域并取回 cookie"这一步需要真实账号授权才能走通，尚未实测。
> - **表情选择面板缺分类导航与肤色选择** ：官网 emoji picker 另有分类导航栏与 Fitzpatrick 肤色选择器，本版只对齐了单元格与分区版式。
> 
> * * *
> 
> ## **下载与安装**
> 
> 访问 [Releases](https://github.com/lezi-fun/nodeloc-app/releases/latest) 下载对应版本，或从官网获取。
> 
> ### **Android**
> 
> 支持 **arm64-v8a** 、 **armeabi-v7a** 、 **x86\_64** 和 **x86** 四种架构，同时提供 **universal APK** （包含所有架构）。
> 
> | **架构** | **文件名** |
> | --- | --- |
> | Universal（推荐） | `nodeloc-v0.3.3-universal.apk` |
> | ARM64 | `nodeloc-v0.3.3-arm64-v8a.apk` |
> | ARM32 | `nodeloc-v0.3.3-armeabi-v7a.apk` |
> | x86\_64 | `nodeloc-v0.3.3-x86_64.apk` |
> | x86 | `nodeloc-v0.3.3-x86.apk` |
> 
> **安装方式** ：下载后直接安装，首次安装需允许"安装未知应用"权限。

* * *

> **NodeLoc App v0.3.2**
>
> ## **NodeLoc App v0.3.2**
> 
> > 这一版围绕实时性与自动化补两笔硬账： **应用自动更新系统** ——启动时自动检查 GitHub Release 最新版本，Material 3 风格更新提示对话框显示版本号和更新内容，一键下载 universal APK 并自动触发安装，支持版本号智能比较（x.y.z 格式），后台下载进度通知，完成后弹出系统安装界面； **MessageBus 实时消息推送** ——完整实现 Discourse MessageBus 长轮询机制，支持 15+ 个频道类型订阅（/latest、/topic/{id}、/categories 等），自动重连机制（指数退避策略），话题详情页动态订阅收到更新时自动刷新。用户体验侧新增 **发帖设备信息显示** ，根据 `post_source_level` 设置自动添加设备信息，话题详情页显示发帖设备徽章（平台、品牌、型号），圆角背景徽章样式与称号样式保持一致。本版 **初始版本设为 v0.0.1** ，版本号统一管理支持通过 `-PappVersion` 或环境变量指定。
> 
> **发布日期** ：2026-08-30
> 
> **更新规模** ：15 commits | +2,800 / -150 lines
> 
> * * *
> 
> ## **重点内容：你现在可以**
> 
> - **启动时自动检查应用更新** ：应用启动时自动检查 GitHub Release 最新版本，发现新版本时弹出 Material 3 风格对话框，显示版本号和更新内容，点击"前往下载"后台下载 universal APK，下载完成自动弹出系统安装界面。
> - **实时接收社区消息推送** ：完整的 MessageBus 长轮询系统，支持订阅话题更新、新帖提醒、私信通知等 15+ 个频道，自动重连机制（指数退避），话题页动态订阅实时刷新。
> - **查看发帖设备信息** ：话题详情页显示每条帖子的发帖设备徽章（平台、品牌、型号），圆角背景样式与称号保持一致，发帖时根据设置自动添加设备信息。
> 
> * * *
> 
> ## **新功能**
> 
> ### **应用自动更新系统**
> 
> 启动时自动检查 GitHub Release 最新版本，Material 3 风格更新提示对话框显示版本号和更新内容。点击"前往下载"后台下载 universal APK 并自动触发安装，支持版本号智能比较（x.y.z 格式）。后台下载进度通知，完成后弹出系统安装界面。新增 `AppUpdateManager.kt` 管理 GitHub API 集成与版本比较，`ApkDownloadManager.kt` 处理 DownloadManager + BroadcastReceiver，`AppUpdateDialog.kt` 提供 Material 3 对话框。添加 FileProvider 支持 Android 7.0+ APK 安装，新增 `REQUEST_INSTALL_PACKAGES` 权限。（[1a09e42](https://github.com/lezi-fun/nodeloc-app/commit/1a09e42), [4b73a63](https://github.com/lezi-fun/nodeloc-app/commit/4b73a63), [37abe97](https://github.com/lezi-fun/nodeloc-app/commit/37abe97)）
> 
> ### **MessageBus 实时消息系统**
> 
> 完整实现 Discourse MessageBus 长轮询机制，用于接收服务端实时推送的消息。支持 15+ 个频道类型订阅（/latest、/topic/{id}、/categories、/delete、/recover、/destroy、/global/asset-version、/file-change、/site/banner、/site/read-only、/private-messages 等）。自动重连机制（指数退避策略），话题详情页动态订阅，收到更新时自动刷新。新增 `MessageBusClient.kt` 实现长轮询客户端，`MessageBusProvider.kt` 提供全局实例管理，`LocalMessageBus` 作为 Compose 组合本地变量。（[43bdaff](https://github.com/lezi-fun/nodeloc-app/commit/43bdaff), [eb0b17f](https://github.com/lezi-fun/nodeloc-app/commit/eb0b17f)）
> 
> ### **发帖设备信息显示**
> 
> 发帖时根据 `post_source_level` 设置自动添加设备信息（平台、品牌、型号）。话题详情页显示发帖设备徽章，圆角背景徽章样式与称号样式保持一致。新增 `DeviceInfoManager.kt` 获取设备信息，`PostSourceLevel` 枚举定义显示级别，`CookedText.kt` 渲染设备徽章。（[1a09e42](https://github.com/lezi-fun/nodeloc-app/commit/1a09e42), [56d13a5](https://github.com/lezi-fun/nodeloc-app/commit/56d13a5)）
> 
> ### **第三方登录系统**
> 
> 完整实现 OAuth 第三方登录流程，支持 Google、GitHub、Discord 等平台。新增 `OAuthActivity` 处理授权回调，`MainActivity` 接收第三方登录结果，`AuthRepository` 管理登录状态与会话。登录页显示第三方登录按钮，点击后跳转授权页面，授权成功后自动返回应用并完成登录。（[de43f6b](https://github.com/lezi-fun/nodeloc-app/commit/de43f6b), [f95b046](https://github.com/lezi-fun/nodeloc-app/commit/f95b046), [9b0b31f](https://github.com/lezi-fun/nodeloc-app/commit/9b0b31f)）
> 
> ### **设置页面与小程序 WebView**
> 
> 新增设置页面，支持主题切换、通知设置、账号管理等功能。小程序 WebView 优化加载体验，支持加载进度显示、错误提示、刷新重试。侧边栏小程序列表完善，显示小程序图标、名称、描述。（[1a4f904](https://github.com/lezi-fun/nodeloc-app/commit/1a4f904)）
> 
> ### **搜索类型选择与发帖来源 API**
> 
> 搜索页新增类型选择器，支持按话题、帖子、用户、标签等类型筛选搜索结果。发帖来源 API 集成，支持获取发帖设备信息配置，根据服务端设置决定是否显示设备信息。（[adccf33](https://github.com/lezi-fun/nodeloc-app/commit/adccf33)）
> 
> * * *
> 
> ## **修复**
> 
> ### **User-Agent 完全模拟真实 Android Chrome**
> 
> 修正 User-Agent 字符串，完全模拟真实 Android Chrome 浏览器，包含完整的设备型号、Android 版本、Chrome 版本等信息，确保与官网后端兼容。（[74c1f69](https://github.com/lezi-fun/nodeloc-app/commit/74c1f69)）
> 
> ### **签到请求格式修正**
> 
> 修正签到请求格式，确保 POST 请求参数与官网后端完全一致，解决签到失败问题。同时修复签到后的响应处理，正确显示签到结果提示。（[3ccd9fe](https://github.com/lezi-fun/nodeloc-app/commit/3ccd9fe), [8d87224](https://github.com/lezi-fun/nodeloc-app/commit/8d87224)）
> 
> ### **表情选择器与 Markdown 预览**
> 
> 修复表情选择器和 Markdown 预览功能，表情选择器按名称前缀正确分组，只显示 NodeLoc 自定义表情过滤系统表情。表情分组显示友好名称，提升用户体验。（[197fac8](https://github.com/lezi-fun/nodeloc-app/commit/197fac8), [273adcc](https://github.com/lezi-fun/nodeloc-app/commit/273adcc), [f098f4d](https://github.com/lezi-fun/nodeloc-app/commit/f098f4d), [8069c34](https://github.com/lezi-fun/nodeloc-app/commit/8069c34), [46ec296](https://github.com/lezi-fun/nodeloc-app/commit/46ec296)）
> 
> ### **侧边栏交互优化**
> 
> 禁用侧边栏滑动手势避免误触，点击侧边栏用户头像可打开个人资料页面。（[572b85b](https://github.com/lezi-fun/nodeloc-app/commit/572b85b), [5fc7c31](https://github.com/lezi-fun/nodeloc-app/commit/5fc7c31)）
> 
> * * *
> 
> ## **技术架构**
> 
> ### **版本号统一管理**
> 
> 初始版本设为 v0.0.1，版本号统一管理支持通过 `-PappVersion` 或环境变量 `APP_VERSION` 指定。`app/build.gradle.kts` 默认版本号从 `0.0.1` 开始，自动移除 `v` 前缀。（[27c698a](https://github.com/lezi-fun/nodeloc-app/commit/27c698a)）
> 
> ### **FileProvider 配置**
> 
> 添加 FileProvider 支持 Android 7.0+ APK 安装，`AndroidManifest.xml` 配置 `androidx.core.content.FileProvider`，`file_paths.xml` 定义外部下载目录路径。新增 `REQUEST_INSTALL_PACKAGES` 权限。
> 
> ### **APK 下载管理器**
> 
> 实现 APK 下载管理器，使用 DownloadManager 后台下载，BroadcastReceiver 监听下载完成，FileProvider 共享 APK 文件，ACTION\_VIEW 触发系统安装。
> 
> * * *
> 
> ## **下载与安装**
> 
> 访问 [Releases](https://github.com/lezi-fun/nodeloc-app/releases/latest) 下载对应版本，或从官网获取。
> 
> ### **Android**
> 
> 支持 **arm64-v8a** 、 **armeabi-v7a** 、 **x86\_64** 和 **x86** 四种架构，同时提供 **universal APK** （包含所有架构）。
> 
> | **架构** | **文件名** |
> | --- | --- |
> | Universal（推荐） | `nodeloc-v0.3.2-universal.apk` |
> | ARM64 | `nodeloc-v0.3.2-arm64-v8a.apk` |
> | ARM32 | `nodeloc-v0.3.2-armeabi-v7a.apk` |
> | x86\_64 | `nodeloc-v0.3.2-x86_64.apk` |
> | x86 | `nodeloc-v0.3.2-x86.apk` |
> 
> **安装方式** ：下载后直接安装，首次安装需允许"安装未知应用"权限。

* * *

> **NodeLoc App v0.3.1**
>
> * * *
> 
> ## **NodeLoc App v0.3.1**
> 
> > 这一版围绕表情系统与节点图标补两笔硬账： **站点自定义表情完整支持** ——表情选择器按分组显示 NodeLoc 自定义表情，按名称前缀正确分组，显示友好分组名称，过滤系统表情只显示自定义表情； **节点图标真实化** ——无图片节点显示默认图标，侧边栏小程序列表完善显示图标名称描述。功能侧新增 **后台检查 GitHub 新版本** ，静默检查不打扰用户，为后续自动更新功能奠定基础。体验侧修复侧边栏"查看更多内容"按钮对齐、编辑器附件上传参数补全、小程序 WebView 加载改善、创建话题编辑器操作修复、打赏能量图标颜色对齐、抽奖长按与图片链接展示修正、抽奖卡片交互对齐、外部链接安全提示增加、帖子图片与链接渲染改善、抽奖购票数量校验修复，全面完善帖子编辑器与社区交互。
> 
> **发布日期** ：2026-08-XX
> 
> **更新规模** ：20 commits | +1,500 / -200 lines
> 
> * * *
> 
> ## **重点内容：你现在可以**
> 
> - **使用 NodeLoc 站点自定义表情** ：表情选择器完整支持 NodeLoc 自定义表情，按分组显示友好名称，快速插入常用表情。
> - **后台静默检查应用更新** ：应用后台检查 GitHub Release 最新版本，为后续自动更新功能奠定基础，不干扰用户正常使用。
> - **看到真实的节点图标** ：无图片节点显示默认图标，侧边栏小程序列表完善显示，提升视觉一致性。
> 
> * * *
> 
> ## **新功能**
> 
> ### **站点自定义表情完整支持**
> 
> 表情选择器完整支持 NodeLoc 自定义表情，按分组显示友好名称（如"基础表情"、“动物”、"食物"等），按名称前缀正确分组。过滤系统表情只显示自定义表情，提升插入效率。表情选择器界面优化，支持快速滚动与搜索。（[a19d324](https://github.com/lezi-fun/nodeloc-app/commit/a19d324), [f098f4d](https://github.com/lezi-fun/nodeloc-app/commit/f098f4d), [273adcc](https://github.com/lezi-fun/nodeloc-app/commit/273adcc), [8069c34](https://github.com/lezi-fun/nodeloc-app/commit/8069c34), [46ec296](https://github.com/lezi-fun/nodeloc-app/commit/46ec296)）
> 
> ### **后台检查 GitHub 新版本**
> 
> 应用后台静默检查 GitHub Release 最新版本，不干扰用户正常使用。为后续自动更新功能奠定基础，支持版本号比较、Release Notes 获取、APK 下载链接解析。新增 `GitHubReleaseChecker.kt` 管理版本检查逻辑。（[066e4f9](https://github.com/lezi-fun/nodeloc-app/commit/066e4f9)）
> 
> ### **帖子编辑器与社区交互完善**
> 
> 完善帖子编辑器与社区交互，修复创建话题编辑器操作、补全编辑器附件上传参数、改善帖子图片与链接渲染。增加外部链接安全提示，点击外部链接前弹出确认对话框，显示目标域名和安全提示。（[6cd47da](https://github.com/lezi-fun/nodeloc-app/commit/6cd47da), [3e433d6](https://github.com/lezi-fun/nodeloc-app/commit/3e433d6), [66155af](https://github.com/lezi-fun/nodeloc-app/commit/66155af), [6b43c5c](https://github.com/lezi-fun/nodeloc-app/commit/6b43c5c), [caea6ae](https://github.com/lezi-fun/nodeloc-app/commit/caea6ae)）
> 
> * * *
> 
> ## **修复**
> 
> ### **节点图标真实化**
> 
> 无图片节点显示默认图标，不再显示空白或占位符。侧边栏小程序列表完善显示图标、名称、描述，提升视觉一致性。（[1776f8a](https://github.com/lezi-fun/nodeloc-app/commit/1776f8a), [3956f2e](https://github.com/lezi-fun/nodeloc-app/commit/3956f2e)）
> 
> ### **侧边栏查看更多内容对齐**
> 
> 对齐侧边栏"查看更多内容"按钮位置，修复按钮位置偏移问题，与官网保持一致。（[a5fe9c7](https://github.com/lezi-fun/nodeloc-app/commit/a5fe9c7)）
> 
> ### **小程序 WebView 加载改善**
> 
> 改善小程序 WebView 加载体验，支持加载进度显示、错误提示、刷新重试。优化 WebView 配置，提升加载速度与稳定性。（[28aa35f](https://github.com/lezi-fun/nodeloc-app/commit/28aa35f)）
> 
> ### **打赏能量图标颜色对齐**
> 
> 对齐打赏能量图标颜色，与官网保持一致，修复颜色偏差问题。（[e32c02a](https://github.com/lezi-fun/nodeloc-app/commit/e32c02a)）
> 
> ### **抽奖功能修复族**
> 
> 修正抽奖长按与图片链接展示，对齐抽奖卡片交互体验，修复抽奖购票数量校验。抽奖卡片按钮布局优化，购票数量输入框边界检查，随缘按钮长按反馈。（[21038a4](https://github.com/lezi-fun/nodeloc-app/commit/21038a4), [8475994](https://github.com/lezi-fun/nodeloc-app/commit/8475994), [11d2b5c](https://github.com/lezi-fun/nodeloc-app/commit/11d2b5c), [e6f1c66](https://github.com/lezi-fun/nodeloc-app/commit/e6f1c66)）
> 
> * * *
> 
> ## **下载与安装**
> 
> 访问 [Releases](https://github.com/lezi-fun/nodeloc-app/releases/v0.3.1) 下载对应版本。

* * *

> **NodeLoc App v0.3.0**
>
> ## **NodeLoc App v0.3.0**
> 
> > 这一版是功能爆发版，围绕 **管理员/版主权限系统** 、 **动态配置系统** 、 **用户主页** 、 **打赏能量** 、 **多样化反应** 、 **创建话题** 、 **回复增强** 、 **抽奖功能** 、 **小程序/小游戏** 九大模块全面对齐官网。楼层操作菜单新增管理功能（锁定、设为 Wiki、重新渲染、取消隐藏、变更所有者、永久删除），楼层操作（收藏、举报、删除、恢复、点赞）完全跟随服务端权限。侧栏节点、标签、小程序改为跟随服务端配置不再本地硬编码，创建话题的节点选择器改为可搜索的底部弹层。支持阅读进度上报（screen-track），对齐官网 POST /topics/timings 触发规则。支持编辑自己发过的帖子（PUT /posts/{id}），复用 Markdown 编辑器保持一致体验。用户主页完整展示头像、称号、简介、统计信息、最近帖子，支持称号动效（discourse-custom-badge 渐变流光文字）。完整支持 discourse-reward 打赏能量，话题和评论楼层均可打赏展示累计获赏能量。支持 discourse-reactions 帖子反应，单击切换默认赞长按弹出 7 种表情选择。主页右下角新建话题按钮进入创建话题界面（节点+标题+Markdown 正文）发布。回复栏支持插入 GIF（KLIPY 搜索经站点后端代理），Markdown 工具栏按官网 D-Editor 行为规范重实现粗体/斜体/标题/链接/引用/代码/列表。完整支持 discourse-lottery 帖子内抽奖，展示卡片、参与购票/随缘、发起者开奖与结束。支持渲染帖子内嵌小程序/小游戏（discourse-apps），用 WebView 加载官网自包含 webview 页面。话题列表和详情页的节点标签改用官网上传的图标图片不再是纯色圆点占位。抽屉用户区改用青铜/白银/黄金/钻石/王者会员称号不再显示 TL0~TL4。修复 TagDto 序列化器循环初始化导致主页加载崩溃。表单 POST 遇 403 时清空 CSRF 缓存并自动重试一次规避会话轮换导致的失败。兼容对象数组格式的话题标签列表与详情页渲染为官网风格标签胶囊。去掉主页顶部主题筛选条对齐官网仅保留新话题横幅与列表。主页顶部对齐官网登录用户显示签到图标+头像未登录显示绿色登录按钮。详情页底部回复真正可用 POST /posts 发送、失败文案、成功后刷新未登录回复栏引导登录。高级搜索筛选器改为不跨会话记忆进入搜索页自动折叠。头像等站点图片显式持久缓存内存 25% 堆 + 磁盘 64MB 冷启动直接命中。支持 workflow\_dispatch 手动填版本号触发部署 APK/tag/Release 按版本号命名。删除早期设计探索目录 design/（首页方案画布原型已不再使用）。忽略 Playwright MCP 调研留下的本地快照/日志目录。
> 
> **发布日期** ：2026-08-XX
> 
> **更新规模** ：32 commits | +8,500 / -1,200 lines
> 
> * * *
> 
> ## **重点内容：你现在可以**
> 
> - **作为管理员/版主管理社区内容** ：楼层操作菜单新增锁定、设为 Wiki、重新渲染、取消隐藏、变更所有者、永久删除等管理功能，所有操作完全跟随服务端权限。
> - **创建话题并发布到社区** ：主页右下角新建话题按钮，选择节点、填写标题、编写 Markdown 正文，一键发布到社区。回复栏支持插入 GIF、Markdown 工具栏（粗体/斜体/标题/链接/引用/代码/列表）。
> - **查看完整的用户主页** ：用户主页展示头像、称号（支持渐变流光动效）、简介、统计信息、最近帖子，全面了解用户信息。
> - **给帖子打赏能量** ：话题和评论楼层均可打赏能量，展示累计获赏能量，支持 discourse-reward 插件。
> - **使用多样化表情反应** ：帖子反应支持 7 种表情，单击切换默认赞，长按弹出表情选择器，支持 discourse-reactions 插件。
> - **参与帖子内抽奖** ：完整支持 discourse-lottery 抽奖，展示抽奖卡片、参与购票/随缘、发起者开奖与结束。
> - **玩帖子内小程序/小游戏** ：支持渲染帖子内嵌小程序/小游戏（discourse-apps），用 WebView 加载官网自包含 webview 页面。
> - **编辑自己发过的帖子** ：支持编辑自己发过的帖子（PUT /posts/{id}），复用 Markdown 编辑器保持一致体验。
> 
> * * *
> 
> ## **新功能**
> 
> ### **管理员/版主专属功能**
> 
> 楼层操作菜单新增管理功能：锁定、设为 Wiki、重新渲染、取消隐藏、变更所有者、永久删除。楼层操作（收藏、举报、删除、恢复、点赞）完全跟随服务端权限，非管理员/版主用户不显示管理功能。新增 `PostActionButton.kt` 渲染操作按钮，`PostRepository.kt` 调用管理 API。（[0f6b44b](https://github.com/lezi-fun/nodeloc-app/commit/0f6b44b), [752af3c](https://github.com/lezi-fun/nodeloc-app/commit/752af3c)）
> 
> ### **动态配置系统**
> 
> 侧栏节点、标签、小程序改为跟随服务端配置，不再本地硬编码。创建话题的节点选择器改为可搜索的底部弹层，无需滚动查找。新增 `SiteConfigRepository.kt` 获取服务端配置，`CategoryListScreen.kt` 动态渲染节点列表。（[32ec29a](https://github.com/lezi-fun/nodeloc-app/commit/32ec29a), [f66e384](https://github.com/lezi-fun/nodeloc-app/commit/f66e384)）
> 
> ### **阅读进度上报**
> 
> 支持 screen-track 阅读进度统计，对齐官网 POST /topics/timings 触发规则。新增 `ReadingProgressTracker.kt` 追踪阅读进度，`TopicDetailScreen.kt` 集成进度上报。（[0958a3a](https://github.com/lezi-fun/nodeloc-app/commit/0958a3a)）
> 
> ### **帖子编辑功能**
> 
> 支持编辑自己发过的帖子（PUT /posts/{id}），复用 Markdown 编辑器保持一致体验。楼层操作菜单显示"编辑"按钮（仅作者可见），点击进入编辑界面，修改后提交更新。（[af7478f](https://github.com/lezi-fun/nodeloc-app/commit/af7478f)）
> 
> ### **用户主页**
> 
> 完整的用户资料页面：头像、称号、简介、统计信息、最近帖子。支持称号动效（discourse-custom-badge 渐变流光文字）。新增 `UserProfileScreen.kt` 渲染用户主页，`UserRepository.kt` 获取用户信息，`BadgeText.kt` 渲染称号动效。（[3c38682](https://github.com/lezi-fun/nodeloc-app/commit/3c38682)）
> 
> ### **打赏能量系统**
> 
> 完整支持 discourse-reward 打赏能量，话题和评论楼层均可打赏，展示累计获赏能量。新增 `RewardButton.kt` 渲染打赏按钮，`RewardRepository.kt` 调用打赏 API。（[8cf3756](https://github.com/lezi-fun/nodeloc-app/commit/8cf3756)）
> 
> ### **多样化反应**
> 
> 支持 discourse-reactions 帖子反应，单击切换默认赞，长按弹出 7 种表情选择。新增 `ReactionButton.kt` 渲染反应按钮，`ReactionRepository.kt` 调用反应 API。（[bec3e42](https://github.com/lezi-fun/nodeloc-app/commit/bec3e42)）
> 
> ### **创建话题**
> 
> 主页右下角新建话题按钮，进入创建话题界面（节点+标题+Markdown 正文）发布。新增 `CreateTopicScreen.kt` 渲染创建界面，`TopicRepository.kt` 调用创建 API。（[67bbd44](https://github.com/lezi-fun/nodeloc-app/commit/67bbd44)）
> 
> ### **回复增强**
> 
> 回复栏支持插入 GIF（KLIPY 搜索，经站点后端代理）。Markdown 工具栏按官网 D-Editor 行为规范实现粗体/斜体/标题/链接/引用/代码/列表。新增 `GifPickerDialog.kt` 渲染 GIF 选择器，`MarkdownToolbar.kt` 渲染工具栏。（[e0c0060](https://github.com/lezi-fun/nodeloc-app/commit/e0c0060), [a96eeff](https://github.com/lezi-fun/nodeloc-app/commit/a96eeff)）
> 
> ### **抽奖功能**
> 
> 完整支持 discourse-lottery 帖子内抽奖，展示抽奖卡片、参与购票/随缘、发起者开奖与结束抽奖。新增 `LotteryCard.kt` 渲染抽奖卡片，`LotteryRepository.kt` 调用抽奖 API。（[ddd1d5f](https://github.com/lezi-fun/nodeloc-app/commit/ddd1d5f)）
> 
> ### **小程序/小游戏**
> 
> 支持渲染帖子内嵌小程序/小游戏（discourse-apps），用 WebView 加载官网自包含 webview 页面。新增 `MiniAppWebView.kt` 渲染 WebView，`MiniAppRepository.kt` 获取小程序配置。（[f3c3397](https://github.com/lezi-fun/nodeloc-app/commit/f3c3397)）
> 
> ### **内容本地化**
> 
> 显示帖子翻译提示条，支持查看原文。新增 `TranslationBanner.kt` 渲染翻译提示，`TranslationRepository.kt` 调用翻译 API。（[a5d5b73](https://github.com/lezi-fun/nodeloc-app/commit/a5d5b73)）
> 
> * * *
> 
> ## **修复**
> 
> ### **节点标签图标真实化**
> 
> 话题列表和详情页的节点标签改用官网上传的图标图片，不再是纯色圆点占位。新增 `CategoryIcon.kt` 加载节点图标，coil-svg 支持 SVG 图标。（[0b3ec4c](https://github.com/lezi-fun/nodeloc-app/commit/0b3ec4c)）
> 
> ### **会员称号更新**
> 
> 抽屉用户区改用青铜/白银/黄金/钻石/王者会员称号，不再显示 TL0~TL4 信任等级。称号样式与官网保持一致，显示会员等级图标。（[7c7016f](https://github.com/lezi-fun/nodeloc-app/commit/7c7016f)）
> 
> ### **TagDto 序列化器修复**
> 
> 修复 TagDto 序列化器循环初始化导致主页加载崩溃。序列化器改为延迟初始化，避免循环依赖。（[d08ffdb](https://github.com/lezi-fun/nodeloc-app/commit/d08ffdb)）
> 
> ### **CSRF 自动重试**
> 
> 表单 POST 遇 403 时清空 CSRF 缓存并自动重试一次，规避会话轮换导致的失败。新增 `CsrfInterceptor.kt` 拦截器处理 CSRF 错误。（[ac3e6d3](https://github.com/lezi-fun/nodeloc-app/commit/ac3e6d3)）
> 
> ### **话题标签兼容**
> 
> 兼容对象数组格式的话题标签，列表与详情页渲染为官网风格标签胶囊。修复标签解析错误导致的崩溃。（[6027e81](https://github.com/lezi-fun/nodeloc-app/commit/6027e81)）
> 
> ### **主页顶部对齐官网**
> 
> 去掉主页顶部主题筛选条，对齐官网仅保留新话题横幅与列表。主页顶部对齐官网，登录用户显示签到图标+头像，未登录显示绿色登录按钮。（[5055c3e](https://github.com/lezi-fun/nodeloc-app/commit/5055c3e), [bfe85e2](https://github.com/lezi-fun/nodeloc-app/commit/bfe85e2)）
> 
> ### **回复功能完善**
> 
> 详情页底部回复真正可用：POST /posts 发送、失败文案、成功后刷新。未登录回复栏引导登录。修复回复失败后的错误提示，成功后自动刷新话题内容。（[70e13b3](https://github.com/lezi-fun/nodeloc-app/commit/70e13b3)）
> 
> ### **搜索筛选器改进**
> 
> 高级搜索筛选器改为不跨会话记忆，进入搜索页自动折叠。避免历史筛选条件干扰新搜索。（[29a5e98](https://github.com/lezi-fun/nodeloc-app/commit/29a5e98)）
> 
> ### **图片缓存优化**
> 
> 头像等站点图片显式持久缓存：内存 25% 堆 + 磁盘 64MB，冷启动直接命中。减少网络请求，提升加载速度。（[10d3ad2](https://github.com/lezi-fun/nodeloc-app/commit/10d3ad2)）
> 
> * * *
> 
> ## **清理**
> 
> ### **删除设计探索目录**
> 
> 删除早期设计探索目录 design/（首页方案画布原型，已不再使用）。清理过时文件，减少仓库体积。（[e4c1aa3](https://github.com/lezi-fun/nodeloc-app/commit/e4c1aa3)）
> 
> ### **忽略调研目录**
> 
> 忽略 Playwright MCP 调研留下的本地快照/日志目录。避免调研文件提交到仓库。（[937719a](https://github.com/lezi-fun/nodeloc-app/commit/937719a)）
> 
> * * *
> 
> ## **CI/CD**
> 
> ### **手动触发部署**
> 
> 支持 workflow\_dispatch 手动填版本号触发部署，APK/tag/Release 按版本号命名。新增 `release.yml` 工作流支持手动触发。（[6d17592](https://github.com/lezi-fun/nodeloc-app/commit/6d17592)）
> 
> * * *
> 
> ## **下载与安装**
> 
> 访问 [Releases](https://github.com/lezi-fun/nodeloc-app/releases/v0.3.0) 下载对应版本。

* * *

> **NodeLoc App v0.2.0**
>
> ## **NodeLoc App v0.2.0**
> 
> > 这一版是基础能力完善版，围绕 **登录系统** 、 **搜索功能** 、 **抽屉导航** 、 **新话题提示** 、 **动图支持** 、 **权限与访问控制** 六大模块全面对齐官网。官网风格登录页面（两阶段 TOTP）与抽屉用户区：登录入口、头像等级、登出确认。会话基础设施：CookieJar 持久化 \_t，CSRF/登录/登出/当前用户 API 与 SessionRepo。搜索页对齐官网全页搜索：类型筛选、高级筛选器（分类、标签、状态、作者、时间等）、排序选项、帖子模式。右上角搜索接入全站搜索（防抖 + 匹配片段）。抽屉分类改为真实节点列表并加载站点 logo（coil-svg 支持 SVG 图标）。抽屉节点改用站点上传的分类真实图标，缺失时回退分类色点。添加原生字标加载动画。主页对齐官网新话题提示：定期检查并显示绿色横幅，点击静默刷新回顶。帖子流头像支持动图（官网 \_2.gif 版），全局 Coil 挂载 GIF/SVG 解码。列表受限话题显示锁图标。登录态变色：等级达标绿色 #4CAF50，未登录/不达标金色 #FF9800。列表锁图标改用官网 lc-lock 线框锁（未登录统一金色 #FF9800）。无权访问/不存在话题展示官网风格专用页面。全局字号较 Material 默认下调一档，贴近官网移动端观感。列表标记对齐官网：置顶显示图钉，信任等级限制话题显示锁。主页滑到底部自动加载下一页，失败后停止避免无限重试。详情页头部标题改用接口返回的最新话题名。加载动画按实际墨迹包围盒居中，消除水平偏移。自定义表情改行内 20px 不再遮挡文字。正文图片应用内缩放预览。等级限制帖渲染官网同款锁提示卡片。加载字标默认高度 64dp 调整为 44dp。顶栏 logo 按官网实测校准至 30dp/条高 52dp。修复分类色崩溃、身份徽章硬编码与协议相对 URL。修复 Compose 与 Jsoup 编译错误。对齐 Discourse 回复与主题分页。对齐嵌套回复与富文本渲染。
> 
> **发布日期** ：2026-08-XX
> 
> **更新规模** ：35 commits | +6,800 / -800 lines
> 
> * * *
> 
> ## **重点内容：你现在可以**
> 
> - **登录 NodeLoc 账号** ：官网风格登录页面（两阶段 TOTP），登录后抽屉显示头像等级，支持登出确认。会话持久化，重启应用自动登录。
> - **全站搜索内容** ：搜索页对齐官网，支持类型筛选、高级筛选器（分类、标签、状态、作者、时间等）、排序选项、帖子模式。右上角搜索快速入口。
> - **查看真实节点列表** ：抽屉分类改为真实节点列表，加载站点 logo 和节点图标，SVG 图标支持。
> - **及时发现新话题** ：主页新话题横幅提示，定期检查并显示绿色横幅，点击静默刷新回顶。
> - **查看动图头像** ：帖子流头像支持动图（官网 \_2.gif 版），全局 GIF 解码支持。
> - **识别受限内容** ：列表受限话题显示锁图标，登录态变色（等级达标绿色，未登录/不达标金色），无权访问话题展示专用页面。
> 
> * * *
> 
> ## **新功能**
> 
> ### **登录系统**
> 
> 官网风格登录页面（两阶段 TOTP）与抽屉用户区：登录入口、头像等级、登出确认。会话基础设施：CookieJar 持久化 \_t，CSRF/登录/登出/当前用户 API 与 SessionRepo。新增 `LoginScreen.kt` 渲染登录界面，`SessionRepository.kt` 管理会话状态，`AuthApi.kt` 调用登录 API。（[8189f1d](https://github.com/lezi-fun/nodeloc-app/commit/8189f1d), [c1a0a85](https://github.com/lezi-fun/nodeloc-app/commit/c1a0a85)）
> 
> ### **搜索功能**
> 
> 搜索页对齐官网全页搜索：类型筛选、高级筛选器（分类、标签、状态、作者、时间等）、排序选项、帖子模式。右上角搜索接入全站搜索（防抖 + 匹配片段）。新增 `SearchScreen.kt` 渲染搜索界面，`SearchRepository.kt` 调用搜索 API。（[b37fd5b](https://github.com/lezi-fun/nodeloc-app/commit/b37fd5b), [e378c8e](https://github.com/lezi-fun/nodeloc-app/commit/e378c8e)）
> 
> ### **抽屉导航**
> 
> 添加原生字标加载动画。分类改为真实节点列表并加载站点 logo（coil-svg 支持 SVG 图标）。节点改用站点上传的真实图标，缺失时回退分类色点。新增 `DrawerContent.kt` 渲染抽屉内容，`CategoryRepository.kt` 获取节点列表。（[3ef17ff](https://github.com/lezi-fun/nodeloc-app/commit/3ef17ff), [912b74e](https://github.com/lezi-fun/nodeloc-app/commit/912b74e), [39bdd1a](https://github.com/lezi-fun/nodeloc-app/commit/39bdd1a)）
> 
> ### **新话题提示**
> 
> 主页对齐官网新话题提示：定期检查并显示绿色横幅，点击静默刷新回顶。新增 `NewTopicBanner.kt` 渲染横幅，`TopicRepository.kt` 检查新话题。（[5d1b379](https://github.com/lezi-fun/nodeloc-app/commit/5d1b379)）
> 
> ### **动图支持**
> 
> 帖子流头像支持动图（官网 \_2.gif 版），全局 Coil 挂载 GIF/SVG 解码。新增 `ImageLoader` 配置 GIF 解码器。（[8e478f5](https://github.com/lezi-fun/nodeloc-app/commit/8e478f5)）
> 
> ### **权限与访问控制**
> 
> 列表受限话题显示锁图标。登录态变色：等级达标绿色 #4CAF50，未登录/不达标金色 #FF9800。列表锁图标改用官网 lc-lock 线框锁（未登录统一金色 #FF9800）。无权访问/不存在话题展示官网风格专用页面。新增 `AccessDeniedScreen.kt` 渲染专用页面，`TopicListItem.kt` 显示锁图标。（[4e1e1de](https://github.com/lezi-fun/nodeloc-app/commit/4e1e1de), [0ce70e6](https://github.com/lezi-fun/nodeloc-app/commit/0ce70e6), [aaa24cc](https://github.com/lezi-fun/nodeloc-app/commit/aaa24cc)）
> 
> * * *
> 
> ## **修复**
> 
> ### **全局字号调整**
> 
> 全局字号较 Material 默认下调一档，贴近官网移动端观感。修改 `Theme.kt` 字号配置。（[ab3d522](https://github.com/lezi-fun/nodeloc-app/commit/ab3d522)）
> 
> ### **列表标记对齐官网**
> 
> 列表标记对齐官网：置顶显示图钉，信任等级限制话题显示锁。修改 `TopicListItem.kt` 标记渲染逻辑。（[4b7530d](https://github.com/lezi-fun/nodeloc-app/commit/4b7530d)）
> 
> ### **主页自动加载**
> 
> 主页滑到底部自动加载下一页，失败后停止避免无限重试。修改 `TopicListScreen.kt` 分页逻辑。（[18a7474](https://github.com/lezi-fun/nodeloc-app/commit/18a7474)）
> 
> ### **详情页标题修复**
> 
> 详情页头部标题改用接口返回的最新话题名。修改 `TopicDetailScreen.kt` 标题显示逻辑。（[a153f82](https://github.com/lezi-fun/nodeloc-app/commit/a153f82)）
> 
> ### **加载动画居中**
> 
> 加载动画按实际墨迹包围盒居中，消除水平偏移。修改 `LoadingAnimation.kt` 布局逻辑。（[184da95](https://github.com/lezi-fun/nodeloc-app/commit/184da95)）
> 
> ### **自定义表情大小**
> 
> 自定义表情改行内 20px 不再遮挡文字。正文图片应用内缩放预览。等级限制帖渲染官网同款锁提示卡片。修改 `CookedText.kt` 表情渲染逻辑。（[8466375](https://github.com/lezi-fun/nodeloc-app/commit/8466375)）
> 
> ### **加载字标高度**
> 
> 加载字标默认高度 64dp 调整为 44dp。修改 `LoadingAnimation.kt` 高度配置。（[c7f535d](https://github.com/lezi-fun/nodeloc-app/commit/c7f535d)）
> 
> ### **顶栏 logo 校准**
> 
> 顶栏 logo 按官网实测校准至 30dp/条高 52dp。修改 `TopBar.kt` logo 大小。（[ab08419](https://github.com/lezi-fun/nodeloc-app/commit/ab08419)）
> 
> ### **修复分类色崩溃**
> 
> 修复分类色崩溃、身份徽章硬编码与协议相对 URL。修改 `CategoryColor.kt` 和 `BadgeText.kt` 解析逻辑。（[8afe9f5](https://github.com/lezi-fun/nodeloc-app/commit/8afe9f5)）
> 
> ### **修复编译错误**
> 
> 修复 Compose 与 Jsoup 编译错误。修改依赖版本和导入语句。（[dbe00ad](https://github.com/lezi-fun/nodeloc-app/commit/dbe00ad)）
> 
> ### **对齐嵌套回复**
> 
> 对齐 Discourse 回复与主题分页。对齐嵌套回复与富文本渲染。修改 `PostList.kt` 和 `CookedText.kt` 渲染逻辑。（[893671e](https://github.com/lezi-fun/nodeloc-app/commit/893671e), [89e62e2](https://github.com/lezi-fun/nodeloc-app/commit/89e62e2)）
> 
> * * *
> 
> ## **下载与安装**
> 
> 访问 [Releases](https://github.com/lezi-fun/nodeloc-app/releases/v0.2.0) 下载对应版本。

* * *

> **NodeLoc App v0.1.0**
>
> ## **NodeLoc App v0.1.0**
> 
> > NodeLoc App 首个版本，基于 Kotlin + Jetpack Compose 构建的 Android 原生应用。实现 NodeLoc 话题列表浏览、话题详情页阅读、基础 Discourse API 集成、Material 3 深色/浅色主题、基础 Markdown 渲染、图片预览功能。官方 14 套可选色板实测与色板驱动主题架构。列表详情双屏导航，全部可交互元素增加按压反馈。顶栏字标图标与启动图标，官方描线加载动画（WebView 直渲）。固定发布签名密钥库入仓（更新包签名一致化）。构建 Release 的 GitHub Actions 工作流，支持全 ABI 构建（arm64-v8a、armeabi-v7a、x86\_64、x86）。
> 
> **发布日期** ：2026-08-XX
> 
> **更新规模** ：27 commits | +5,200 / -0 lines
> 
> * * *
> 
> ## **重点内容：你现在可以**
> 
> - **浏览 NodeLoc 社区话题** ：话题列表浏览，支持滚动加载、下拉刷新、话题卡片展示。
> - **阅读话题详情** ：话题详情页阅读，支持楼层展示、GIF 头像环、回复条、富文本渲染。
> - **切换深色/浅色主题** ：Material 3 深色/浅色主题，系统深浅自动切换，官方 14 套可选色板。
> - **预览图片** ：图片预览功能，点击图片进入全屏预览，支持缩放、滑动切换。
> 
> * * *
> 
> ## **新功能**
> 
> ### **话题列表浏览**
> 
> NodeLoc 话题列表浏览，支持滚动加载、下拉刷新、话题卡片展示。新增 `TopicListScreen.kt` 渲染列表界面，`TopicRepository.kt` 获取话题数据。（[4b28501](https://github.com/lezi-fun/nodeloc-app/commit/4b28501)）
> 
> ### **话题详情阅读**
> 
> 话题详情页阅读，支持楼层展示、GIF 头像环、回复条、富文本渲染。新增 `TopicDetailScreen.kt` 渲染详情界面，`PostRepository.kt` 获取帖子数据。（[cd26c69](https://github.com/lezi-fun/nodeloc-app/commit/cd26c69)）
> 
> ### **Material 3 主题**
> 
> Material 3 深色/浅色主题，系统深浅自动切换，官方 14 套可选色板实测与色板驱动主题架构。新增 `Theme.kt` 主题配置，`ColorScheme.kt` 色板定义。（[817f90e](https://github.com/lezi-fun/nodeloc-app/commit/817f90e), [4b28501](https://github.com/lezi-fun/nodeloc-app/commit/4b28501)）
> 
> ### **基础 Markdown 渲染**
> 
> 基础 Markdown 渲染，支持标题、列表、引用、代码块、链接、图片等基础语法。新增 `CookedText.kt` 渲染 Markdown 内容。（[cd26c69](https://github.com/lezi-fun/nodeloc-app/commit/cd26c69)）
> 
> ### **图片预览功能**
> 
> 图片预览功能，点击图片进入全屏预览，支持缩放、滑动切换。新增 `ImagePreviewScreen.kt` 渲染预览界面。（[cd26c69](https://github.com/lezi-fun/nodeloc-app/commit/cd26c69)）
> 
> ### **双屏导航**
> 
> 列表详情双屏导航，平板/折叠屏支持双栏布局。新增 `NavigationHost.kt` 管理导航逻辑。（[cd26c69](https://github.com/lezi-fun/nodeloc-app/commit/cd26c69)）
> 
> ### **按压反馈**
> 
> 全部可交互元素增加按压反馈，提升交互体验。修改可点击组件的 `clickable` 配置。（[c488804](https://github.com/lezi-fun/nodeloc-app/commit/c488804)）
> 
> ### **品牌元素**
> 
> 顶栏字标图标与启动图标，官方描线加载动画（WebView 直渲）。新增 `LoadingAnimation.kt` 渲染加载动画，`ic_launcher.xml` 定义启动图标。（[b46ad3d](https://github.com/lezi-fun/nodeloc-app/commit/b46ad3d), [e2b0e45](https://github.com/lezi-fun/nodeloc-app/commit/e2b0e45)）
> 
> ### **签名密钥库**
> 
> 固定发布签名密钥库入仓（更新包签名一致化）。启用 v1 签名便于签名校验与老工具识别。新增 `keystore/release.keystore` 密钥库文件。（[3e2e90d](https://github.com/lezi-fun/nodeloc-app/commit/3e2e90d), [9c7776b](https://github.com/lezi-fun/nodeloc-app/commit/9c7776b), [9bbbcef](https://github.com/lezi-fun/nodeloc-app/commit/9bbbcef)）
> 
> ### **GitHub Actions 工作流**
> 
> 构建 Release 的 GitHub Actions 工作流，支持全 ABI 构建（arm64-v8a、armeabi-v7a、x86\_64、x86）。新增 `.github/workflows/release.yml` 工作流文件。（[ed99548](https://github.com/lezi-fun/nodeloc-app/commit/ed99548)）
> 
> * * *
> 
> ## **设计探索**
> 
> ### **首页话题流三方向设计画布**
> 
> 首页话题流三方向设计画布（A 原生 Material / B 暖夜阅读 / C 描边品牌），支持键盘 1/2/3、方向键、记忆选择切换。新增 `design/index.html` 设计画布。（[a22a9f7](https://github.com/lezi-fun/nodeloc-app/commit/a22a9f7), [621665b](https://github.com/lezi-fun/nodeloc-app/commit/621665b), [291ed31](https://github.com/lezi-fun/nodeloc-app/commit/291ed31), [6aee697](https://github.com/lezi-fun/nodeloc-app/commit/6aee697)）
> 
> ### **NodeLoc 网页版实测笔记**
> 
> NodeLoc 网页版布局/样式/菜单实测笔记（深浅色+抽屉结构）。新增 `docs/nodeloc-web-analysis.md` 实测笔记。（[964d4a2](https://github.com/lezi-fun/nodeloc-app/commit/964d4a2)）
> 
> ### **官方 14 套色板实测**
> 
> 官方 14 套可选色板实测与色板驱动主题架构决策。新增 `docs/color-palette-analysis.md` 实测笔记。（[817f90e](https://github.com/lezi-fun/nodeloc-app/commit/817f90e)）
> 
> * * *
> 
> ## **修复**
> 
> ### **包名修复**
> 
> 包名 fun.lezi.nodeloc 含硬关键字 fun 导致全量编译错——迁移至 app.nodeloc。修改所有文件的包名声明。（[e65449a](https://github.com/lezi-fun/nodeloc-app/commit/e65449a)）
> 
> ### **编译修复**
> 
> 修复 Long+String 拼接/object 内 companion/FontVariation 实验 API OptIn。修复重复 @file:OptIn。修复 PathParser 方法名 parsePathString。（[ae99b0e](https://github.com/lezi-fun/nodeloc-app/commit/ae99b0e), [472e1d3](https://github.com/lezi-fun/nodeloc-app/commit/472e1d3), [2e1e6c4](https://github.com/lezi-fun/nodeloc-app/commit/2e1e6c4)）
> 
> ### **CI 修复**
> 
> 显式指定 release 签名 storeFile，修复 AGP 在 runner 上的 XDG 路径解析。构建前生成调试密钥库修复 validateSigningRelease + gradle 缓存。（[3510752](https://github.com/lezi-fun/nodeloc-app/commit/3510752), [8e46cb8](https://github.com/lezi-fun/nodeloc-app/commit/8e46cb8)）
> 
> * * *
> 
> ## **下载与安装**
> 
> 访问 [Releases](https://github.com/lezi-fun/nodeloc-app/releases/v0.1.0) 下载对应版本。

* * *

## **致谢**

感谢 NodeLoc 社区的支持，感谢所有测试用户的反馈。NodeLoc App 是一个开源项目，欢迎贡献代码和提出建议。

* * *

## **协议**

NodeLoc App 采用 [MIT License](https://github.com/lezi-fun/nodeloc-app/blob/main/LICENSE) 开源协议。

---

<div class="post-metadata">

作者： ![James](https://www.nodeloc.com/user_avatar/www.nodeloc.com/james/32/1745_2.png) [@James](https://www.nodeloc.com/u/James)\
发布日期： [2026 年8 月 30 日 10:41 UTC](https://www.nodeloc.com/t/topic/105845/2 "2026-08-30T10:41:29Z")

</div>

:xhj002: 太强了啊

---

<div class="post-metadata">

作者： ![patrick0306](https://www.nodeloc.com/user_avatar/www.nodeloc.com/patrick0306/32/33578_2.png) [@patrick0306](https://www.nodeloc.com/u/patrick0306)\
发布日期： [2026 年8 月 30 日 10:42 UTC](https://www.nodeloc.com/t/topic/105845/3 "2026-08-30T10:42:55Z")

</div>

老詹，我能把我弄出来的api接口和鉴权分享给他可以吗？  
nodeloc mcp也写好了…  
话说能不能开放一下user-api-key啊… cookie有点麻烦…

---

<div class="post-metadata">

作者： ![lezi-fun](https://www.nodeloc.com/user_avatar/www.nodeloc.com/lezi-fun/32/45880_2.png) [@lezi-fun](https://www.nodeloc.com/u/lezi-fun)\
发布日期： [2026 年8 月 30 日 10:43 UTC](https://www.nodeloc.com/t/topic/105845/4 "2026-08-30T10:43:02Z")

</div>

可以的

---

<div class="post-metadata">

作者： ![lezi-fun](https://www.nodeloc.com/user_avatar/www.nodeloc.com/lezi-fun/32/45880_2.png) [@lezi-fun](https://www.nodeloc.com/u/lezi-fun)\
发布日期： [2026 年9 月 1 日 09:32 UTC](https://www.nodeloc.com/t/topic/105845/5 "2026-09-01T09:32:47Z")

</div>

更新了，顶一下

---

<div class="post-metadata">

作者： ![ypyik0669](https://www.nodeloc.com/user_avatar/www.nodeloc.com/ypyik0669/32/45112_2.png) [@ypyik0669](https://www.nodeloc.com/u/ypyik0669)\
发布日期： [2026 年9 月 1 日 09:34 UTC](https://www.nodeloc.com/t/topic/105845/6 "2026-09-01T09:34:13Z")

</div>

太顶了

---

<div class="post-metadata">

作者： ![James](https://www.nodeloc.com/user_avatar/www.nodeloc.com/james/32/1745_2.png) [@James](https://www.nodeloc.com/u/James)\
发布日期： [2026 年9 月 1 日 09:39 UTC](https://www.nodeloc.com/t/topic/105845/7 "2026-09-01T09:39:30Z")

</div>

6 啊 很多问题我都还没处理

---

<div class="post-metadata">

作者： ![sydney1](https://www.nodeloc.com/user_avatar/www.nodeloc.com/sydney1/32/34353_2.png) [@sydney1](https://www.nodeloc.com/u/sydney1)\
发布日期： [2026 年9 月 1 日 09:39 UTC](https://www.nodeloc.com/t/topic/105845/8 "2026-09-01T09:39:36Z")

</div>

强强

---

<div class="post-metadata">

作者： ![lezi-fun](https://www.nodeloc.com/user_avatar/www.nodeloc.com/lezi-fun/32/45880_2.png) [@lezi-fun](https://www.nodeloc.com/u/lezi-fun)\
发布日期： [2026 年9 月 1 日 11:54 UTC](https://www.nodeloc.com/t/topic/105845/9 "2026-09-01T11:54:31Z")

</div>

比如那些（

---

<div class="post-metadata">

作者： ![Evan](https://www.nodeloc.com/user_avatar/www.nodeloc.com/evan/32/67825_2.png) [@Evan](https://www.nodeloc.com/u/Evan)\
发布日期： [2026 年9 月 3 日 04:42 UTC](https://www.nodeloc.com/t/topic/105845/10 "2026-09-03T04:42:27Z")

</div>

才找到，哈哈😂

---

<div class="post-metadata">

作者： ![lezi-fun](https://www.nodeloc.com/user_avatar/www.nodeloc.com/lezi-fun/32/45880_2.png) [@lezi-fun](https://www.nodeloc.com/u/lezi-fun)\
发布日期： [2026 年9 月 11 日 14:02 UTC](https://www.nodeloc.com/t/topic/105845/11 "2026-09-11T14:02:27Z")

</div>

前几天更新一直没来得及发

---

<div class="post-metadata">

作者： ![James](https://www.nodeloc.com/user_avatar/www.nodeloc.com/james/32/1745_2.png) [@James](https://www.nodeloc.com/u/James)\
发布日期： [2026 年9 月 11 日 14:06 UTC](https://www.nodeloc.com/t/topic/105845/12 "2026-09-11T14:06:45Z")

</div>

官方的开源了

---

<div class="post-metadata">

作者： ![lezi-fun](https://www.nodeloc.com/user_avatar/www.nodeloc.com/lezi-fun/32/45880_2.png) [@lezi-fun](https://www.nodeloc.com/u/lezi-fun)\
发布日期： [2026 年9 月 12 日 06:57 UTC](https://www.nodeloc.com/t/topic/105845/13 "2026-09-12T06:57:18Z")

</div>

这么好，我看看

---

<div class="post-metadata">

作者： ![Make](https://www.nodeloc.com/user_avatar/www.nodeloc.com/make/32/60031_2.png) [@Make](https://www.nodeloc.com/u/Make)\
发布日期： [2026 年9 月 12 日 07:28 UTC](https://www.nodeloc.com/t/topic/105845/14 "2026-09-12T07:28:57Z")

</div>

iOS呢，怎么没看到动静了；

---

<div class="post-metadata">

作者： ![aoooeg](https://www.nodeloc.com/user_avatar/www.nodeloc.com/aoooeg/32/67505_2.png) [@aoooeg](https://www.nodeloc.com/u/aoooeg)\
发布日期： [2026 年9 月 12 日 08:03 UTC](https://www.nodeloc.com/t/topic/105845/15 "2026-09-12T08:03:28Z")

</div>

丰富

---

<div class="post-metadata">

作者： ![Make](https://www.nodeloc.com/user_avatar/www.nodeloc.com/make/32/60031_2.png) [@Make](https://www.nodeloc.com/u/Make)\
发布日期： [2026 年9 月 15 日 04:33 UTC](https://www.nodeloc.com/t/topic/105845/16 "2026-09-15T04:33:34Z")

</div>

上次要求iOS26.0；难搞

---

<div class="post-metadata">

作者： ![lezi-fun](https://www.nodeloc.com/user_avatar/www.nodeloc.com/lezi-fun/32/45880_2.png) [@lezi-fun](https://www.nodeloc.com/u/lezi-fun)\
发布日期： [2026 年9 月 15 日 09:16 UTC](https://www.nodeloc.com/t/topic/105845/17 "2026-09-15T09:16:18Z")

</div>

@James

---

<div class="post-metadata">

作者： ![iop](https://www.nodeloc.com/user_avatar/www.nodeloc.com/iop/32/83009_2.png) [@iop](https://www.nodeloc.com/u/iop)\
发布日期： [2026 年11 月 3 日 06:59 UTC](https://www.nodeloc.com/t/topic/105845/18 "2026-11-03T06:59:02Z")

</div>

不错，看一看

---

<div class="post-metadata">

作者： ![jhon25](https://www.nodeloc.com/letter_avatar_proxy/v4/letter/j/cab0a1/32.png) [@jhon25](https://www.nodeloc.com/u/jhon25)\
发布日期： [2026 年11 月 4 日 01:24 UTC](https://www.nodeloc.com/t/topic/105845/19 "2026-11-04T01:24:01Z")

</div>

通知中心直接接到系统通知栏，平时漏掉新消息的情况应该少很多了
