Я использую класс для отправки Push-уведомления на основе GCM с PHP. Я загрузил этот класс из https://www.phpclasses.org/package/8987-PHP-Send-push-notifications-to-Android-and-iOS-devices.html
Все работает так, как ожидалось, но по мере того, как число пользователей Android пересекло 3K, теперь отправка push-уведомлений занимает очень много времени. Для отправки Push Notification требуется от 2 до 2 с половиной часов.
И я не могу обновить страницу, чтобы закрыть браузер, иначе операция будет прервана.
Как увеличить скорость отправки Push Notification из моего скрипта.
Важная часть кода, который я использую для отправки Push Notification, приведен ниже:
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 "<br/>"; //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 "<br/>"; 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 "<br/>"; print_r($rtn); echo "<br/>"; //ob_flush(); //Push data to Browser }while ($row_result = mysql_fetch_assoc($get_result)); //header("Location: index.php"); echo "<h2>Completed Sending Pusht Message</h2>"; echo "<br/><br/>"; echo "Rediricting.... Please wait...."; echo "<br/><br/>"; echo '<meta http-equiv="refresh" content="3;url=http://mypresence.in/pushtibooks/pushmsg/" />'; } else { echo "NO Data"; } } }
ТИА
Йоги Ян
Вы отправляете push-уведомление по одному. Вот почему это занимает слишком много времени. Вы можете отправить групповое сообщение с использованием идентификатора устройства. Проверьте эту документацию.
Используйте нижеприведенный код для отправки push-уведомления на Android. То же самое можно сделать и на iOS.
//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)
и 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; }
Обратите внимание, что: Не отправляйте более 1000 идентификаторов устройств на запрос. Если у вас более 1000 пользователей. затем MobIDs
свои MobIDs
размером менее 1000