本文档详细介绍了 AFFiNE 中的订阅和计费系统。它涵盖了订阅系统的架构、可用的订阅计划、订阅管理功能以及相关的用户通知。
AFFiNE 中的订阅系统提供了一种管理不同服务等级的方式。它处理用户订阅的生命周期,包括创建、修改、取消和恢复。
Subscription 实体是管理订阅状态和操作的核心组件。它与身份验证服务交互以识别用户,与服务器服务交互以检查功能可用性,并与订阅存储进行交互以实现数据持久化。
来源: packages/frontend/core/src/modules/cloud/entities/subscription.ts28-162
AFFiNE 提供不同的订阅计划和类型以满足各种用户需求。
| 计划 | 描述 | 特性 |
|---|---|---|
| 专业版 | 面向专业用途的高级功能 | 增强的文档编辑、协作功能 |
| AI | AI 驱动的功能 | AI 助手、文档分析 |
| 变体 | 描述 |
|---|---|
| 定期 | 按指定间隔定期计费 |
| 终身(“信徒”) | 一次性付费,终身访问 |
| 一次性 | 一次性付费,限时访问 |
该系统会跟踪这些不同的订阅类型,并根据用户的订阅状态提供相应的功能访问。
来源: packages/frontend/core/src/modules/cloud/entities/subscription.ts24-52
Subscription 实体提供管理用户订阅的方法
resumeSubscription 方法恢复先前已取消的订阅。cancelSubscription 方法取消活动订阅。setSubscriptionRecurring 方法修改订阅的定期间隔(例如,从月度更改为年度)。所有这些操作都使用幂等性键来确保操作不会被意外重复,这对于计费操作尤其重要。
revalidate Subscription 实体中的 effect 确保订阅数据保持最新,在需要时检查服务器功能并获取最新的订阅信息。
来源: packages/frontend/core/src/modules/cloud/entities/subscription.ts62-87 packages/frontend/core/src/modules/cloud/entities/subscription.ts89-151
系统包含通知组件,用于提醒用户订阅状态的变化,特别是降级。
当用户的订阅被降级时,系统会显示一个通知,包含
通知会根据用户使用的是 Web 应用程序还是桌面客户端来调整其文本。
来源: packages/frontend/core/src/components/affine/subscription-landing/notify.tsx52-89 packages/frontend/core/src/components/affine/subscription-landing/notify.css.ts1-35
系统包含用于显示和管理订阅设置的 UI 组件。这些组件遵循一致的设计模式,具有标题、部分和不同设置的行。
这些组件的样式经过设计,可提供一致的视觉层次结构,清晰地区分标题、描述和交互元素。它们还包括禁用设置的状态。
来源: packages/frontend/component/src/components/setting-components/share.css.ts1-92
虽然具体支付处理的细节在提供的文件中并未完全展示,但订阅系统设计用于与支付系统交互。在尝试检索订阅信息之前,该功能会检查服务器配置以确定是否启用了支付功能。
这种设计允许灵活的部署配置,其中支付功能可以根据部署场景启用或禁用。
来源: packages/frontend/core/src/modules/cloud/entities/subscription.ts89-151