Perl 中的推送通知



我正在为具有Perl后端的站点实现推送通知。Firebase是我正在使用的推送通知服务。我花了很多时间研究这个问题,并查看了许多关于SO的指南和一些有用的资源。我提出了一个只有一个问题的工作实现。问题是当发送推送通知时,它似乎作为空消息到达客户端/浏览器。也就是说,当推送通知到达时,无法在客户端/浏览器端检索包含"标题"和"正文"的数据。

我尝试使用较旧和较新的 firebase,无论哪种方式,最终都会得到相同的结果,即空推送通知到达客户端/浏览器。我已经在chrome,Firefox和Android上对此进行了测试,并且发生了同样的事情。

这是发送推送通知的perl代码。我已经排除了生成持有者令牌以限制要读取的代码量。

#SEND PUSH NOTIFICATION
my $push_subscriber = <get subscriber details from db>
my $end_point_host = $push_subscriber->{endpoint};  
my $end_point = "https://$end_point_host/v1/projects/<my project 
id>/messages:send";
my $request = HTTP::Request->new('POST',$end_point);
$request->header('Authorization'=>"Bearer $bearer_token");
$request->header('Content-Type' => 'application/json');
$request->content(JSON::encode_json ({
message => {
token => $push_subscriber->{subscription_id},
notification => {
title => 'test',
body => 'test content'          
},
webpush => {
headers => {
Urgency => 'high'
},
notification => {
body => 'test content',
requireInteraction => 'true' 
}
}
}}));
#send the request           
$ua->request($request));

这是在推送通知到达时调用的客户端/浏览器端 javascript。这是服务工作者内部.js

self.addEventListener('push', function(e) {
var body;
if (e.data) {//THE PROBLEM IS HERE. No 'data' object exists
body = e.data.text();
} else {
body = "Empty Message";
}
var options = {
body: body
};
e.waitUntil(
self.registration.showNotification('My Notification', options)
);
});

问题出现的地方在上面的javascript中指出。任何帮助/反馈将不胜感激。谢谢。

我最终通过重写我的客户端订阅代码来解决这个问题。就我而言,铃铛图标订阅开/关按钮以及所有 js 代码使其工作。

基本上,我从使用googles解决方案到本指南的Firebase特定解决方案。 https://firebase.google.com/docs/cloud-messaging/js/receive

您只需要将"令牌"存储在服务器上,端点始终是 - https://fcm.googleapis.com/v1/projects/YOUR 项目ID/消息:发送

Firebase 指南包含一个示例文件,您可以在其中订阅/取消订阅推送通知。 https://github.com/firebase/quickstart-js/blob/4be200b1c55616535159365b74bfd1fc128c1ebf/messaging/index.html

一旦我有了这个工作,我就可以把它剪下来,把它重写成一个简单的通知按钮。

出于某种原因,指南中提供的 firebase-messaging-sw.js 对我不起作用,但使用我的 OP 中显示的服务工作者.js所以我现在可以接收推送通知以及他们的标题、正文和其他数据。

这是我如何生成在我的 OP 示例 perl 代码中使用的持有者令牌以发送推送通知。 Google API OAuth2 : 使用 Perl 请求服务帐户令牌时出现"invalid_grant"错误

这应该有望涵盖如果您想在具有Perl后端的站点上进行推送通知,则需要知道的所有内容。希望这能帮助其他人想要做同样的事情。

相关内容

  • 没有找到相关文章

最新更新