Skip to content
本页内容由 AI 辅助生成与翻译,如有不当之处,欢迎协助改进。 在 GitHub 上编辑

分发概述

Fenfa 为所有平台提供统一的分发体验。每个产品获得一个公开下载页面,自动检测访问者的平台并显示对应的下载按钮。

分发流程

mermaid
sequenceDiagram
    participant User as 终端用户
    participant Page as 产品页面
    participant Fenfa as Fenfa 服务器
    participant Storage as 文件存储

    User->>Page: 访问 /products/:slug
    Page->>Page: 检测平台 (iOS/Android/桌面端)
    Page->>User: 显示对应平台的下载按钮

    alt iOS
        User->>Fenfa: 点击安装
        Fenfa->>User: itms-services:// 重定向
        User->>Fenfa: GET /ios/:id/manifest.plist
        Fenfa->>User: 返回 manifest XML
        User->>Storage: 下载 IPA
    else Android
        User->>Fenfa: 点击下载
        Fenfa->>Storage: GET /d/:releaseID
        Storage->>User: 下载 APK
    else 桌面端
        User->>Fenfa: 点击下载
        Fenfa->>Storage: GET /d/:releaseID
        Storage->>User: 下载二进制文件
    end

产品下载页面

每个已发布的产品都有一个公开页面 /products/:slug。页面包含:

  • 应用图标和名称 -- 来自产品配置
  • 平台检测 -- 通过浏览器 User-Agent 优先显示对应平台的下载按钮
  • 二维码 -- 自动生成,便于移动端扫描
  • 发布历史 -- 所选变体的所有发布,最新的在前
  • 更新日志 -- 每个发布的说明内联显示
  • 多变体 -- 如果产品有多个平台的变体,用户可以切换

各平台分发方式

平台方式详情
iOSOTA via itms-services://Manifest plist + 直接 IPA 下载。需要 HTTPS。
Android直接 APK 下载浏览器下载 APK,用户需开启"允许未知来源安装"。
macOS直接下载DMG、PKG 或 ZIP 文件通过浏览器下载。
Windows直接下载EXE、MSI 或 ZIP 文件通过浏览器下载。
Linux直接下载DEB、RPM、AppImage 或 tar.gz 文件通过浏览器下载。

直接下载链接

每个发布都有一个直接下载 URL:

https://your-domain.com/d/:releaseID

此 URL:

  • 返回带有正确 Content-TypeContent-Disposition 头的二进制文件
  • 支持 HTTP Range 请求实现断点续传
  • 递增下载计数器
  • 兼容任何 HTTP 客户端(curl、wget、浏览器)

事件追踪

Fenfa 追踪三类事件:

事件触发条件追踪数据
visit用户打开产品页面IP、User-Agent、变体
click用户点击下载按钮IP、User-Agent、发布 ID
download文件实际被下载IP、User-Agent、发布 ID

事件可在管理后台查看或导出为 CSV:

bash
curl -o events.csv http://localhost:8000/admin/exports/events.csv \
  -H "X-Auth-Token: YOUR_ADMIN_TOKEN"

HTTPS 要求

iOS 需要 HTTPS

iOS 通过 itms-services:// 的 OTA 安装要求服务器使用带有效 TLS 证书的 HTTPS。本地测试可使用 ngrokmkcert 等工具。生产环境请使用反向代理配合 Let's Encrypt。详见 生产环境部署

平台指南

Released under the Apache-2.0 License.