Я отправляю уведомление тем, кто посетил мой веб-сайт и принял их для отправки уведомлений на рабочем столе. Я беру их регистрационный идентификатор и делаю запрос в gcm api.
НО
Я не могу отправить Notificaiton заглавие,сообщение а также значок.
Вот мой класс PHP взят из GCM с PHP (Google Cloud Messaging)
class GCMPushMessage {
var $url = 'https://android.googleapis.com/gcm/send';
var $serverApiKey = "";
var $devices = array();
/*
Constructor
@param $apiKeyIn the server API key
*/
function GCMPushMessage($apiKeyIn){
$this->serverApiKey = $apiKeyIn;
}
/*
Set the devices to send to
@param $deviceIds array of device tokens to send to
*/
function setDevices($deviceIds){
if(is_array($deviceIds)){
$this->devices = $deviceIds;
} else {
$this->devices = array($deviceIds);
}
}
/*
Send the message to the device
@param $message The message to send
@param $data Array of data to accompany the message
*/
function send($message, $data = false){
if(!is_array($this->devices) || count($this->devices) == 0){
$this->error("No devices set");
}
if(strlen($this->serverApiKey) < 8){
$this->error("Server API Key not set");
}
$fields = array(
'registration_ids' => $this->devices,
'notification' => array( "message" => $message ),
);
if(is_array($data)){
foreach ($data as $key => $value) {
$fields['data'][$key] = $value;
}
}
$headers = array(
'Authorization: key=' . $this->serverApiKey,
'Content-Type: application/json'
);
// Open connection
$ch = curl_init();
// Set the url, number of POST vars, POST data
curl_setopt( $ch, CURLOPT_URL, $this->url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) );
// Avoids problem with https certificate
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);
// Execute post
$result = curl_exec($ch);
// Close connection
curl_close($ch);
return $result;
}
function error($msg){
echo "Android send notification failed with error:";
echo "\t" . $msg;
exit(1);
}
}
Вот мой notification.php файл
$apiKey = "MY_API_KEY";
$devices = array('eBLwIaqdgOs:APA91bG-6Ry1gN1wg2jI3WOpgpQg2bxE1NxgJCBXxzE188GF46JuPO1DkWw-OiKswRr2y0K6xX8k4RKGOHqnub0zgoqgX22I1TDxOAWHrNoTn9XoRMWywARrWAq1zD78fAz3H9VcnqSW');
$message = "The message to send";
$gcpm = new GCMPushMessage($apiKey);
$gcpm->setDevices($devices);
$response = $gcpm->send($message, array('title' => 'Test title'));
echo $response;
А вот мой sw.js файл (работник службы)
'use strict';
console.log('Started', self);
self.addEventListener('install', function(event) {
self.skipWaiting();
console.log('Installed', event);
});
self.addEventListener('activate', function(event) {
console.log('Activated', event);
});
// TODOfunction showNotification(title, body, icon, data) {
console.log('showNotification');
var notificationOptions = {
body: body,
icon: icon ? icon : '/images/touch/chrome-touch-icon-192x192.png',
tag: 'simple-push-demo-notification',
data: data
};
return self.registration.showNotification(title, notificationOptions);
}
self.addEventListener('push', function(event) {
console.log('Received a push message', event);
if (event.data) {
console.log('message data', event.data);
console.log('message data', event.data.text);
var output = event.data.text();
console.log(output);
}
showNotification("My Title","My Message");
});
Когда я перезаписан в свой файл messages.php, мне появляется уведомление или какой регистрационный идентификатор я написал с названием Мой заголовок и сообщение Мое сообщение
Как вы можете видеть, эти данные приходят из sw.js но я не хочу отправлять их через php, потому что они являются динамическими переменными, я получу их от пользователя.
Помоги мне с этим, пожалуйста. Спасибо.
Задача ещё не решена.
Других решений пока нет …