<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Android on 神奇网络</title><link>https://shenqinet.pages.dev/tags/android/</link><description>Recent content in Android on 神奇网络</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://shenqinet.pages.dev/tags/android/index.xml" rel="self" type="application/rss+xml"/><item><title>用Gotify自建安卓消息推送通知服务，和iOS的Bark一样的效果</title><link>https://shenqinet.pages.dev/p/gotify-android-notification/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>https://shenqinet.pages.dev/p/gotify-android-notification/</guid><description>&lt;img src="https://shenqinet.pages.dev/p/gotify-android-notification/img01.png" alt="Featured image of post 用Gotify自建安卓消息推送通知服务，和iOS的Bark一样的效果" /&gt;&lt;h2 id="摘要"&gt;摘要
&lt;/h2&gt;&lt;p&gt;想要在自己的手机上能够以系统级别的通知形式第一时间收到通知、提醒消息，在 iOS 上已经有非常不错的方案，那就是 &lt;code&gt;Bark&lt;/code&gt; 这款 App，可以使用官方的服务、也是免费的，如果是比较注重隐私，也可以下载官方的服务器代码自建服务器。&lt;/p&gt;
&lt;p&gt;那么安卓系统有没有这类软件和服务呢？众所周知，安卓不同手机厂商都有不同的 &lt;code&gt;Push&lt;/code&gt; 服务，有不同的消息推送 &lt;code&gt;SDK&lt;/code&gt;，因此适配起来很是麻烦，但目前仍然有一款开源的软件还是可以的 - &lt;strong&gt;Gotify&lt;/strong&gt;（&lt;a class="link" href="https://gotify.net/" target="_blank" rel="noopener"
 &gt;https://gotify.net/&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;本次给大家介绍一下，&lt;code&gt;Gotify&lt;/code&gt; 的服务端搭建与客户端的配置。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Gotify Logo" class="gallery-image" data-flex-basis="560px" data-flex-grow="233" height="420" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img01.png" srcset="https://shenqinet.pages.dev/p/gotify-android-notification/img01_hu_4092ae77e0501489.png 800w, https://shenqinet.pages.dev/p/gotify-android-notification/img01.png 980w" width="980"&gt;&lt;/p&gt;
&lt;h2 id="gotify-是什么"&gt;Gotify 是什么
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Gotify&lt;/code&gt; 是一套自托管推送通知系统，由两部分组成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gotify Server&lt;/strong&gt;：服务端，负责接收消息并分发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gotify Client&lt;/strong&gt;（Android / Web）：客户端，负责实时接收并展示通知&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;核心优势：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;开源、可自建、无第三方依赖&lt;/li&gt;
&lt;li&gt;HTTP API，任何语言都能推送&lt;/li&gt;
&lt;li&gt;Android 系统级通知（支持优先级）&lt;/li&gt;
&lt;li&gt;支持 Docker，一行命令即可部署&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="服务器搭建"&gt;服务器搭建
&lt;/h2&gt;&lt;p&gt;现在宝塔面板已经有 &lt;code&gt;Docker&lt;/code&gt; 应用直接下载，需在目前比较新的宝塔面板上才有。&lt;/p&gt;
&lt;p&gt;&lt;img alt="宝塔面板Docker" class="gallery-image" data-flex-basis="790px" data-flex-grow="329" height="230" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img02.png" width="758"&gt;&lt;/p&gt;
&lt;p&gt;进入宝塔面板的 Docker 直接搜索就可以下载安装。&lt;/p&gt;
&lt;p&gt;&lt;img alt="搜索Gotify" class="gallery-image" data-flex-basis="492px" data-flex-grow="205" height="514" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img03.png" srcset="https://shenqinet.pages.dev/p/gotify-android-notification/img03_hu_5935f3b0668abecc.png 800w, https://shenqinet.pages.dev/p/gotify-android-notification/img03.png 1054w" width="1054"&gt;&lt;/p&gt;
&lt;p&gt;安装完就可以启动了，启动后会在你当前服务器的 IP 地址开启一个后台，这个后台服务是有一个端口的，这个端口你需要前往服务器的防火墙加入，不然一直进不去的，记得这很重要。&lt;/p&gt;
&lt;p&gt;点击详情，就可以看到后台账号密码。&lt;/p&gt;
&lt;p&gt;&lt;img alt="查看详情" class="gallery-image" data-flex-basis="248px" data-flex-grow="103" height="811" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img04.png" srcset="https://shenqinet.pages.dev/p/gotify-android-notification/img04_hu_72fa8d095b352330.png 800w, https://shenqinet.pages.dev/p/gotify-android-notification/img04.png 839w" width="839"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="后台账号密码" class="gallery-image" data-flex-basis="789px" data-flex-grow="329" height="237" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img05.png" width="780"&gt;&lt;/p&gt;
&lt;p&gt;登录进去先不管了，先去下载 APP。&lt;/p&gt;
&lt;h2 id="下载客户端"&gt;下载客户端
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub 开源地址&lt;/strong&gt;：&lt;a class="link" href="https://github.com/gotify/android/releases/tag/v2.9.0" target="_blank" rel="noopener"
 &gt;https://github.com/gotify/android/releases/tag/v2.9.0&lt;/a&gt;（国内下载比较慢）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;国内下载地址&lt;/strong&gt;：&lt;a class="link" href="https://likeyun.lanzout.com/iNEw53fn5fif" target="_blank" rel="noopener"
 &gt;https://likeyun.lanzout.com/iNEw53fn5fif&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下载安装后打开客户端，然后登录。&lt;/p&gt;
&lt;p&gt;登录的时候，输入的就是你上面搭建好的服务器 IP 地址和端口号。&lt;/p&gt;
&lt;p&gt;&lt;img alt="客户端登录界面" class="gallery-image" data-flex-basis="136px" data-flex-grow="57" height="680" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img06.png" width="388"&gt;&lt;/p&gt;
&lt;p&gt;账号密码也是点击详情获取到的。&lt;/p&gt;
&lt;p&gt;点击登录后会让你创建一个设备名称。&lt;/p&gt;
&lt;p&gt;&lt;img alt="创建设备名称" class="gallery-image" data-flex-basis="148px" data-flex-grow="62" height="751" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img07.png" width="466"&gt;&lt;/p&gt;
&lt;p&gt;确定后就登录进去了。&lt;/p&gt;
&lt;p&gt;然后去后台就可以看到新设备加入了。&lt;/p&gt;
&lt;p&gt;&lt;img alt="后台设备列表" class="gallery-image" data-flex-basis="518px" data-flex-grow="216" height="508" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img08.png" srcset="https://shenqinet.pages.dev/p/gotify-android-notification/img08_hu_28bb8c5ab5a2ed74.png 800w, https://shenqinet.pages.dev/p/gotify-android-notification/img08.png 1098w" width="1098"&gt;&lt;/p&gt;
&lt;h2 id="推送消息的代码"&gt;推送消息的代码
&lt;/h2&gt;&lt;p&gt;先在后台创建一个应用 &lt;code&gt;Token&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt="创建应用Token" class="gallery-image" data-flex-basis="589px" data-flex-grow="245" height="447" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img09.png" srcset="https://shenqinet.pages.dev/p/gotify-android-notification/img09_hu_20ef03973a354b4f.png 800w, https://shenqinet.pages.dev/p/gotify-android-notification/img09.png 1098w" width="1098"&gt;&lt;/p&gt;
&lt;p&gt;我这里创建一个名为测试的应用，&lt;code&gt;Default Priority&lt;/code&gt; 是默认优先级的意思，数字大一些优先级高。&lt;/p&gt;
&lt;p&gt;&lt;img alt="创建测试应用" class="gallery-image" data-flex-basis="365px" data-flex-grow="152" height="520" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img10.png" width="791"&gt;&lt;/p&gt;
&lt;p&gt;创建后，复制这个 Token 等会有用。&lt;/p&gt;
&lt;p&gt;&lt;img alt="复制Token" class="gallery-image" data-flex-basis="603px" data-flex-grow="251" height="437" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img11.png" srcset="https://shenqinet.pages.dev/p/gotify-android-notification/img11_hu_a9e84d777b0bf258.png 800w, https://shenqinet.pages.dev/p/gotify-android-notification/img11.png 1098w" width="1098"&gt;&lt;/p&gt;
&lt;h3 id="php-推送代码"&gt;PHP 推送代码
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Content-Type: application/json; charset=utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;http://IP地址:端口号/message?token=刚才复制的Token&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;通知&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;message&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;message&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;json_encode&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;code&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;msg&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;请输入内容&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;message&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;priority&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_setopt_array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;CURLOPT_POST&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;CURLOPT_POSTFIELDS&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;CURLOPT_TIMEOUT&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$err&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_getinfo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLINFO_HTTP_CODE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;json_encode&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;code&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;msg&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$err&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;json_encode&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;code&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$http&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;res&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;json_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;复制以上代码，去你已经解析好域名的一个目录下，创建一个文件，名字自己取，例如 &lt;code&gt;send.php&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;然后代码粘贴进去并保存，修改代码里面的 &lt;code&gt;IP 地址和端口号&lt;/code&gt; 就是你刚才创建的 &lt;code&gt;gotify&lt;/code&gt; 服务器的，&lt;code&gt;Token&lt;/code&gt; 也是上一步让你复制的那个，保存就行。&lt;/p&gt;
&lt;h3 id="测试推送"&gt;测试推送
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://域名/目录/send.php?title=推送标题&amp;amp;message=这是内容666
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;访问这个代码所在的路径后，即可触发推送。&lt;/p&gt;
&lt;p&gt;&lt;img alt="推送测试" class="gallery-image" data-flex-basis="237px" data-flex-grow="99" height="430" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img12.png" width="426"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="收到通知" class="gallery-image" data-flex-basis="284px" data-flex-grow="118" height="363" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img13.png" width="430"&gt;&lt;/p&gt;
&lt;p&gt;正常来说就会马上弹出消息了，如果不弹出来，那么一般都是手机的通知设置问题。&lt;/p&gt;
&lt;p&gt;我的是 &lt;code&gt;红米K90&lt;/code&gt;，只需要长按图标即可进入设置通知。&lt;/p&gt;
&lt;p&gt;&lt;img alt="长按图标" class="gallery-image" data-flex-basis="281px" data-flex-grow="117" height="520" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img14.png" width="610"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="通知设置" class="gallery-image" data-flex-basis="115px" data-flex-grow="48" height="880" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img15.png" width="425"&gt;&lt;/p&gt;
&lt;p&gt;开启前后对比，把所有有利于你第一时间看到最明显的通知的项打开。&lt;/p&gt;
&lt;p&gt;&lt;img alt="通知设置对比" class="gallery-image" data-flex-basis="362px" data-flex-grow="151" height="603" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://shenqinet.pages.dev/p/gotify-android-notification/img16.png" srcset="https://shenqinet.pages.dev/p/gotify-android-notification/img16_hu_62cb233a97d3300e.png 800w, https://shenqinet.pages.dev/p/gotify-android-notification/img16.png 912w" width="912"&gt;&lt;/p&gt;
&lt;p&gt;其他手机自行研究。&lt;/p&gt;
&lt;h2 id="适用场景"&gt;适用场景
&lt;/h2&gt;&lt;p&gt;前期只需要搭建好服务器即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://域名/目录/send.php?title=推送标题&amp;amp;message=这是内容666
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这个链接可以嵌入很多场景，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;服务器的后端任意页面，用于监控某个状态的变化进行通知；&lt;/li&gt;
&lt;li&gt;宝塔面板定时任务执行到自己的目的的时候发送通知；&lt;/li&gt;
&lt;li&gt;服务器运维告警通知；&lt;/li&gt;
&lt;li&gt;抢票软件抢票结果；&lt;/li&gt;
&lt;li&gt;短信转发器推送通道配置；&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="总结"&gt;总结
&lt;/h2&gt;&lt;p&gt;Gotify 是一款非常优秀的自建消息推送服务，特别适合注重隐私的用户。通过简单的配置，就可以实现安卓系统级别的通知推送，效果堪比 iOS 的 Bark。&lt;/p&gt;
&lt;p&gt;如果你在使用过程中有任何问题，欢迎在评论区留言讨论！&lt;/p&gt;</description></item></channel></rss>