开放源码的无App推送服务
Go to file
Easy 5b4371ac8f
Merge pull request #31 from alone-wolf/main
主要修改:适配微信登陆
2022-01-26 20:41:52 +08:00
android 主要修改:适配微信登陆 2022-01-26 20:40:14 +08:00
api 修正代码合并逻辑,id唯一,先删除后添加 2022-01-25 12:58:05 +08:00
doc 更新安装文档,支持Android推送 2022-01-21 16:17:19 +08:00
docker 添加session生命期 2022-01-19 17:13:12 +08:00
ios 夜间模式配色优化(之前某些UI有点看不清); 更新 readme 说明文件 2022-01-16 00:10:47 +08:00
push 添加gorush的LICENSE 2021-12-29 11:47:25 +08:00
quickapp 完成快应用界面展示部分 2022-01-11 22:22:35 +08:00
.gitignore 添加架构文档/视频 2021-12-23 21:14:27 +08:00
LICENSE 添加授权说明 2021-12-23 00:30:33 +08:00
README.md 添加账号合并接口 2022-01-24 13:40:50 +08:00
RoboFile.php add serverless docker file 2022-01-16 19:05:29 +08:00
docker-compose.yml 将session通过redis持久化 2022-01-19 14:29:08 +08:00

README.md

PushDeer

PushDeer开源版可以自行架设的无APP推送服务WIPAPI、iOS和Mac第一版本完成Android即将完成其他部分正在施工🚧

🐙🐱 GitHub仓库 🔮 中国大陆镜像仓库

登入 设备 Key 消息 设置

📼 无App推送使用演示视频 📼 项目视频说明 📼 项目架构和模块说明

一期功能核心贡献者

功能 核心贡献人 预期完成时间 最低版本兼容 本周进度
iOS/MacApp+Clip开发 Hext123 2022年1月20日 iOS1514兼容修复中 第一版完成代码在iOS目录下
Android客户端 WolfHugo 2022年2月24日 5.1 界面细节调整中
快应用 7YHong 2022年2月27日 - 完成快应用界面展示部分下周对接API
API完善和更新 古俊杰 配合客户端同步更新 - 添加自动生成swgger文档功能中

试用

使用方法:

  1. 用苹果系统iOS 15+)摄像头扫描上边的码
  2. 通过apple账号登录
  3. 切换到「设备」标签页,点击右上角的加号,注册当前设备
  4. 切换到「Key」标签页点击右上角的加号创建一个Key
  5. 通过访问后边的URL即可推送内容https://api2.pushdeer.com/message/push?pushkey=key&text=要发送的内容

iOS APP和Mac APP可以在苹果商店搜索安装。注意iOS APP、Mac APP和轻应用都被认为是不同的设备都需要进行注册才能接收推送。

PS系统设计最低支持版本为iOS14但目前存在兼容性问题有iOS14真机和苹果开发者证书的同学可以下载源码并编译参考这个文档将报错信息提交到issue可以加速我们的修复时间。

FAQ

这个程序有什么用?

请参考本页面应用场景一节。

应用闪退怎么办?

iOS14 闪退问题正在定位,可参照上一段文字帮我们加快修复进度。

推送可以支持Mark和图片吗

支持请参考本页API说明一节中 message 部分.

PushDeer 提供推送证书吗?

出于内容和安全考虑官方APP不提供推送证书。待功能稳定后我们会单独发布一个自架版APP/Clip并提供独立的推送证书以免因为证书被滥用而影响到普通用户的使用。

轻APP找不到了怎么办

在搜索框搜索pushdeer就能找到。

轻应用怎么清理掉?占空间么?

系统设置里边有一个轻应用管理在里边可以清理。30天不用会自动清理掉。注意重新安装后设备id会变动需要再手动注册一遍。

推送返回 code 0 result false ,但收不到推送

需要先注册当前设备。

URL推送的文字如何换行?

URL中可以使用%0A作为换行符,如 https://api2.pushdeer.com/message/push?pushkey=key&text=line1%0Aline2

安装文档

相关项目

产品定义

PushDeer的核心价值,包括:「易用」、「可控」和「渐进」。

易用

易用性表现在两个方面:

  1. 易安装采用无APP方案直接去掉安装步骤
  2. 易调用只需输入URL无需阅读文档,就可以发送消息

可控

  1. Self-hosted:让有能力和精力的用户可以自行架设,避免因为在线服务下线导致的接口更换风险。
  2. 非商用免费不用PushDeer挣钱就无需支付费用
  3. 不依赖微信消息接口不像Server酱那样受腾讯政策影响

渐进

  1. 通过URL即可发送基本的文本消息通过更多参数可以对消息的样式等细节进行调整
  2. 无APP不能实现的功能不能覆盖的机型后期可以通过APP来补充

商业模式

PushDeer是一个商业开源项目采用「开放源码」、「自用免费」、「在线服务收费」的方式进行运作。

具体实现

PushDeer是一个以盈利为目的的商业项目品牌和源码所有权都由「方糖君」公司持有但和纯商业项目不同的地方在于

  1. 它开放源代码所有人都可以在非商业前提下按GPLv2授权使用
  2. 它接受社区贡献代码,作为回报,它会从商业收益中拿出部分来赞助项目贡献人
  3. 如果商业收益够大,它会尝试雇佣项目贡献人以兼职或者全职的方式为项目工作

这里边有一些细节:

  1. 为了避免某些个人或者公司使用源码搭建在线竞品服务收费,我们限制了源码不能商用
  2. 在刚开始的时候项目并没有商业收入而却是开发工作量最大的。所以首先我们会承担产品和界面设计、API设计和开发等工作并通过众筹的方式筹集了一些资金给其他大模块的贡献人

开放源码形式保证了其他代码贡献人在非商业场景下对源码的可控:

  1. 如果社区和代码贡献人不满意「方糖君」主导的商业化,可以 Fork 一个版本,继续在非商用的前提下自行运营
  2. 如果「方糖君」之后不再开放源代码,普通用户依然可以按之前的协议使用修改协议前的源码

用户细分

PushDeer主要面向以下三类用户

  1. 高阶电脑用户
  2. 开发者
  3. 公司或自媒体

高阶电脑用户

具有一定电脑操作技能的高阶用户,比如:

  1. NAS 用户
  2. 站长
  3. 电脑技术爱好者

他们使用PushDeer的场景包括但不限于

  1. 推送路由器和 NAS 的状态、公网 IP 等信息
  2. 推送 Wordpress 最新的评论
  3. 推送加密货币达到特定价格的通知
  4. 在多台设备上推送文本
  5. 自动化工具推送定期汇报

开发者

使用PushDeer的场景包括但不限于

  1. 推送报错和调试信息
  2. 推送服务器异常
  3. 推送定时任务输出
  4. 在自己的软件发送消息到手机引导用户填入PushDeer的key

公司或自媒体

使用PushDeer的场景包括但不限于

  1. 面向自己的用户推送通知、内容和营销信息(类似公众号,但不受微信限制)

项目目录说明

  • 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 说明

在线文档Swagger

API_BASE=http://127.0.0.1:8800

认证方式:通过登入接口获得token,通过postget方式附带token参数即可自动登入。

模拟登入(环境变量APP_DEBUG=true时可用)

GET /login/fake

通过苹果 idToken 登入

POST /login/idtoken

参数 说明 备注
idToken Sign in with Apple 中得到的 idToken

通过微信 oauth code 登入

POST /login/wecode

参数 说明 备注
code 客户端微信授权得到的code

合并用户并将旧用户删除

POST /user/merge

参数 说明 备注
token 认证token
type 字符串,必须为 apple 或者 wechat
tokenorcode type 为 apple时此字段为 idToken否则为 微信code

获得当前用户的基本信息

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 格式,选填 文本=textmarkdown图片=image默认为markdown

获得当前用户的消息列表

POST /message/list

参数 说明 备注
token 认证token
limit 消息条数 默认为10最大100

删除消息

POST /message/remove

参数 说明 备注
token 认证token
id 消息ID

更详细的请求和返回值可以参考这里

通用返回格式:

{
    code:正确为0错误为非0,
    content:内容,错误时无此字段,
    error:错误信息,无错误时无此字段
}

授权

本项目禁止商用(包括但不限于搭建后挂广告或售卖会员、打包后上架商店销售等),对非商业用途采用 GPLV2 授权