PushDeerOS
PushDeer开源版,可以自行架设的无APP推送服务(WIP,当前项目只实现了后端API,其他部分正在施工
登入 | 设备 | Key | 消息 | 设置 |
---|---|---|---|---|
一期核心功能领取
功能 | 领取人 | 预期完成时间 | 协作开发 |
---|---|---|---|
iOS/MacApp+Clip开发 | Hext123 | 2022年1月20日 | 如有意参与可与当前领取人联系 |
Android客户端 | 尚未领取 | - | - |
快应用 | 尚未领取 | - | - |
产品定义
PushDeer的核心价值,包括:「易用」、「可控」和「渐进」。
易用
易用性表现在两个方面:
- 易安装:采用无APP方案,直接去掉安装步骤
- 易调用:只需输入URL,无需阅读文档,就可以发送消息
可控
Self-hosted
:让有能力和精力的用户可以自行架设,避免因为在线服务下线导致的接口更换风险。- 非商用免费:不用PushDeer挣钱,就无需支付费用
- 不依赖微信消息接口:不像Server酱那样受腾讯政策影响
渐进
- 通过URL即可发送基本的文本消息;通过更多参数,可以对消息的样式等细节进行调整
- 无APP不能实现的功能不能覆盖的机型,后期可以通过APP来补充
商业模式
PushDeer是一个商业开源项目,采用「开放源码」、「自用免费」、「在线服务收费」的方式进行运作。
具体实现
PushDeer是一个以盈利为目的的商业项目,品牌和源码所有权都由「方糖君」公司持有,但和纯商业项目不同的地方在于:
- 它开放源代码,所有人都可以在非商业前提下按GPLv2授权使用
- 它接受社区贡献代码,作为回报,它会从商业收益中拿出部分来赞助项目贡献人
- 如果商业收益够大,它会尝试雇佣项目贡献人以兼职或者全职的方式为项目工作
这里边有一些细节:
- 为了避免某些个人或者公司使用源码搭建在线竞品服务收费,我们限制了源码不能商用
- 在刚开始的时候,项目并没有商业收入,而却是开发工作量最大的。所以首先我们会承担产品和界面设计、API设计和开发等工作;并通过众筹的方式筹集了一些资金给其他大模块的贡献人
开放源码形式保证了其他代码贡献人在非商业场景下对源码的可控:
- 如果社区和代码贡献人不满意「方糖君」主导的商业化,可以 Fork 一个版本,继续在非商用的前提下自行运营
- 如果「方糖君」之后不再开放源代码,普通用户依然可以按之前的协议使用修改协议前的源码
用户细分
PushDeer主要面向以下三类用户
- 高阶电脑用户
- 开发者
- 公司或自媒体
高阶电脑用户
具有一定电脑操作技能的高阶用户,比如:
- NAS 用户
- 站长
- 电脑技术爱好者
他们使用PushDeer的场景包括但不限于:
- 推送路由器和 NAS 的状态、公网 IP 等信息
- 推送 Wordpress 最新的评论
- 推送加密货币达到特定价格的通知
- 在多台设备上推送文本
- 自动化工具推送定期汇报
开发者
使用PushDeer的场景包括但不限于:
- 推送报错和调试信息
- 推送服务器异常
- 推送定时任务输出
- 在自己的软件发送消息到手机(引导用户填入PushDeer的key)
公司或自媒体
使用PushDeer的场景包括但不限于:
- 面向自己的用户推送通知、内容和营销信息(类似公众号,但不受微信限制)
项目目录说明
- api: Laravel实现的API接口,点此查看请求和返回demo
- docker: API实现的docker封装,一键启动,方便使用
- doc: 文档目录,包括界面设计源文件(Adobe XD)和资源文件(logo和avatar)
- push: 基于 gorush 架设的推送微服务,配置文件开启 async 可以提升发送速度
- ios: 用于放置 iOS 源文件,
ios/Prototype_version
目录是我边学边写的原型验证版本(SwiftUI+Moya+Codable),很多地方需要重写,仅供参考 - quickapp: 用于放置快应用源代码
开发环境搭建
下载代码
git clone https://github.com/easychen/pushdeer.git
配置推送证书
进入 push
目录,修改 *.yml.sample
为 *.yml
。其中iOS应用和Clip使用两个分开的证书进行推送,ios.yml
是APP的配置、clip.yml
是Clip的配置。注意根据开发和产品状态,修改yml
中的值production
。
默认配置中,c.p12
是APP的推送证书、cc.p12
是Clip的推送证书。
启动docker环境
运行 docker-compose up -d
,启动API。默认访问地址为http://127.0.0.1:8800
。可修改docker-compose.yml
调整端口。
API 说明
API_BASE=http://127.0.0.1:8800
认证方式:通过登入接口获得token
,通过post
和get
方式附带token
参数即可自动登入。
模拟登入
GET /login/fake
获得当前用户的基本信息
POST /user/info
参数 | 说明 | 备注 |
---|---|---|
token | 认证token |
注册设备
POST /device/reg
参数 | 说明 | 备注 |
---|---|---|
token | 认证token | |
name | 设备名称 | |
device_id | device token(推送用) | |
is_clip | 是否轻应用 | 0为APP |
设备列表
POST /device/list
参数 | 说明 | 备注 |
---|---|---|
token | 认证token |
重命名设备
POST /device/rename
参数 | 说明 | 备注 |
---|---|---|
token | 认证token | |
id | 设备id | |
name | 设备新名称 |
移除设备
POST /device/remove
参数 | 说明 | 备注 |
---|---|---|
token | 认证token | |
id | 设备id |
生成一个新Key
POST /key/gen
参数 | 说明 | 备注 |
---|---|---|
token | 认证token |
重命名Key
POST /key/rename
参数 | 说明 | 备注 |
---|---|---|
token | 认证token | |
id | Key ID | |
name | Key新名称 |
重置一个Key
POST /key/regen
参数 | 说明 | 备注 |
---|---|---|
token | 认证token | |
id | Key ID |
获取当前用户的Key列表
POST /key/list
参数 | 说明 | 备注 |
---|---|---|
token | 认证token |
删除Key
POST /key/remove
参数 | 说明 | 备注 |
---|---|---|
token | 认证token | |
id | Key ID |
推送消息
POST /message/push
参数 | 说明 | 备注 |
---|---|---|
pushkey | PushKey | |
text | 推送消息内容 | |
desp | 消息内容第二部分,选填 | |
type | 格式,选填 | 文本=text,markdown,图片=image,默认为markdown |
获得当前用户的消息列表
POST /message/list
参数 | 说明 | 备注 |
---|---|---|
token | 认证token | |
limit | 消息条数 | 默认为10,最大100 |
删除消息
POST /message/remove
参数 | 说明 | 备注 |
---|---|---|
token | 认证token | |
id | 消息ID |
通用错误返回格式:
{
code:正确为0,错误为非0,
content:错误信息
}
授权
本项目禁止商用(包括但不限于搭建后挂广告或售卖会员、打包后上架商店销售等),对非商业用途采用 GPLV2 授权