Как использовать php curl для отправки push-сообщения в Firefox
Я реализовал push-уведомления для Chrome, и в тот момент, когда мне нужно отправить push-сообщение в GCM, я использовал следующую функцию PHP:
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);
}
(Я сохранил подписки ранее)
Я думаю, что я могу сделать что-то подобное для Firefox, используя этот URL: https://updates.push.services.mozilla.com/push
Но я не знаю, что мне делать.
Мне нужно зарегистрировать свой сайт в Mozilla, чтобы сделать это, как в Google?
Пожалуйста помоги!
1 ответ
Решение
Мое собственное решение (коллега помог с моей ошибкой в запросе curl для Mozilla) работает сейчас
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_HTTPHEADER, array( "TTL: 86400" ) );
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 - это массив массивов с 2 ключами: id и браузер)