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
  curl_close($ch);
}

(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!

Answers


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 ]);
        break;
        case "chrome":
            $sChrome[] = $subscription["id"];
        break;    
    }
}
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);
    curl_multi_select($mh);
} while ($running > 0);

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

curl_multi_close($mh);
}

($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

Search




Leave an answer