Home Ask Login Register

Developers Planet

Your answer is one click away!

Wilder Batista González February 2016

How use php curl to send push message in Firefox

I have implemented push notifications for Chrome, and in the point when I need send push message to GCM, I used the following PHP function:

function send_push_message($subscription_ids){
  // Set GCM endpoint
  $url = 'https://android.googleapis.com/gcm/send';

  $fields = array(
      'registration_ids' => $subscription_ids,

  $headers = array(
      'Authorization: key=API_KEY',
      'Content-Type: application/json'

  $ch = curl_init();

  // Set the url, number of POST vars, POST data
  curl_setopt($ch, CURLOPT_URL, $url);
  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));

  // Execute post
  $result = curl_exec($ch);
  if ($result === FALSE) {
      die('Push msg send failed in curl: ' . curl_error($ch));

  // Close connection

(I have stored the subscriptions previously)

I think that I can do something like this for Firefox, using this url: https://updates.push.services.mozilla.com/push

But I don't know what I have to do.

I need register my website with Mozilla to do that, like in Google?

Please help!


user2472157 February 2016

I think the below URL may help you https://developer.mozilla.org/en-US/docs/Web/API/Simple_Push_API

Wilder Batista González February 2016

My own solution, (a colleague has helped with my bug in the curl request to mozilla), is working now

function send_push_message($subscriptionIDs){

if (empty($subscriptionIDs)) return FALSE;
$chs = $sChrome = array();
$mh = curl_multi_init();
foreach ($subscriptionIDs as $subscription){
    $i = count($chs);
    switch ($subscription["browser"]){
        case "firefox":
            $chs[ $i ] = curl_init();
            curl_setopt($chs[ $i ], CURLOPT_URL, "https://updates.push.services.mozilla.com/push/".$subscription["id"] );
            curl_setopt($chs[ $i ], CURLOPT_PUT, TRUE);
            curl_setopt($chs[ $i ], CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($chs[ $i ], CURLOPT_SSL_VERIFYPEER, FALSE);

            curl_multi_add_handle($mh, $chs[ $i ]);
        case "chrome":
            $sChrome[] = $subscription["id"];
if (!empty($sChrome)){
    $i = count($chs);
    $chs[ $i ] = curl_init();
    curl_setopt($chs[ $i ], CURLOPT_URL, "https://android.googleapis.com/gcm/send" );
    curl_setopt($chs[ $i ], CURLOPT_POST, TRUE);
    curl_setopt($chs[ $i ], CURLOPT_HTTPHEADER, array( "Authorization: key=MY_KEY", "Content-Type: application/json" ) );
    curl_setopt($chs[ $i ], CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($chs[ $i ], CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($chs[ $i ], CURLOPT_POSTFIELDS, json_encode( array( "registration_ids" => $sChrome ) ) );
    curl_multi_add_handle($mh, $chs[ $i ]);

do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

for ($i = 0; $i < count($chs); $i++){
    curl_multi_remove_handle($mh, $chs[ $i ]);


($subscriptionIDs is an array of arrays with 2 keys: id and browser)

Post Status

Asked in February 2016
Viewed 2,938 times
Voted 6
Answered 2 times


Leave an answer

Quote of the day: live life