El envío de notificaciones push de GCM lleva mucho tiempo en PHP

Estoy usando una clase para enviar notificaciones push basadas en GCM desde PHP. Descargué esta clase de https://www.phpclasses.org/package/8987-PHP-Send-push-notifications-to-Android-and-iOS-devices.html

Todas las cosas están funcionando como se esperaba, pero como el número de usuarios de Android ha cruzado 3K, el envío de notificaciones push lleva mucho tiempo. Se tarda aproximadamente 2 a 2 horas y media para enviar la Notificación Push.

Y no puedo actualizar la página para cerrar el navegador, de lo contrario, la operación se cancela.

¿Cómo puedo boost la velocidad de envío de notificaciones push desde mi script?

La parte importante del código que estoy usando para enviar notificaciones push es la siguiente:

if (isset($_POST['sendmessage']) && !empty($_POST['sendmessage'])) { $errorvalid = array(); $success = TRUE; $requiredFields = array("subject_notify" => "Please Enter Notify Subject.", "subject_main" => "Please Enter Main Subject.", "msg" => "Please Enter Message"); foreach ($requiredFields as $fld => $msg) { $v = $_POST[$fld]; if (empty($v)) { $success = false; $errorvalid[$fld] = $msg; } else { $errorvalid[$fld] = ''; $$fld = $v; } } if($success) { $get_result = mysql_query("SELECT ps_mobile_id, ps_service_type FROM push_service", $con); $row_result = mysql_fetch_assoc($get_result); $totalRows_row_result = mysql_num_rows($get_result); echo "Total Records: ".$totalRows_row_result; echo "
"; //Set parameters to hold time out error set_time_limit(0); error_reporting(E_ALL); //ob_implicit_flush(TRUE); //ob_end_flush(); if($totalRows_row_result > 0) { $push = new pushmessage(); do { $MobID = $row_result['ps_mobile_id']; $MobType = $row_result['ps_service_type']; echo "Mobile ID: ".$MobID; echo "
"; if($MobType == 1) { //Android $params = array("pushtype"=>"android", "msg"=>$msg, "registration_id"=>$MobID, "subject_main"=>$subject_main, "subject_notify"=>$subject_notify, ); $rtn = $push->sendMessage($params); //Push the message $rtn = $push->sendMessage($params); } else { //iOS //$params = array("pushtype"=>"android", "msg"=>$msg, "registration_id"=>$MobID, //"subject_main"=>$subject_main, "subject_notify"=>$subject_notify, ); //$rtn = $push->sendMessage($params); //Push the message //$rtn = $push->sendMessage($params); } echo "
"; print_r($rtn); echo "
"; //ob_flush(); //Push data to Browser }while ($row_result = mysql_fetch_assoc($get_result)); //header("Location: index.php"); echo "

Completed Sending Pusht Message

"; echo "

"; echo "Rediricting.... Please wait...."; echo "

"; echo ''; } else { echo "NO Data"; } } }

TIA

Yogi Yang

    Usted está enviando notificaciones push uno por uno. Es por eso que toma mucho tiempo. Puedes enviar un mensaje de grupo usando la identificación del dispositivo. Consulte esta documentación.

    Utilice el siguiente código para enviar notificaciones push a Android. De la misma manera puedes hacerlo en iOS también.

     //For andriod $get_result = mysql_query("SELECT ps_mobile_id FROM push_service where ps_service_type = 1", $con); // $row_result = mysql_fetch_assoc($get_result); $totalRows_row_result = mysql_num_rows($get_result); $MobIDs=array(); while($row = mysql_fetch_assoc($get_result)){ $MobIDs[] = $row; } $params = array("pushtype"=>"android", "msg"=>$msg, "subject_main"=>$subject_main, "subject_notify"=>$subject_notify, ); $rtn = $push->sendMessageAndroid($MobIDs, $params) 

    y sendMessageAndroid($registration_id, $params)

      public $androidAuthKey = "Android Auth Key Here"; public $iosApnsCert = "./certification/xxxxx.pem"; /** * For Android GCM * $params["msg"] : Expected Message For GCM */ private function sendMessageAndroid($registration_id, $params) { $this->androidAuthKey = "Android Auth Key Here";//Auth Key Herer ## data is different from what your app is programmed $data = array( 'registration_ids' => array($registration_id), 'data' => array( 'gcm_msg' => $params["msg"] ) ); $headers = array( "Content-Type:application/json", "Authorization:key=".$this->androidAuthKey ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://android.googleapis.com/gcm/send"); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); $result = curl_exec($ch); //result sample {"multicast_id":6375780939476727795,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1390531659626943%6cd617fcf9fd7ecd"}]} //http://developer.android.com/google/gcm/http.html // refer error code curl_close($ch); $rtn["code"] = "000";//means result OK $rtn["msg"] = "OK"; $rtn["result"] = $result; return $rtn; } 

    Tenga en cuenta que: No envíe más de 1000 ID de dispositivo por solicitud. Si tienes más de 1000 usuarios. luego MobIDs tus MobIDs con un tamaño inferior a 1000