问题描述
我已经为Chrome实施了推送通知,当我需要向GCM发送推送消息时,我使用了以下PHP函数:
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);
}
(我之前已存储订阅)
我认为我可以使用这个网址为Firefox做这样的事情:
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.
我需要向Mozilla注册我的网站才能这样做,例如Google?
I need register my website with Mozilla to do that, like in Google?
请帮助!
推荐答案
我自己的解决方案,(一个同事帮助我的错误在curl请求mozilla),现在工作
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_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是一个包含两个键的数组数组:id和浏览器)
($subscriptionIDs is an array of arrays with 2 keys: id and browser)
这篇关于如何使用php curl在Firefox中发送推送消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!