0

I have 100000 users, I am always sending information, in fact this information don't reach to all users and I don't know why.

I will attach the send php files, and please see if you can tell what is wrong with this and which logic I should use. Note if I change 1000 number to 3000 no user receive also I don't know why.

<?php include('session.php');?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
header('Content-type: text/html; charset=utf-8');
//generic php function to send GCM push notification
function sendPushNotificationToGCM($registatoin_ids, $message) {
    //Google cloud messaging GCM-API url
    $url = 'https://android.googleapis.com/gcm/send'; 



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

    define("GOOGLE_API_KEY",       "my_key"); 

    $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_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
    //curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
    $result = curl_exec($ch);       
    if ($result === FALSE) {
        die('Curl failed: ' . curl_error($ch));
    }
    curl_close($ch);
    return $result;
 }
 ?>

<?php
header('Content-type: text/html; charset=utf-8');
$response = array();
require_once __DIR__ . '/db_connect.php';
$db = new DB_CONNECT();

if (isset($_GET['level']) &&isset($_GET['m1']) &&isset($_GET['m2'])  &&isset($_GET['m3']) &&isset($_GET['m4']) &&isset($_GET['m5']) &&isset($_GET['m6']) &&isset($_GET['m7'])){
    $level=$_GET['level'];


    $m1=$_GET['m1'];
    $m2=$_GET['m2'];
    $m3=$_GET['m3'];
    $m4=$_GET['m4'];
    $m5=$_GET['m5'];
    $m6=$_GET['m6'];
    $m7=$_GET['m7'];


    $m11=mysql_real_escape_string($_GET['m1']);
    $m21=mysql_real_escape_string($_GET['m2']);
    $m31=mysql_real_escape_string($_GET['m3']);
    $m41=mysql_real_escape_string($_GET['m4']);
    $m51=mysql_real_escape_string($_GET['m5']);
    $m61=mysql_real_escape_string($_GET['m6']);
    $m71=mysql_real_escape_string($_GET['m7']);

    mysql_query("SET NAMES 'utf8'");
    $resultaa = mysql_query("INSERT words (id, level, m1, m2, m3, m4, m5, m6, m7) VALUES (NULL,'$level','$m11','$m21','$m31','$m41','$m51','$m61','$m71')");
    $id = mysql_insert_id();

    if($level == 0){
        $result = mysql_query("SELECT Rid FROM users ");

    }else{
        $result = mysql_query("SELECT Rid FROM users where level = '$level'  OR level = '4'");
        //$result = mysql_query("SELECT Rid FROM users where level = '$level'");
    }

    $message = array(
                     'word_id' => $id,
                     'm1' => $m1,
                     'm2' => $m2,
                     'm3' => $m3,
                     'm4' => $m4,
                     'm5' => $m5,
                     'm6' => $m6,
                     'm7' => $m7,
                     'level' => $level
                     );

     if (mysql_num_rows($result) > 0) {
        for($counter = 0; $counter<mysql_num_rows($result) ; $counter+=1000)    {
             $gcmRegIds=array();
             for($counter2=$counter ; $counter2<$counter+1000;$counter2++){
                 if($counter2<mysql_num_rows($result)){
                     $row = mysql_fetch_array($result);
                     $gcmRegIds[]=$row["Rid"];

                 }
            }

             $pushStatus = sendPushNotificationToGCM($gcmRegIds, $message);
             echo $pushStatus;

         }

         $time = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
        echo "Process Time: {$time}";


    }else {
        $response["success"] = 0;
        $response["message"] = "No user found";
        echo json_encode($response);
    }    
    //echo $result;
} 
else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);
} 
?>
</body>
</html>
Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
  • Don't put your API keys into public places.. – Sami Kuhmonen Feb 19 '16 at 13:36
  • You should check the response code of the gcm request. For starters just log them to some file and compare it to https://developers.google.com/cloud-messaging/http-server-ref#error-codes – VolkerK Feb 19 '16 at 13:52
  • 1
    *"Note if I change 1000 number to 3000 no user receive"* - http://stackoverflow.com/questions/15017486/android-push-notification-gcm-is-there-any-daily-limit - I seem to have been right about my first comment. – Funk Forty Niner Feb 19 '16 at 14:18
  • @VolkerK Thoughts on? ^ – Funk Forty Niner Feb 19 '16 at 14:19
  • @Fred -ii- My bets are on "Device Message Rate Exceeded"/"Topics Message Rate Exceeded". But who knows? ...the log file will know ;-) – VolkerK Feb 19 '16 at 14:29
  • @VolkerK Could be a mix of both also. ;-) My *Spidey sense* tingled earlier when I first saw the question and thought about "throttling" *right off the bat*. But... you may very well be right. :-) Cheers – Funk Forty Niner Feb 19 '16 at 14:30
  • Oh, those "rate exceeded" error would _be_ throttling. So, we would both be right. (interpreting "mail" very broadly ;-)) – VolkerK Feb 19 '16 at 14:34

0 Answers0