使用 PHP 的 Google 云消息传递 (GCM)
Posted
技术标签:
【中文标题】使用 PHP 的 Google 云消息传递 (GCM)【英文标题】:Google cloud messaging (GCM) with PHP 【发布时间】:2016-09-15 07:59:53 【问题描述】:我正在尝试使用 php 发送推送通知。 问题是,如何在浏览器中注册 service worker 并直接从 PHP 发送通知。
我得到了后端部分的代码示例:
<?php
define( 'API_ACCESS_KEY', 'SOME KEY' );
$registrationIds = array('fK_LVMivilI:APA91bHCXawEoNXc0Avwk4F6iYsshn4mmWX6jysrg8gC9PGA6_AlqWtr1HXhIMonCCUj8syOlsDGTFJVu_T3aPqdMNynqy7SY5L9OBlgolu-7L2a5pwZrB7kN_bdnUPeZHJQ1HT2i2ed');
$msg = array
(
'message' => 'here is a message. message',
'title' => 'This is a title. title',
'subtitle' => 'This is a subtitle. subtitle',
'tickerText' => 'Ticker text here...Ticker text here...Ticker text here',
'vibrate' => 1,
'sound' => 1,
'largeIcon' => 'large_icon',
'smallIcon' => 'small_icon'
);
$fields = array
(
'registration_ids' => $registrationIds,
'data' => $msg
);
$headers = array
(
'Authorization: key=' . API_ACCESS_KEY,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch );
curl_close( $ch );
echo $result;
当我尝试运行此脚本时,我收到以下错误:
"multicast_id":7003820144951503575,"success":0,"failure":1,"canonical_ids":0,"results":["error":"NotRegistered"]
我猜是因为浏览器中没有注册服务工作者。
因此,如果需要,我需要一些解决方案来使用 PHP 和 javascript 发送带有动态内容的通知。
任何建议。
【问题讨论】:
检查您的注册ID。对吗? 【参考方案1】:查看documentation,了解如何在实现推送消息时注册 Service Worker。这里指出,有一个 service worker 来为 web 实现推送消息是有依赖性的。这样做的原因是,当接收到推送消息时,浏览器可以启动一个 service worker,它在后台运行而不打开页面,并调度一个事件,以便您可以决定如何处理该推送消息。
这是用于此的示例代码。
var isPushEnabled = false;
…
window.addEventListener('load', function()
var pushButton = document.querySelector('.js-push-button');
pushButton.addEventListener('click', function()
if (isPushEnabled)
unsubscribe();
else
subscribe();
);
// Check that service workers are supported, if so, progressively
// enhance and add push messaging support, otherwise continue without it.
if ('serviceWorker' in navigator)
navigator.serviceWorker.register('/service-worker.js')
.then(initialiseState);
else
console.warn('Service workers aren\'t supported in this browser.');
);
有关 Service Worker 的更多信息,请查看以下教程:
PUSH NOTIFICATIONS ON THE WEB - GOOGLE CHROME
WEB PUSH NOTIFICATION WITH SERVICE WORKER
mybb-gcm-push-notifications/service-worker.js.php
【讨论】:
我的主要问题是从我的 PHP 后端发送数据并填写服务人员通知。以上是关于使用 PHP 的 Google 云消息传递 (GCM)的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Azure 通知 REST API 与 Google 云消息传递一起使用