2022-01-05 11:26:49 +08:00
|
|
|
|
# PushDeer
|
2021-12-23 00:19:55 +08:00
|
|
|
|
|
2022-01-18 12:32:00 +08:00
|
|
|
|
PushDeer开源版,可以自行架设的无APP推送服务(WIP,API和iOS第一版本开发完成,其他部分正在施工🚧)
|
2021-12-23 00:19:55 +08:00
|
|
|
|
|
2021-12-24 12:25:16 +08:00
|
|
|
|
[🐙🐱 GitHub仓库](https://github.com/easychen/pushdeer) [🔮 中国大陆镜像仓库](https://gitee.com/easychen/pushdeer)
|
|
|
|
|
|
2021-12-23 00:19:55 +08:00
|
|
|
|
|登入|设备|Key|消息|设置|
|
|
|
|
|
|-|-|-|-|-|
|
|
|
|
|
|![](doc/design_and_resource/登入.png)|![](doc/design_and_resource/设备.png)|![](doc/design_and_resource/key.png)|![](doc/design_and_resource/消息.png)|![](doc/design_and_resource/设置.png)
|
|
|
|
|
|
2021-12-24 17:00:12 +08:00
|
|
|
|
[📼 无App推送使用演示视频](https://weibo.com/tv/show/1034:4714616840978534?from=old_pc_videoshow) [📼 项目视频说明](https://www.bilibili.com/video/BV1Ar4y1S7em/) [📼 项目架构和模块说明](https://www.bilibili.com/video/BV1ZS4y1T7Bf/)
|
2021-12-23 00:19:55 +08:00
|
|
|
|
|
2021-12-23 23:25:41 +08:00
|
|
|
|
## 一期核心功能领取
|
|
|
|
|
|
2021-12-27 12:44:41 +08:00
|
|
|
|
|功能|领取人|预期完成时间|最低版本兼容|本周进度|
|
2021-12-27 12:53:10 +08:00
|
|
|
|
|-|-|-|-|-|
|
2022-01-18 12:32:00 +08:00
|
|
|
|
|iOS/MacApp+Clip开发|[Hext123](https://github.com/Hext123)|2022年1月20日|iOS14|第一版完成,代码在iOS目录下|
|
2022-01-10 21:53:12 +08:00
|
|
|
|
|Android客户端|[WolfHugo](https://github.com/alone-wolf)|2022年2月24日|5.1|接入mipush,device/key/message列表,markdown,pushtest,device自动注册|
|
2022-01-11 22:50:41 +08:00
|
|
|
|
|快应用|[7YHong](https://github.com/7YHong)|2022年2月27日|-|完成快应用界面展示部分,下周对接API|
|
2022-01-04 17:05:55 +08:00
|
|
|
|
|API完善和更新|[古俊杰](https://github.com/ilovintit)|配合客户端同步更新|-|添加自动生成swgger文档功能中|
|
2021-12-24 12:25:16 +08:00
|
|
|
|
|
2022-01-18 12:32:00 +08:00
|
|
|
|
## 安装文档
|
|
|
|
|
|
|
|
|
|
- 𐂂 [点此查看](doc/安装文档.md)
|
|
|
|
|
|
2021-12-29 21:37:36 +08:00
|
|
|
|
## 相关项目
|
2021-12-23 23:25:41 +08:00
|
|
|
|
|
2022-01-05 22:45:55 +08:00
|
|
|
|
- [Android客户端临时仓库](https://github.com/alone-wolf/pushdeer_for_android)
|
2021-12-29 21:37:36 +08:00
|
|
|
|
- [API的Go实现](https://github.com/iepngs/pushdeer-backend-go) by [iepngs](https://github.com/iepngs)
|
|
|
|
|
- [Go SDK](https://github.com/Luoxin/go-pushdeer-sdk) by [Luoxin](https://github.com/Luoxin)
|
2021-12-23 23:25:41 +08:00
|
|
|
|
|
|
|
|
|
|
2021-12-23 00:19:55 +08:00
|
|
|
|
## 产品定义
|
|
|
|
|
|
|
|
|
|
PushDeer的**核心价值**,包括:「易用」、「可控」和「渐进」。
|
|
|
|
|
|
|
|
|
|
### 易用
|
|
|
|
|
|
|
|
|
|
易用性表现在两个方面:
|
|
|
|
|
|
|
|
|
|
1. 易安装:采用无APP方案,直接**去掉安装步骤**
|
|
|
|
|
1. 易调用:只需输入URL,**无需阅读文档**,就可以发送消息
|
|
|
|
|
|
|
|
|
|
### 可控
|
|
|
|
|
|
|
|
|
|
1. `Self-hosted`:让有能力和精力的用户可以自行架设,避免因为在线服务下线导致的接口更换风险。
|
|
|
|
|
1. 非商用免费:不用PushDeer挣钱,就无需支付费用
|
|
|
|
|
1. 不依赖微信消息接口:不像Server酱那样受腾讯政策影响
|
|
|
|
|
|
|
|
|
|
### 渐进
|
|
|
|
|
|
|
|
|
|
1. 通过URL即可发送基本的文本消息;通过更多参数,可以对消息的样式等细节进行调整
|
|
|
|
|
1. 无APP不能实现的功能不能覆盖的机型,后期可以通过APP来补充
|
|
|
|
|
|
|
|
|
|
## 商业模式
|
|
|
|
|
|
|
|
|
|
PushDeer是一个商业开源项目,采用「开放源码」、「自用免费」、「在线服务收费」的方式进行运作。
|
|
|
|
|
|
|
|
|
|
### 具体实现
|
|
|
|
|
|
|
|
|
|
PushDeer是一个以盈利为目的的商业项目,品牌和源码所有权都由「方糖君」公司持有,但和纯商业项目不同的地方在于:
|
|
|
|
|
|
|
|
|
|
1. 它开放源代码,所有人都可以在非商业前提下按GPLv2授权使用
|
|
|
|
|
1. 它接受社区贡献代码,作为回报,它会从商业收益中拿出部分来赞助项目贡献人
|
|
|
|
|
1. 如果商业收益够大,它会尝试雇佣项目贡献人以兼职或者全职的方式为项目工作
|
|
|
|
|
|
|
|
|
|
这里边有一些细节:
|
|
|
|
|
|
|
|
|
|
1. 为了避免某些个人或者公司使用源码搭建在线竞品服务收费,我们限制了源码不能商用
|
|
|
|
|
1. 在刚开始的时候,项目并没有商业收入,而却是开发工作量最大的。所以首先我们会承担产品和界面设计、API设计和开发等工作;并通过众筹的方式筹集了一些资金给其他大模块的贡献人
|
|
|
|
|
|
|
|
|
|
开放源码形式保证了其他代码贡献人在非商业场景下对源码的可控:
|
|
|
|
|
|
|
|
|
|
1. 如果社区和代码贡献人不满意「方糖君」主导的商业化,可以 Fork 一个版本,继续在非商用的前提下自行运营
|
|
|
|
|
1. 如果「方糖君」之后不再开放源代码,普通用户依然可以按之前的协议使用修改协议前的源码
|
|
|
|
|
|
|
|
|
|
## 用户细分
|
|
|
|
|
|
|
|
|
|
PushDeer主要面向以下三类用户
|
|
|
|
|
|
|
|
|
|
1. 高阶电脑用户
|
|
|
|
|
1. 开发者
|
|
|
|
|
1. 公司或自媒体
|
|
|
|
|
|
|
|
|
|
### 高阶电脑用户
|
|
|
|
|
|
|
|
|
|
具有一定电脑操作技能的高阶用户,比如:
|
|
|
|
|
|
|
|
|
|
1. NAS 用户
|
|
|
|
|
1. 站长
|
|
|
|
|
1. 电脑技术爱好者
|
|
|
|
|
|
|
|
|
|
他们使用PushDeer的场景包括但不限于:
|
|
|
|
|
|
|
|
|
|
1. 推送路由器和 NAS 的状态、公网 IP 等信息
|
|
|
|
|
1. 推送 Wordpress 最新的评论
|
|
|
|
|
1. 推送加密货币达到特定价格的通知
|
|
|
|
|
1. 在多台设备上推送文本
|
|
|
|
|
1. 自动化工具推送定期汇报
|
|
|
|
|
|
|
|
|
|
### 开发者
|
|
|
|
|
|
|
|
|
|
使用PushDeer的场景包括但不限于:
|
|
|
|
|
|
|
|
|
|
1. 推送报错和调试信息
|
|
|
|
|
1. 推送服务器异常
|
|
|
|
|
1. 推送定时任务输出
|
|
|
|
|
1. 在自己的软件发送消息到手机(引导用户填入PushDeer的key)
|
|
|
|
|
|
|
|
|
|
### 公司或自媒体
|
|
|
|
|
|
|
|
|
|
使用PushDeer的场景包括但不限于:
|
|
|
|
|
|
|
|
|
|
1. 面向自己的用户推送通知、内容和营销信息(类似公众号,但不受微信限制)
|
|
|
|
|
|
|
|
|
|
## 项目目录说明
|
|
|
|
|
|
|
|
|
|
- api: Laravel实现的API接口,[点此查看请求和返回demo](doc/api/PushDeerOS.md)
|
|
|
|
|
- docker: API实现的docker封装,一键启动,方便使用
|
|
|
|
|
- doc: 文档目录,包括界面设计源文件(Adobe XD)和资源文件(logo和avatar)
|
|
|
|
|
- push: 基于 [gorush](https://github.com/appleboy/gorush) 架设的推送微服务,配置文件开启 async 可以提升发送速度
|
|
|
|
|
- ios: 用于放置 iOS 源文件,`ios/Prototype_version` 目录是我边学边写的原型验证版本(SwiftUI+Moya+Codable),很多地方需要重写,仅供参考
|
|
|
|
|
- quickapp: 用于放置快应用源代码
|
|
|
|
|
|
|
|
|
|
## 开发环境搭建
|
|
|
|
|
|
|
|
|
|
### 下载代码
|
|
|
|
|
|
2021-12-23 12:29:55 +08:00
|
|
|
|
```git clone https://github.com/easychen/pushdeer.git```
|
2021-12-23 00:19:55 +08:00
|
|
|
|
|
|
|
|
|
### 配置推送证书
|
|
|
|
|
|
|
|
|
|
进入 `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 说明
|
|
|
|
|
|
2022-01-04 18:57:17 +08:00
|
|
|
|
[在线文档(Swagger)](https://ilovintit.github.io/pushdeer-api-doc/#/)
|
|
|
|
|
|
2021-12-23 00:19:55 +08:00
|
|
|
|
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|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[更详细的请求和返回值可以参考这里](doc/api/PushDeerOS.md)
|
|
|
|
|
|
2021-12-27 18:07:24 +08:00
|
|
|
|
通用返回格式:
|
2021-12-23 00:19:55 +08:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
{
|
|
|
|
|
code:正确为0,错误为非0,
|
2021-12-27 18:39:48 +08:00
|
|
|
|
content:内容,错误时无此字段,
|
|
|
|
|
error:错误信息,无错误时无此字段
|
2021-12-23 00:19:55 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
2021-12-23 00:31:15 +08:00
|
|
|
|
## 授权
|
|
|
|
|
|
|
|
|
|
本项目禁止商用(包括但不限于搭建后挂广告或售卖会员、打包后上架商店销售等),对非商业用途采用 GPLV2 授权
|
2021-12-23 18:04:30 +08:00
|
|
|
|
|
|
|
|
|
|