Code Monkey home page Code Monkey logo

easychen / pushdeer Goto Github PK

View Code? Open in Web Editor NEW
4.4K 42.0 449.0 158.24 MB

开放源码的无App推送服务,iOS14+扫码即用。亦支持快应用/iOS和Mac客户端、Android客户端、自制设备

License: Other

Shell 0.03% PHP 1.68% Blade 0.23% Ruby 0.21% Swift 1.66% JavaScript 0.76% Less 0.01% Kotlin 2.43% Java 0.50% Dockerfile 0.02% Jsonnet 0.08% Makefile 0.07% Lua 0.01% Go 2.64% Smarty 0.02% C++ 0.25% C 89.40% CSS 0.01% Procfile 0.01% Objective-C 0.01%
app push clip notification-service

pushdeer's Introduction

⚠️ 目前,官方架设的Android版本因接口权限停止无法使用,详情请点击

⚠️ 自架版服务器端需每年更新推送证书,如果之前架设的服务突然无法收到推送,请尝试拉取部署最新代码,或者手动更新证书

PushDeer是一个可以自行架设的无APP推送服务,同时也为因为某些原因无法使用无APP推送方案的同学提供有APP/自制设备方案。

🐙🐱 GitHub仓库 🔮 **大陆镜像仓库@Gitee

本项目已经实现的方案/端包括:

  • 无APP方案:
    • 轻APP(APP Clip)
    • 快应用
  • 有APP方案:
    • iOS客户端
    • Mac客户端
    • Android客户端
  • 自制设备方案:
    • DeerESP(ESP8266/ESP32)

👉点此查看如何将PushDeer消息推送到成本不到40元的自制设备上


登入 设备 Key 消息 设置

子项目和核心贡献者

功能 核心贡献人 预期完成时间 最低版本兼容 本周进度
iOS客户端/Mac客户端/轻APP Hext123 已完成 iOS14 第一版完成,代码在iOS目录下
Android客户端 WolfHugo 已完成 5.1 第一版开发完成,release页面可下载。Websocket方案准备中
快应用 7YHong 已完成 - 代码在quickapp目录下,可自行上架
物联网版本DeerESP Easy 已完成 - 代码在iot目录下,专用设备PCB和外壳设计中
API Easy 古俊杰 已完成 - -
gorush的mi push版本 SinTod 已完成 - 代码在push/gorush-with-mipush目录下

试用

使用官方在线版本

官方在线版不用自行架设服务器端,只需启动客户端即可

iOS14+

苹果手机(iOS 14+)用系统摄像头扫描上边的码即可拉起轻应用。亦可在苹果商店搜索「PushDeer」安装。

注意:这里不要安装PushDeer自架版

MacOS 11+

PushDeer有Mac客户端,亦支持推送。可在Mac应用商店中搜索「PushDeer」安装。

Android

快应用尚在开发,可下载并安装Android测试版APP(GitHub|Gitee)。

发送消息

  1. 通过apple账号(或微信账号·仅Android版支持)登录
  2. 切换到「设备」标签页,点击右上角的加号,注册当前设备
  3. 切换到「Key」标签页,点击右上角的加号,创建一个Key
  4. 通过访问后边的URL即可推送内容:https://api2.pushdeer.com/message/push?pushkey=key&text=要发送的内容

注意注册设备用到了device token,应用一旦重装,device token会变,所以需要重新注册一次。

发送实例

发送文字:

https://api2.pushdeer.com/message/push?pushkey=key&text=要发送的内容

发送图片:

https://api2.pushdeer.com/message/push?pushkey=<key>&text=<图片URL>&type=image

发送Markdown:

https://api2.pushdeer.com/message/push?pushkey=<key>&text=标题&desp=<markdown>&type=markdown

在URL中可以用%0A换行,当参数中有特殊字符时,需要进行urlencode,因此更建议通过函数或者SDK发送。

PHP函数:

function pushdeer_send($text, $desp = '', $type='text', $key = '[PUSHKEY]')
{
    $postdata = http_build_query(array( 'text' => $text, 'desp' => $desp, 'type' => $type , 'pushkey' => $key ));
    $opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata));
    
    $context  = stream_context_create($opts);
    return $result = file_get_contents('https://api2.pushdeer.com/message/push', false, $context);
}

将 PushDeer 接入 ServerChan

由于 PushDeer 刚开发,很多软件和平台都尚未整合其接口,你可以将 PushDeer 接入Server酱作为通道使用,效果是:

  1. 使用sendkey调用Server酱接口
  2. 在 PushDeer 客户端收到通知

接入方式如下:

  1. 登入 sct.ftqq.com ,选择「消息通道」页面,选择「推荐通道」中的「PushDeer」
  2. 将在PushDeer客户端中生成的Key填入即可

如果你使用的是自架服务器,那么也可以通过「其他通道」中的「自定义」来修改转发格式和文案。具体操作是,在「自定义 WebHook 配置用 json」中填入以下内容:

{
	"url":"<endpoint>/message/push?pushkey=<pushkey>",
	"values":[
		{"type":"markdown"},
                 {"text":"{{title}} "},
                 {"desp":"{{desp}} [查看详情]({{url}})"}
	]
}

注意将 <endpoint> 换成你自架服务器的地址,将 {{pushkey}} 换成你自己的 PushDeer 账号中的 key,保存即可。可点右侧的测试按钮测试效果。

使用自架服务器端和自架版客户端

自架服务器端

除了使用官方架设的服务器端,你也可以架设自己的服务器端。本仓库支持通过docker部署服务器端。

如果你没有云服务器,可以看看腾讯云30~50元首单的特价服务器

Docker-compose

首先请确保服务器(假设其IP或域名为$AAA)上支持docker和docker-compose。

然后运行以下代码:

git clone https://github.com/easychen/pushdeer.git
cd pushdeer
docker-compose -f docker-compose.self-hosted.yml up --build -d

如果你的服务器连接GitHub有困难,可以使用Gitee的代码,但需要核对是否为最新版本(有可能没同步)

git clone https://gitee.com/easychen/pushdeer.git
cd pushdeer
docker-compose -f docker-compose.self-hosted.yml up --build -d 

如提示docker服务未安装/找不到/未启动,可在 docker-compose 前加 sudo 再试

等待初始化完成后,访问 $AAA(需替换为服务器端IP或域名):8800,看到扫码提示和图片则说明容器已经启动。

⚠️ 自架服务器端需每年2月拉取一次更新推送证书

如果您在部署中遇到问题,可按调试文档定位并发现错误信息。

使用自架版客户端

在苹果商店搜索「PushDeer·自架版」安装并启动。

在启动界面输入 $AAA(需替换为服务器端IP或域名):8800,点保存。如果通信顺利,即可顺利完成「通过Apple登录」。如输入错误,可点击「重置API endpoint」重新输入。

登入成功后,亦可随时在设置页面重置 API endpoint。

生产环境的配置强化/优化

参见𐂂安装文档

关于轻应用

轻应用找不到了怎么办?

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

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

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

开发说明

视频版设计文档: 📼 项目视频说明 📼 项目架构和模块说明

目录说明

  • api: Laravel实现的API接口,点此查看请求和返回demo
  • docker: API实现的docker封装,一键启动,方便使用
  • doc: 文档目录,包括界面设计源文件(Adobe XD)和资源文件(logo和avatar)
  • push: 基于 gorush 架设的推送微服务,配置文件开启 async 可以提升发送速度
  • ios: 用于放置 iOS 源文件,ios/Prototype_version 目录是我边学边写的原型验证版本(SwiftUI+Moya+Codable),很多地方需要重写,仅供参考
  • quickapp: 用于放置快应用源代码
  • android: 用于放置安卓客户端源代码

开发环境搭建

下载代码

git clone https://github.com/easychen/pushdeer.git

启动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 多个key用,隔开,在线版最多10个,自架版默认最多100个
text 推送消息内容
desp 消息内容第二部分,选填
type 格式,选填 文本=text,markdown,图片=image,默认为markdown

type 为 image 时,text 中为要发送图片的URL。

获得当前用户的消息列表

POST /message/list

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

删除消息

POST /message/remove

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

清除全部消息

POST /message/clean

参数 说明 备注
token 认证token

Simple token

为了方便客户端永久保持登入状态,我们提供了一个永不失效的Token,即 Simple token

获取 Simple token

通过 上文中的「获得当前用户的基本信息」接口(POST /user/info) 得到

通过 Simple token 登入

POST /login/simple_token

参数 说明 备注
stoken Simple token

登入成功返回认证token。

重置 Simple token

POST /simple_token/regen

参数 说明 备注
token 认证token
清空 Simple token

POST /simple_token/remove

参数 说明 备注
token 认证token

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

通用返回格式:

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

产品设计文档

产品定义

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. 面向自己的用户推送通知、内容和营销信息(类似公众号,但不受微信限制)

授权

本项目禁止商用(包括但不限于搭建后挂广告或售卖会员、打包后上架商店销售等),在非商用的情况下遵循GPL v2,当两者冲突时,以非商用原则优先。

相关项目

pushdeer's People

Contributors

7yhong avatar abgelehnt avatar alone-wolf avatar chengyuhui avatar easychen avatar hext123 avatar ilovintit avatar sintod avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pushdeer's Issues

安装出现问题

@easychen
程序只支持mariadb吗?我服务器只装了mysql5.5,如果我用mysql5.5版本是否可以?如果可以配置文件怎么修改
20211224091118

后续自建服务器的询问

首先谢谢各位开发者的工作,pushdeer 这个 app 很好用!

我会有个小担心,以后用户多了之后,api2.pushdeer.com/message/push/ 服务器会不会有瓶颈呢。

我在安卓端看到了警告 "由于厂商推送设备服务限制,暂时不支持更换为自建 PushDeer 服务器"

具体是什么限制呢?是推送服务器的 IP 吗?

如果开发者搭建自己服务器并且申请自己的开发者appid,这样还会有问题吗?

非常喜欢 pushdeer 这个工具!练丹人士一定会狂喜

编译成二进制

不知道将来会不会编译成二进制,适配arm、x64机型,就像bark server那样一个文件即可

一加8注册设备时弹窗提示: 本设备在厂商推送服务注册失败.

问题描述
使用 一加8 安装 安卓测试版app后(https://github.com/easychen/pushdeer/releases/download/android1.0alpha/pushdeer-alpha-4.apk), 微信登录和生成密钥的过程都没有问题, 但是 在注册设备时弹窗提示: 本设备在厂商推送服务注册失败.

重现

重现步骤:

  1. 打开PushDeer安卓版应用.
  2. 切换到设备页, 点击右上角的 + 号.
  3. 弹窗提示错误, 弹窗内容如下
    f6816b9e7a235ae8fc9827f1385c65a

期望的结果

截图

环境和版本

  • 系统版本: c19f17b95ca595562778b1011a94529

  • 6b0fd5fc9bdf1bb47e424ac624dfc0a

  • 软件版本: 官方安卓测试版app
    19f993b7bf926d6fd38bdf5d2b63f8e

软件权限

  • 通知权限
    8e58a65d65f77f80abc4b62034635cc
  • 应用权限
    c9c02afe0b785821936bf21e519fbce
  • 联网权限
    a347f80f28dfc7b769b829396df9f58

收不到消息请填写

  • 是否注册设备: [否]

  • 是否注册当前设备: [否]( 设备页面有设备名称后显示「当前设备」 )

  • 是否开通通知权限: [是]

  • 是否开重装过应用: [是]

  • APP和轻APP(Clip)是否分别都注册过设备: [否]

  • 注册设备页面截图

  • 应用通知设置页面截图

大部分用户在尝试删除重装应用后,可以修复问题,您也可以试试
删除重装和关闭再打开都无法解决.

其他说明

使用 iPad 生成的 Key 发起请求,通知却推送到 iPhone

遇到的问题如题,详细如下:

测试的 URL

https://api2.pushdeer.com/message/push?pushkey=key&text=要发送的内容

系统版本

iOS 15.0.1
iPadOS 15.2

操作流程和具体问题

  1. 一开始只下载了 iOS 端,请求的结果列在了 APP 的“消息”页,可以看到,但是手机不会有通知(没有 Banner,也没有提示音,通知权限也确定给了),多次删除设备重试无果,多次卸载 APP 重试无果;
  2. 又在 iPadOS 下载了,按照流程登录(设备页能看到手机设备,也能看到平板设备【有“(当前设备)”表示】)之后,用 iPad 生成的 Key 请求 URL,iPad 收不到通知(没有 Banner,也没有提示音,通知权限也确定给了),但是 iPhone 能够收到通知(Banner、提示音都有),多次尝试都是“使用 iPad 生成的 Key 发起请求,通知却推送到 iPhone”的结果。

#号后内容被吞

当发送的消息包含#时,#后面的所有内容会被吞掉
如果内容开头是#,则直接报错 "The text must be a string."
本意输出一个#,就会出现以上错误。
image
如果内容是123#456#789,通知端只能收到123,#后全部没了
必须发送%23,即把#编码后,才能发送正常
image

安卓APP的一个建议

设备是小米10Pro,发现APP内可以设置秘钥的名称,但是通知的时候不会显示。如下图,通知中存在两个pushdeer名称,圈住的pushdeer不知道是否能修改为秘钥的名称?还是说这里是有其他的设计?IMG_20220215_174422.jpg

自架服务器开启MQTT服务,启动时报错[Bug]

自架服务器端请填写以下信息
自架服务器版启动 docker-compose -f docker-compose.self-hosted.yml up --build
修改根目录下的 docker-compose.self-hosted.yml后如图
image
报错:
ERROR: The Compose file './docker-compose.self-hosted.yml' is invalid because:
Unsupported config option for services.app: 'mqtt'

使用自架服务器端,启动后查看服务日志,push-ios 异常退出

使用自架服务器端,按文档操作,启动后查看服务日志,push-ios 异常退出。推送收不到通知。

-> Executing /opt/docker/provision/entrypoint.d/05-permissions.sh
-> Executing /opt/docker/provision/entrypoint.d/20-apache.sh
-> Executing /opt/docker/provision/entrypoint.d/20-php-fpm.sh
-> Executing /opt/docker/provision/entrypoint.d/20-php.sh
-> Executing /opt/docker/provision/entrypoint.d/init.sh
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Nothing to install, update or remove
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
Generating optimized autoload files

Illuminate\Foundation\ComposerScripts::postAutoloadDump
@php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fruitcake/laravel-cors
Discovered Package: laravel/sail
Discovered Package: laravel/sanctum
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
77 packages you are using are looking for funding.
Use the composer fund command to find out more!
Application key set successfully.
Nothing to migrate.
Database seeding completed successfully.
-> Executing /opt/docker/bin/service.d/supervisor.d//10-init.sh
2022-02-10 07:53:01,348 INFO Included extra file "/opt/docker/etc/supervisor.d/apache.conf" during parsing
2022-02-10 07:53:01,348 INFO Included extra file "/opt/docker/etc/supervisor.d/cron.conf" during parsing
2022-02-10 07:53:01,348 INFO Included extra file "/opt/docker/etc/supervisor.d/dnsmasq.conf" during parsing
2022-02-10 07:53:01,348 INFO Included extra file "/opt/docker/etc/supervisor.d/php-fpm.conf" during parsing
2022-02-10 07:53:01,348 INFO Included extra file "/opt/docker/etc/supervisor.d/postfix.conf" during parsing
2022-02-10 07:53:01,348 INFO Included extra file "/opt/docker/etc/supervisor.d/push-clip.conf" during parsing
2022-02-10 07:53:01,348 INFO Included extra file "/opt/docker/etc/supervisor.d/push-ios.conf" during parsing
2022-02-10 07:53:01,348 INFO Included extra file "/opt/docker/etc/supervisor.d/ssh.conf" during parsing
2022-02-10 07:53:01,348 INFO Included extra file "/opt/docker/etc/supervisor.d/syslog.conf" during parsing
2022-02-10 07:53:01,348 INFO Set uid to user 0 succeeded
2022-02-10 07:53:01,359 INFO RPC interface 'supervisor' initialized
2022-02-10 07:53:01,359 INFO supervisord started with pid 1
2022-02-10 07:53:02,361 INFO spawned: 'syslogd' with pid 82
2022-02-10 07:53:02,363 INFO spawned: 'push-ios' with pid 83
2022-02-10 07:53:02,364 INFO spawned: 'push-clip' with pid 84
2022-02-10 07:53:02,365 INFO spawned: 'php-fpmd' with pid 85
2022-02-10 07:53:02,366 INFO spawned: 'apached' with pid 86
2022-02-10 07:53:02,367 INFO spawned: 'crond' with pid 87
-> Executing /opt/docker/bin/service.d/httpd.d//10-init.sh
2022-02-10 07:53:02,379 INFO success: php-fpmd entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2022-02-10 07:53:02,379 INFO success: apached entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2022-02-10 07:53:02,379 INFO success: crond entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
-> Executing /opt/docker/bin/service.d/php-fpm.d//10-init.sh
-> Executing /opt/docker/bin/service.d/cron.d//10-init.sh
-> Executing /opt/docker/bin/service.d/syslog-ng.d//10-init.sh
Setting php-fpm user to application
2022-02-10 07:53:02,401 INFO exited: push-ios (exit status 1; not expected)
[2022-02-10T07:53:02.455399] WARNING: With use-dns(no), dns-cache() will be forced to 'no' too!;
[SYSLOG] syslog-ng[82]: syslog-ng starting up; version='3.19.1'
[Thu Feb 10 07:53:02.476639 2022] [mpm_event:notice] [pid 86:tid 139733663196288] AH00489: Apache/2.4.38 (Debian) OpenSSL/1.1.1d configured -- resuming normal operations
[Thu Feb 10 07:53:02.476720 2022] [core:notice] [pid 86:tid 139733663196288] AH00094: Command line: 'apache2 -D FOREGROUND -D APACHE_LOCK_DIR'
[10-Feb-2022 07:53:02] NOTICE: fpm is running, pid 85
[10-Feb-2022 07:53:02] NOTICE: ready to handle connections
2022-02-10 07:53:03,494 INFO success: syslogd entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2022-02-10 07:53:03,495 INFO spawned: 'push-ios' with pid 175
2022-02-10 07:53:03,495 INFO success: push-clip entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2022-02-10 07:53:03,515 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:05,518 INFO spawned: 'push-ios' with pid 183
2022-02-10 07:53:05,538 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:08,542 INFO spawned: 'push-ios' with pid 192
2022-02-10 07:53:08,562 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:12,567 INFO spawned: 'push-ios' with pid 199
2022-02-10 07:53:12,587 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:17,593 INFO spawned: 'push-ios' with pid 207
2022-02-10 07:53:17,614 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:23,621 INFO spawned: 'push-ios' with pid 216
2022-02-10 07:53:23,643 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:30,651 INFO spawned: 'push-ios' with pid 225
2022-02-10 07:53:30,671 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:38,680 INFO spawned: 'push-ios' with pid 234
2022-02-10 07:53:38,700 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:47,710 INFO spawned: 'push-ios' with pid 243
2022-02-10 07:53:47,730 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:57,740 INFO spawned: 'push-ios' with pid 252
2022-02-10 07:53:57,760 INFO exited: push-ios (exit status 1; not expected)
2022-02-10 07:53:58,761 INFO gave up: push-ios entered FATAL state, too many start retries too quickly
[SYSLOG] CRON[262]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)

问个不知道合不合适的问题

这个轻应用就是在不同设备间,使用浏览器输入一段代码以发送消息的吗?
##那和普通的在APP内发送消息有什么区别呀?
##而且如果要实现群发功能怎么办呢?

希望能尽快适配macOS 10

V11 (Big Sur)有太多bug,大部分都是在用macOS 10.+(Catalina)的,希望能尽快适配。感谢!

iOS 消息页面更新不及时

如果 APP 当前在后台且正在消息 Tab,点击通知打开 APP,新收到的推送没有刷新出来,必须切换一下 Tab 才可以看到。

另外感觉消息 Tab 在第一个更符合使用习惯。

ios 15.3.1无法收到通知

ios 15.3.1无法收到通知
通知权限已全部打开,仍然无法收到推送。
官方版,非自架版。
使用同一苹果id登录,安卓版可以收到通知,ios则不行。

多用户推送问题

我在我的手机登录,生成了我的key。但是有另一个人的设备也需要推送,但我没法在那个设备上登录。能否支持另外的人登录后,手动输入我的key,或者发送请求里支持key列表?

有没群晖小白教程?

感觉很好用,能不装APP,那就是可以不用bark了,但完全看不懂,百度没有教程。

关于服务端代码质量

简单看了下,服务端代码质量感觉不大行,提几个建议哈:

  1. 使用 $request->session 代替 $_SESSION 来操作 session
  2. 使用 paginate 来处理列表分页
  3. 参数校验先判断 required 再判断类型
  4. 使用 Config::get() 来读取配置,而非使用 env 读取环境变量
  5. Model 使用关联关系,而非自己组装外键
  6. 非标准单词,建议使用下划线或者驼峰式,比如 pushkey 改为 push_key
  7. 通过 Policy 组件来处理用户与数据的权限,而非自己代码中校验
  8. 尽量不要自定义全局辅助函数,因为他们是不可被替换,耦合严重
  9. 提前判断减少 if 嵌套层级,例如:
foreach ($devices as $device) {
    if ($device) {
        $func_name = $device['type'].'_send';
        if (function_exists($func_name)) {
            $result[] = $func_name($device->is_clip, $device->device_id, $validated['text'], '', env('APP_DEBUG'));
        }
    }
}

可以改写为:

foreach ($devices as $device) {
    if (!$device) {
        confinue;
    }
    $func_name = $device['type'].'_send';
    if (function_exists($func_name)) {
        $result[] = $func_name($device->is_clip, $device->device_id, $validated['text'], '', env('APP_DEBUG'));
    }
}

[Bug]

描述你遇到的Bug

请用精确的语言描述你的遇到的问题,不要用「不能用」,「报错」等模糊字眼,要提供具体的信息,如报错信息是什么,最好能提供截图

以下内容不是必填,但越详细越能帮助我们解决问题。

重现

重现步骤:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

期望的结果

截图

自架服务器端请填写以下信息

调试文档 进行调试的结果:

API服务启动输出截图

联通性测试截图

命令行推送返回截图

客户端请填写以下信息

环境和版本

  • 系统: [如 Mac、iOS、Android、ESP]
  • 版本: [如自架版1.2,官方版1.2]
  • 模块:[如客户端、服务器端、Docker-compose、Docker独立镜像]
  • 版本号 [如 22]

手机或电脑的的详细信息

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

收不到消息请填写

  • 是否注册设备: [是/否]

  • 是否注册当前设备: [是/否]( 设备页面有设备名称后显示「当前设备」 )

  • 是否开通通知权限: [是/否]

  • 是否开重装过应用: [是/否]

  • APP和轻APP(Clip)是否分别都注册过设备: [是/否]

  • 注册设备页面截图

  • 应用通知设置页面截图

大部分用户在尝试删除重装应用后,可以修复问题,您也可以试试

其他说明

ios14 app闪退

打开app点击+直接闪退,然后软件就进不去了

too long

/config/database.php

'charset' => 'utf8', 'collation' => 'utf8_general_ci',

可否支持更多客户端接收推送消息?

不局限在手机接收推送通知,可以在任何联网的设备接收或发送通知,每个设备可以设置一个别名,可以把多个设备关联为一个群组,像群组key发送消息所有设备都可以接收到通知!
MAC/Windows:应用商店安装客户端用于接收或发送推送消息
Chrome/Edge:使用浏览器插件后台运行接收或发送推送通知
WEB端:登录站点设置一个key即可用浏览器接收推送通知

Android软件消息内容被折叠

小米10,miui12.5系统。安卓测试版应用内多行文字的消息内容被折叠为一行。无规律出现。有时滑动几下又展开了。
如图(95533那条通知原本有三四行):
IMG_20220129_094713

个人安卓用户是不是无法使用自建服务器?

[安装文档](https://github.com/easychen/pushdeer/blob/main/doc/%E5%AE%89%E8%A3%85%E6%96%87%E6%A1%A3.md)

你好,在看[安装文档]的时候,有个问题想问一下:

苹果用户可以使用iso自架版客户端通过配置endpoint_url的方式完成自架服务器的推送,安卓用户为啥不能也通过这种方式完成自架服务器的推送?

我是一个NAS的用户,打算自架pushdeer服务器,同时也是安卓用户。现在无法通过注册小米开发者(**企业认证**)创建应用获取包名和AppSecret的方式编译Android客户端,所以只能使用打包好的Android客户端和pushdeer.com的服务端完成推送么?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.