尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
PushDeer 推送服务 gorush 的 HTTP API 测试指南:用 bat 与 test.json 验证多平台消息推送
后端消息路由移动开发物联网【免费下载链接】pushdeer开放源码的无App推送服务iOS14扫码即用。亦支持快应用/iOS和Mac客户端、Android客户端、自制设备项目地址https://gitcode.com/gh_mirrors/pu/pushdeer点击查看免费下载本指南面向部署了 PushDeer 自建推送链路push/gorush-with-mipush的开发者讲解如何通过 HTTP 请求对 gorush 推送服务进行最直接的接口级验证。你将掌握测试请求的 JSON 结构、平台编号含义、bat工具的用法、响应日志的解读方式并结合源码理解服务端校验与派发的底层逻辑从而在正式接入 iOS / Android / 小米推送前快速确认服务可用性。测试思路为什么用 HTTP 请求验证推送服务gorush 是一个 Go 语言实现的推送网关对外以 HTTP 服务形式提供统一的推送入口。无论底层对接的是 APNsiOS、FCMAndroid、HMS华为还是 MiPush小米调用方都只需向同一个/api/push接口提交标准 JSON 即可由服务端根据platform字段分发到对应的推送通道。因此在接入真实设备令牌token之前先用一条最小化的 HTTP 请求验证接口连通性、参数校验逻辑与返回结构是排查问题最快的手段。仓库中的测试说明文档 push/gorush-with-mipush/src/tests/README.md 给出了官方推荐的测试路径本指南将沿着这条路径逐步展开。第一步准备测试工具 bat测试文档推荐使用一个名为bat的命令行工具它是一款 cURL-like tool for humans面向人类友好的类 cURL 工具。与原生curl相比bat更强调可读性适合快速构造带请求体body的 POST 请求尤其适合从文件读取 JSON 请求体的场景。安装完成后可以通过bat --help确认工具可用。后续所有测试命令都将通过bat发起。说明如果环境中没有bat使用curl也能达到同样效果例如curl -X POST --data tests/test.json http://localhost:8088/api/push本文以仓库文档为准统一采用bat演示。第二步理解测试请求 JSON 结构测试文档提供了可直接使用的请求模板位于 push/gorush-with-mipush/src/tests/test.json{ notifications: [ { tokens: [token_a, token_b], platform: 1, message: Hello World iOS! }, { tokens: [token_a, token_b], platform: 2, message: Hello World Android! } ] }这个模板体现了两个关键约定顶层notifications是数组一次请求可以携带多条推送每条对应一个目标平台服务端会逐条派发并汇总结果。每条通知由tokensplatformmessage构成最小要素tokens是目标设备令牌列表platform是平台编号message是推送正文。platform 平台编号的权威定义platform的取值在源码中被定义为一组常量位于 push/gorush-with-mipush/src/core/core.goconst ( // PlatFormIos constant is 1 for iOS PlatFormIos iota 1 // PlatFormAndroid constant is 2 for Android PlatFormAndroid // PlatFormHuawei constant is 3 for Huawei PlatFormHuawei //PlatFormMI constant is 4 for MI PlatFormMI )platform 值常量名目标平台仓库测试模板中的示例1PlatFormIosApple iOSAPNsHello World iOS!2PlatFormAndroidAndroidFCMHello World Android!3PlatFormHuawei华为 HMS模板未含4PlatFormMI小米 MiPush模板未含注意在默认配置文件 push/gorush-with-mipush/src/config/testdata/config.yml 中android.enabled默认开启而ios.enabled默认关闭因此测试模板里 Hello World iOS! 这条在实际部署中是否真正发出取决于服务端配置。从源码 push/gorush-with-mipush/src/router/server.go 的handleNotification可以看到服务端会先按platform检查对应通道是否Enabled未启用的平台会被直接跳过不会进入推送队列。更多可选字段除上述三个必填字段外PushNotification结构体定义于 push/gorush-with-mipush/src/notify/notification.go还支持一批常用可选字段测试时可以按需追加字段适用平台说明notif_id通用消息 ID用于日志关联title通用通知标题priority通用推送优先级sound通用提示音data通用自定义附加数据对象retry通用单条消息自定义重试次数badgeiOS角标数字topiciOS/Android/HMS主题消息production/developmentiOS指定 APNs 环境api_key、to、time_to_liveAndroidFCM 专用to支持/topics/...主题或设备组app_id、app_secret华为HMS 专用apnsiOSAPNs 透传扩展字段第三步发起测试请求在 gorush 服务已启动默认监听8088端口的前提下从push/gorush-with-mipush/src目录执行测试文档给出的命令bat POST localhost:8088/api/push tests/test.json命令拆解POSTHTTP 方法localhost:8088/api/push推送接口地址。接口路径由配置api.push_uri控制默认值即/api/push见 push/gorush-with-mipush/src/config/testdata/config.yml tests/test.json将 tests/test.json 的内容作为请求体body注入。成功时服务端返回 HTTP 200响应体结构如下来自 push/gorush-with-mipush/src/router/server.go{ success: ok, counts: 4, logs: [] }counts本次请求统计的推送目标数两条通知各含 2 个 token共 4logs逐 token 的推送结果日志数组异步模式core.sync: false下通常为空同步模式下方可拿到失败明细。第四步服务端如何解析、校验与派发源码级理解服务端的处理链路有助于根据错误码快速定位问题。一次/api/push请求会依次经过以下环节1. 绑定与基础校验push/gorush-with-mipush/src/router/server.go 中的pushHandler先通过binding.JSON把请求体绑定到notify.RequestPush结构体随后执行三层检查请求体不是合法 JSON → HTTP 400提示Missing notifications field.notifications数组为空 → HTTP 400提示Notifications field is empty.通知条数超过core.max_notification默认 100→ HTTP 400提示Number of notifications(N) over limit(M)。2. 消息级校验进入队列前每条通知还要通过 push/gorush-with-mipush/src/notify/notification.go 的CheckMessage非主题消息无to、无condition必须至少提供一个 token否则报错the message must specify at least one registration IDAndroid 单条消息的 token 数上限为1000华为上限为500Android 的time_to_live必须在0 ~ 24192004 周之间。3. 平台分发通过校验的消息进入handleNotificationpush/gorush-with-mipush/src/router/server.go该函数按platform过滤未启用通道然后投递到消息队列消费端由notify.SendNotificationpush/gorush-with-mipush/src/notify/notification.go按平台调用对应实现switch v.Platform { case core.PlatFormIos: resp, err PushToIOS(v, cfg) case core.PlatFormAndroid: resp, err PushToAndroid(v, cfg) case core.PlatFormHuawei: resp, err PushToHuawei(v, cfg) case core.PlatFormMI: resp, err PushToMI(v, cfg) }其中小米通道的实现位于 push/gorush-with-mipush/src/notify/notification_mipush.goGetMINotification会把title/message封装成带push_title、push_body、is_show_notify字段的 payload并通过RegistrationId拼接多个 token 后调用xmpush.SendMessageByRegIds单推/批量推或SendMessageAll全推。第五步结合测试用例验证行为仓库自带两组测试可以更严谨地验证 HTTP 接口与小米推送的行为push/gorush-with-mipush/src/router/server_test.go覆盖了接口健康检查/healthz、缺失notifications参数返回 400、空数组返回 400、超过max_notification返回 400、同步模式core.sync: true下返回失败日志、禁用平台被跳过TestDisabledAndroidNotifications中 counts 从 3 降为 1等场景push/gorush-with-mipush/src/notify/notification_mipush_test.go验证了小米单推SendByCid、批量推SendByCids与全推SendAll三种发送方式测试 payload 均为{title: 这是测试title, content: 这是测试内容, is_show_notify: 1}形式。运行测试cd push/gorush-with-mipush/src go test ./...注意涉及真实推送通道的用例如TestSuccessPushHandler已被t.Skip()跳过依赖环境变量ANDROID_API_KEY、ANDROID_TEST_TOKEN以及小米appsecret/package配置未配置时请跳过或仅运行接口层用例。第六步常见问题排查测试时收到 400 错误优先检查 JSON 是否合法、notifications是否为空、条数是否超过core.max_notification默认 100可在 push/gorush-with-mipush/src/config/testdata/config.yml 调整以及每条通知是否至少包含一个非空 token。请求成功但设备收不到消息确认服务端core.sync: true开启同步模式以便在响应logs中直接看到失败原因如 token 无效、通道密钥错误见 push/gorush-with-mipush/src/config/config.go 的默认配置注释确认目标平台在配置中enabled: true且通道密钥正确小米对应mi.app_secret与mi.package若启用了log.hide_token: true默认开启日志中的 token 会被打码便于保护隐私但不利于逐条核对见 push/gorush-with-mipush/src/logx/log.go。解读 logs 输出推送结果日志由 push/gorush-with-mipush/src/logx/log.go 的LogPushEntry定义字段包括notif_id、typesucceeded-push/failed-push、platform、token、message与error失败详情会进入错误日志并可通过core.feedback_hook_url配置异步回调到外部 Webhook实现见 push/gorush-with-mipush/src/notify/feedback.go。不想用文件存请求体测试文档推荐把 JSON 写入文件后用重定向。若想临时改动内容也可以直接构造 JSON 发送只需保证notifications结构与模板一致即可。服务端还提供以下辅助接口辅助测试路径见 push/gorush-with-mipush/src/config/testdata/config.ymlGET /healthz健康检查bat之外可用--ping参数验证见 push/gorush-with-mipush/src/main.goGET /api/stat/goGo 运行环境信息GET /api/stat/app推送成功/失败计数与队列状态GET /metricsPrometheus 指标GET /api/config当前生效配置YAML 格式。从测试到落地PushDeer 中的真实配置形态测试模板中的platform: 1iOS与platform: 2Android正是 PushDeer 推送链路中最常使用的两种。仓库为 iOS 主端与 App Clip 提供了两个最小化生产配置示例可作为落地参考push/ios.yml.smapleiOS 推送服务配置启用ios与mi两个通道mi.max_retry: 3使用 p12 证书并配置了key_id/team_idpush/clip.yml.sampleApp Clip 推送服务配置监听端口8889。两者都保留了stat_go_uri、health_uri等接口路径说明线上服务与本文测试的是同一套 API 约定把测试 JSON 中的localhost:8088替换为实际部署地址、把token_a换成真实设备令牌即可完成从接口测试到真实推送的平滑过渡。小结通过bat POST localhost:8088/api/push tests/test.json一条命令即可验证 gorush 推送服务的完整链路。结合 tests/test.json 中的双平台模板、core.go 中的平台编号、notification.go 中的校验规则以及logs响应结构开发者可以快速判断服务是否可用、请求是否合法、通道是否生效让推送接入的第一公里走得又快又稳。赞分享后端消息路由移动开发物联网【免费下载链接】pushdeer开放源码的无App推送服务iOS14扫码即用。亦支持快应用/iOS和Mac客户端、Android客户端、自制设备项目地址https://gitcode.com/gh_mirrors/pu/pushdeer点击查看免费下载相关推荐gorush 实战通过 HTTP 请求测试推送通知服务基于 bat 与 /api/push 接口gorush 实战通过 HTTP 请求测试推送通知服务基于 bat 与 /api/push 接口 本篇技术指南围绕 gorush 仓库中的 tests/R后端git-subtree深度剖析原理、优势与适用场景git subtree深度剖析原理、优势与适用场景 git subtree是Git的一个强大工具作为git submodule命令的实验性替代方案它允许你版本控制开发工具gorush跨平台推送调试各平台推送调试技巧gorush跨平台推送调试各平台推送调试技巧 你是否还在为跨平台推送调试而烦恼不同平台配置繁琐、错误提示模糊、证书问题层出不穷本文将为你提供一套完整的go后端上一篇OpenTelemetry Go OTLP gRPC 指标导出器实验特性解析Self-Observability 自观测机制下一篇Authelia WebAuthn 完整指南从 FIDO U2F 迁移、Passkey 登录到 MDS3 元数据校验的源码级实现解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

万字长文介绍 AI 软件开发全链路实战:从 IDE 到 Agent 的 TaoToken 统一接入

万字长文介绍 AI 软件开发全链路实战:从 IDE 到 Agent 的 TaoToken 统一接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/15 11:25:42
运行OpenClaw智能自动化,养龙虾(OpenClaw)到底用什么电脑合适:TaoToken统一Key接入下的硬件选型清单

运行OpenClaw智能自动化,养龙虾(OpenClaw)到底用什么电脑合适:TaoToken统一Key接入下的硬件选型清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/15 11:25:42
英飞凌 AURIX TC3xx SMU 安全管理单元

英飞凌 AURIX TC3xx SMU 安全管理单元

目录 TC3xx SMU 统一的故障管理 RT Recovery Timer SMU冗余设计 SMU系统集成 应用实例 TC3xx SMU key features: 1. 统一的故障管理; 2. 恢复计时器; 3. SMU双份设计,冗余设计; 统一的故障管理 SMU可以对每个…

📅 2026/10/15 11:25:42
MORE NEWS

更多资讯

📰

零基础网页开发教程:用HTML和CSS创建第一个简单网页

1. 零基础教学的第一步:只选HTML和CSS,不碰框架带过很多轮零基础学员之后,我最大的体会是:教“创建简单网页”不需要一次塞太多东西,真正要把顺序排对。很多人一上来就想做那些会动、会跳、能登录的网站,结…

📰

一级域名与二级域名区别详解:从解析到SSL证书的实用指南

在中文互联网环境里,域名是每个站长迟早要面对的基础问题,但“一级域名”和“二级域名”这两个词,恰恰是新手最容易绕晕的地方。我见过不少人在做解析、配证书、申请接入备案时,因为层级理解出错,白白浪费一整天等生效…

📰

C#背单词源代码项目实战:控制台、JSON与艾宾浩斯复习

简介:面向C#初学者的背单词应用源代码,演示如何利用TextReader/StreamReader读取txt单词库,将英文单词与中文释义逐行解析,并通过正序、倒序、随机三种模式展示,支持自定义刷新速度,适合课程设计、课后练习…

📰

Rust GUI框架Iced的Size结构体设计与布局优化

1. 项目背景与核心价值在UI开发领域,控件尺寸计算是个看似简单实则暗藏玄机的基础问题。Iced作为Rust生态中快速崛起的GUI框架,其core库中的Size结构体承载着整个布局系统的基石作用。最近在优化一个跨平台应用的布局性能时,我深入研究了size…

📰

开源安全工具选型与落地:中小团队安全观测能力建设实战

很久没写安全工具选型这类文章了。最近有个做运维的朋友跟我吐槽,说他们公司安全设备买了不少,商业盒子堆满了机柜,结果真正出事了还是靠手工翻日志,采购单越来越长,安全感却没跟着涨。这事其实特别典型。我过去几年帮…

📰

SpringBoot+Vue全栈拍卖系统开发实战与优化

1. 项目概述:全栈拍卖系统开发实战 去年为某艺术品交易平台开发在线拍卖系统时,我采用SpringBootVue的技术方案,仅用6周就完成了从需求分析到生产部署的全流程。这个架构组合在中小型交易系统中展现出惊人的效率——后端API平均响应时间控制在…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬