2016-02-08 44 views
4
发送推送消息

我已经实现推送通知浏览器,并在当我需要发送推送消息给GCM的地步,我用下面的PHP函数:如何使用PHP卷曲在Firefox

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,使用这个网址:https://updates.push.services.mozilla.com/push

但我不知道我必须做的。

我需要用Mozilla注册我的网站才能做到这一点,就像在谷歌?

请帮忙!

回答

4

我自己的解决方案,(一个同事跟我在卷曲请求针对Mozilla bug帮助),现在正在

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和浏览器)

+1

您确定它适用于Firefox吗?我做了同样的事情,但没有奏效。当您发送请求时,您从Mozilla服务器获得的响应格式是什么? –

+0

是的,现在正在我的应用程序中工作。当我通过CURL(curl -X PUT https://updates.push.services.mozilla.com/push/-browser-endpoint-)测试mozilla服务器并且一切正常时,服务器响应是空的。 –

+0

@WilderBatistaGonzález,在Mozilla中我无法发送推送通知,你能帮我吗? –