最近在冲浪的过程中,发现了这么一个软件:
Bark - 给你的手机发推送。
简而言之,就是一个iOS的消息推送软件,正好最近在做typecho主题,瞬间我就不困了:是不是可以用这个软件来作为我自己的博客评论消息推送软件?心动不如行动,我便鼓捣出来了,顺便写个教程方便后来者。
服务端部署(可选)
首先是服务端的部署(当然如果怕麻烦也可以跳过这一步,进入下个步骤),具体可参考Bark服务端部署。因为我是用的宝塔,就写一下宝塔的教程。首先根据平台下载可执行文件:https://github.com/Finb/bark-server/releases或自己编译https://github.com/Finb/bark-server,然后进入宝塔/网站/其他项目中,添加通用项目,如下图所示:
按图上进行配置即可。执行命令为:
./bark-server_linux_amd64 -addr 0.0.0.0:8080 -data ./bark-data
配置完成后,去对应的DNS服务商那里进行域名的配置,服务端配置就大功告成了!
客户端设置
服务端配置完成后,使用App Store查询下载Bark即可。下载完成后,打开APP即可进行服务地址与Key的获取了。
若你进行了第一步的服务端部署,点击右上角的+号,进行私有服务器的配置即可。
随后是服务器地址与Key的获取,点击右上角的☁️号,即可查看当前服务器的列表,可以看到,即使你不进行服务器的配置,软件作者提供了一个免费的服务器,我们也可以直接使用。点击对应的服务器,即可获取服务器地址与Key。
主题修改
主题修改这部分稍微有点麻烦,需要找到自己主题关于评论处理的代码,添加消息通知的逻辑,具体代码如下:
// Bark评论消息通知
$barkUrl = \Utils\Helper::options()->barkUrl;
if ($barkUrl) {
// 获取文章信息
$article = $db->fetchRow($db->select()->from('table.contents')->where('cid = ?', $cid));
if (!$article) {
// 处理文章未找到的情况
return;
}
$articleName = $article['title'];
$articleSlug = $article['slug'];
$articleTime = $article['created'];
$articleType = $article['type'];
$articleYear = date('Y', $articleTime);
$articleMonth = date('m', $articleTime);
$articleDay = date('d', $articleTime);
// 获取文章分类
$category = $db->fetchRow(
$db->select()->from('table.metas')
->join('table.relationships', 'table.metas.mid = table.relationships.mid', Typecho_Db::LEFT_JOIN)
->where('table.relationships.cid = ?', $cid)
->where('table.metas.type = ?', 'category')
);
$articleCategorySlug = $category ? $category['slug'] : '';
// 获取文章链接模板
$routingTable = \Utils\Helper::options()->routingTable;
$index = \Utils\Helper::options()->index;
$permalinkTemplate = '';
if ($articleType === 'post') {
$permalinkTemplate = $routingTable['post']['url'];
} elseif ($articleType === 'page') {
$permalinkTemplate = $routingTable['page']['url'];
}
if ($permalinkTemplate) {
$permalink = url($permalinkTemplate, $index);
[$scheme, $permalink] = explode(':', $permalink, 2);
$permalink = ltrim($permalink, '/');
$permalink = preg_replace("/\[([_a-z0-9-]+)[^\]]*\]/i", "{\\1}", $permalink);
$permalink = str_replace(
['{cid}', '{category}', '{year}', '{month}', '{day}'],
[$cid, $articleCategorySlug, $articleYear, $articleMonth, $articleDay],
$permalink
);
$permalink = $scheme . '://' . $permalink;
$message = '您的博文《' . $articleName . '》有新的评论/' . $author . ':' . $text . '?url=' . $permalink;
@file_get_contents($barkUrl . $message);
}
}
一切完成以后,就可以看看效果啦!