0

Я пытаюсь разобраться в отправке push-уведомлений с помощью PHP. Проблема заключается в том, как зарегистрировать сервис-работника в браузере и отправлять уведомления непосредственно с PHP.Google cloud messaging (GCM) с 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, если это необходимо.

Любой совет, поджатый.

+0

проверьте свой идентификатор регистрации. это правильно? –

ответ

1

Отметьте это documentation о том, как зарегистрировать Рабочего Рабочего в реализации Push-сообщений. Здесь указывается, что существует зависимость того, что работник службы должен реализовать push-сообщения для Интернета. Причиной этого является то, что при получении push-сообщения браузер может запустить служебного работника, который работает в фоновом режиме без открытой страницы и отправляет событие, чтобы вы могли решить, как обрабатывать это push-сообщение.

Это пример использования кода.

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.'); 
} 
}); 

Для получения дополнительной информации о службе работнике, проверить это учебники:

+0

Основная проблема для меня - отправить данные с моего исходного кода PHP и заполнить уведомление рабочего сотрудника. – Viktor

Смежные вопросы