2015-05-10 68 views
0

我试图发送推送通知给GCM ID存储在MySQL数据库中的用户。 事情是与我的代码,我获取ID并在一个while循环内一个接一个地发送它们。如果用户数量很大,那就是有很多ID(大约700),服务器给出了一个内部错误...而一旦我减少了数量(大约200),代码运行良好,我没有得到任何错误。发送Android推送通知一次而不是一个一个

我的问题是,有没有办法将推送通知发送一次而不是逐个发送。

下面是我使用send的代码。

include(“/home/myHome/db/db.php”);

$resultTokenUser = $mysqli->query ('select * from android'); 

if ($resultTokenUser->num_rows > 0) 
{    
    while ($row = $resultTokenUser->fetch_assoc()) 
    {   
     $token = $row ['gcm_regid']; 
     $registatoin_ids = array ("$token"); 

     $messageToSend = array (
       "notificationMessage" => "Hello", 
     ); 

     $url = 'https://android.googleapis.com/gcm/send'; 

     $fields = array (
       'registration_ids' => $registatoin_ids, 
       'data' => $messageToSend 
     ); 

     define ("GOOGLE_API_KEY", "myKey"); 
     $headers = array (
       'Authorization: key=' . GOOGLE_API_KEY, 
       'Content-Type: application/json' 
     ); 
     $ch = curl_init(); 
     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)); 
     $result = curl_exec ($ch); 
    } 
} 

curl_close ($ch); 

回答

1

GCM HTTP Connection Server - Source

从DB作为数组获取的注册ID,并填写$registatoin_ids阵列,每个REG ID,只是一次发送。

$registatoin_ids = array(); 
    for($i=0;$i<$reg_id_count;$i++) { 

     array_push($registatoin_ids, $row[$i]['gcm_regid']); 

    } 
1

是的,您可以一次发送通知到多达1000个设备。您可以一次创建1000个注册ID的数组,并将其放入请求的registration_ids值中。

$registration_ids=array("id1", "id2",…...." Id1000"); 

$fields = array(
    'registration_ids' => $registatoin_ids, 
    'data' => $message, 
); 
相关问题